Menjalankan situs dapat menjadi sulit dengan semua overhead pembuatan dan pengelolaan instance Virtual Machine (VM), cluster, Pod, layanan, dan lainnya. Hal ini tidak masalah untuk aplikasi multi-tingkat yang lebih besar, tetapi jika Anda hanya mencoba men-deploy dan membuat situs Anda terlihat, maka akan ada banyak overhead.
Dengan Cloud Run, yang merupakan penerapan Knative Google Cloud, Anda dapat mengelola dan men-deploy situs tanpa memerlukan overhead deployment berbasis VM atau Kubernetes. Pendekatan ini tidak hanya lebih sederhana dari perspektif pengelolaan, tetapi juga memberi Anda kemampuan untuk melakukan penskalaan hingga nol ketika tidak ada permintaan yang masuk ke situs Anda.
Cloud Run tidak hanya menghadirkan pengembangan serverless ke container, tetapi juga dapat dijalankan di cluster Google Kubernetes Engine (GKE) Anda sendiri atau di solusi platform sebagai layanan (PaaS) yang terkelola sepenuhnya yang disediakan oleh Cloud Run. Anda akan menguji skenario terakhir dalam codelab ini.
Diagram berikut menggambarkan alur deployment dan hosting Cloud Run. Anda akan memulai dengan image Docker yang dibuat melalui Cloud Build, yang Anda picu di Cloud Shell. Kemudian, Anda akan men-deploy image tersebut ke Cloud Run dengan perintah di Cloud Shell.
Prasyarat
- Memahami Docker secara umum (Lihat bagian Mulai di situs Docker.)
Yang akan Anda pelajari
- Cara mem-build image Docker dengan Cloud Build dan menguploadnya ke gcr.io
- Cara men-deploy image Docker ke Cloud Run
- Cara mengelola deployment Cloud Run
- Cara menyiapkan endpoint untuk aplikasi di Cloud Run
Yang akan Anda build
- Situs statis yang berjalan di dalam container Docker
- Versi penampung ini yang ada di Container Registry
- Deployment Cloud Run untuk situs statis Anda
Yang Anda butuhkan
- Akun Google dengan akses administratif untuk membuat project atau project dengan peran pemilik project
Penyiapan lingkungan mandiri
Jika belum memiliki Akun Google, Anda harus membuatnya. Kemudian, login ke Konsol Google Cloud dan klik Project > Create project.
Ingat project ID, yang otomatis diisi di bawah nama project Anda. Project ID adalah nama unik di semua project Google Cloud, jadi nama dalam screenshot sudah digunakan dan tidak akan berfungsi untuk Anda. Project ID tersebut selanjutnya akan disebut sebagai PROJECT_ID
.
Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource Google Cloud dan mengaktifkan Cloud Run API.
Mengaktifkan Cloud Run API
Klik Navigation menu ☰ > APIs & Services > Dashboard > Enable APIs And Services. .
Telusuri "Cloud Run API", lalu klik Cloud Run API > Aktifkan.
Menjalankan codelab ini tidak akan menghabiskan biaya lebih dari beberapa dolar, tetapi bisa lebih jika Anda memutuskan untuk menggunakan lebih banyak resource atau jika Anda membiarkannya berjalan (lihat Pembersihan di akhir). Untuk mengetahui informasi selengkapnya, lihat Harga.
Pengguna baru Google Cloud memenuhi syarat untuk mendapatkan uji coba gratis senilai$300.
Cloud Shell
Meskipun Google Cloud dan Cloud Run dapat dioperasikan dari jarak jauh menggunakan laptop Anda, Anda akan menggunakan Cloud Shell, lingkungan command line yang berjalan di Google Cloud. Lingkungan telah dikonfigurasi sebelumnya dengan semua library dan framework klien yang Anda butuhkan.
Mesin virtual berbasis Debian ini memuat semua alat pengembangan yang akan Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Ini berarti bahwa semua yang Anda perlukan untuk codelab ini adalah browser (ya, ini berfungsi di Chromebook).
Untuk mengaktifkan Google Cloud Shell, dari konsol developer, cukup klik tombol di sisi kanan atas (hanya perlu beberapa saat untuk melakukan penyediaan dan terhubung ke lingkungan):
Klik tombol "Start Cloud Shell":
Setelah terhubung ke cloud shell, Anda akan melihat bahwa Anda sudah diautentikasi dan project sudah ditetapkan ke PROJECT_ID
Anda :
gcloud auth list
Output perintah
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Output perintah
[core] project = <PROJECT_ID>
Cloud Shell juga menetapkan beberapa variabel lingkungan secara default yang mungkin berguna saat Anda menjalankan perintah di masa mendatang.
echo $GOOGLE_CLOUD_PROJECT
Output perintah
<PROJECT_ID>
Jika project belum ditetapkan karena beberapa alasan, cukup jalankan perintah berikut :
gcloud config set project <PROJECT_ID>
Mencari PROJECT_ID
Anda? Periksa ID yang Anda gunakan di langkah-langkah penyiapan atau cari di dasbor konsol:
PENTING: Terakhir, tetapkan konfigurasi project dan zona default:
gcloud config set compute/zone us-central1-f
Anda dapat memilih berbagai zona yang berbeda. Pelajari lebih lanjut di dokumentasi Region & Zona.
Mengingat Anda men-deploy situs yang sudah ada, Anda hanya perlu meng-clone sumber dari repositori, sehingga Anda dapat berfokus pada pembuatan image Docker dan men-deploy ke Cloud Run.
Jalankan perintah berikut untuk meng-clone repositori ke instance Cloud Shell Anda dan beralih ke direktori yang sesuai. Anda juga akan menginstal dependensi Node.js agar dapat menguji aplikasi sebelum deployment.
cd ~ git clone https://github.com/googlecodelabs/monolith-to-microservices.git cd ~/monolith-to-microservices ./setup.sh
Tindakan ini akan meng-clone repositori Anda, mengubah direktori, dan menginstal dependensi yang diperlukan untuk menjalankan aplikasi Anda secara lokal. Mungkin perlu waktu beberapa menit agar skrip dapat berjalan.
Lakukan uji tuntas dan uji aplikasi Anda. Jalankan perintah berikut untuk memulai server web Anda:
cd ~/monolith-to-microservices/monolith npm start
Output:
Monolith listening on port 8080!
Anda dapat melihat pratinjau aplikasi dengan mengklik Web Preview dan memilih Preview on port 8080.
Tindakan ini akan membuka jendela baru tempat Anda dapat melihat Fancy Store beraksi.
Anda dapat menutup jendela ini setelah melihat situs. Untuk menghentikan proses server web, tekan CONTROL+C
(Command+C
di Macintosh) di jendela terminal.
Setelah file sumber Anda siap, saatnya membuat Docker untuk aplikasi Anda.
Biasanya, Anda harus mengambil pendekatan dua langkah yang mencakup membangun container Docker dan mengirimkannya ke registry untuk menyimpan image yang akan ditarik dari GKE. Namun, Anda dapat mempermudah pekerjaan dengan menggunakan Cloud Build untuk membangun container Docker dan menempatkan image di Container Registry dengan satu perintah. Untuk melihat proses manual pembuatan Dockerfile dan mengirimkannya, lihat Panduan memulai Container Registry.
Cloud Build mengompresi file dari direktori dan memindahkannya ke bucket Cloud Storage. Proses build kemudian mengambil semua file dari bucket dan menggunakan Dockerfile, yang ada di direktori yang sama untuk menjalankan proses build Docker. Mengingat Anda menentukan flag --tag
dengan host sebagai gcr.io untuk image Docker, image Docker yang dihasilkan akan dikirim ke Container Registry.
Pertama, Anda harus memastikan bahwa Cloud Build API telah diaktifkan. Jalankan perintah berikut untuk mengaktifkannya:
gcloud services enable cloudbuild.googleapis.com
Setelah API diaktifkan, jalankan perintah berikut di Cloud Shell untuk memulai proses build:
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 .
Proses tersebut akan memakan waktu beberapa menit, tetapi setelah selesai, akan ada output di terminal yang mirip dengan berikut ini:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ID CREATE_TIME DURATION SOURCE IMAGES STATUS 1ae295d9-63cb-482c-959b-bc52e9644d53 2019-08-29T01:56:35+00:00 33S gs://<PROJECT_ID>_cloudbuild/source/1567043793.94-abfd382011724422bf49af1558b894aa.tgz gcr.io/<PROJECT_ID>/monolith:1.0.0 SUCCESS
Untuk melihat histori build atau memantau proses secara real time, Anda dapat membuka Konsol Cloud, lalu mengklik Navigation menu ☰ > Cloud Build > History. Di sana, Anda dapat melihat daftar semua build sebelumnya, tetapi hanya ada satu build yang Anda buat.
Jika mengklik Build id, Anda dapat melihat semua detail untuk build tersebut, termasuk output log. Anda dapat melihat image penampung yang dibuat dengan mengklik link di samping Image.
Setelah Anda membuat container situs dan mengirimkannya ke Container Registry, saatnya men-deploy ke Cloud Run.
Ada dua pendekatan untuk men-deploy ke Cloud Run:
- Cloud Run (terkelola sepenuhnya) adalah model PaaS tempat seluruh siklus proses container dikelola. Anda akan menggunakan pendekatan tersebut untuk codelab ini.
- Cloud Run for Anthos adalah Cloud Run dengan lapisan kontrol tambahan, yang memungkinkan Anda membawa cluster dan Pod dari GKE. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan Cloud Run for Anthos di Google Cloud.
Contoh command line akan ada di Cloud Shell menggunakan variabel lingkungan yang Anda siapkan sebelumnya.
Command line
Jalankan perintah berikut ini untuk menggunakan aplikasi anda:
gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed
Anda akan diminta untuk menentukan region tempat Anda ingin menjalankan aplikasi. Pilih region yang terdekat dengan Anda, lalu terima nama layanan default yang disarankan (monolith).
Untuk tujuan pengujian, izinkan permintaan yang tidak diautentikasi ke aplikasi. Masukkan y
saat diminta.
Memverifikasi deployment
Untuk memverifikasi bahwa deployment berhasil dibuat, jalankan perintah berikut. Mungkin perlu waktu beberapa saat agar Pod status
Running
:
gcloud run services list
Pilih [1] Cloud Run (terkelola sepenuhnya).
Output:
SERVICE REGION URL LAST DEPLOYED BY LAST DEPLOYED AT ✔ monolith us-east1 <your url> <your email> 2019-09-16T21:07:38.267Z
Output ini menunjukkan beberapa hal. Anda dapat melihat deployment Anda, serta pengguna yang men-deploy-nya (alamat email Anda) dan URL yang dapat Anda gunakan untuk mengakses aplikasi. Sepertinya semuanya berhasil dibuat.
Buka URL yang diberikan dalam daftar layanan di browser web Anda dan Anda akan melihat situs yang sama dengan yang Anda pratinjau secara lokal.
Sekarang, deploy aplikasi Anda lagi, tetapi kali ini sesuaikan salah satu parameter.
Secara default, aplikasi Cloud Run akan memiliki nilai serentak 80, yang berarti setiap instance container akan melayani hingga 80 permintaan sekaligus. Hal ini sangat berbeda dengan model function as a service (FaaS), di mana satu instance menangani satu permintaan dalam satu waktu.
Deploy ulang image container yang sama dengan nilai serentak 1 (hanya untuk tujuan pengujian) dan lihat apa yang terjadi.
gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed --concurrency 1
Jawab pertanyaan berikutnya seperti yang Anda lakukan pertama kali. Setelah perintah berhasil, periksa Konsol Cloud untuk melihat hasilnya.
Dari dasbor Cloud Run, klik layanan monolith untuk melihat detailnya.
Klik tab Revisi. Anda akan melihat dua revisi yang dibuat. Klik monolith-00002 dan tinjau detailnya. Anda akan melihat nilai serentak berkurang menjadi 1.
]
Meskipun konfigurasi tersebut cukup untuk pengujian, dalam sebagian besar skenario produksi, Anda akan memiliki penampung yang mendukung beberapa permintaan serentak.
Sekarang, pulihkan konkurensi asli tanpa men-deploy ulang. Anda dapat menyetel nilai konkurensi ke default 80 atau 0, yang akan menghapus batasan konkurensi dan menyetelnya ke maksimum default (yang kebetulan 80 pada saat penulisan ini).
Jalankan perintah berikut di Cloud Shell untuk memperbarui revisi saat ini:
gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed --concurrency 80
Perhatikan bahwa revisi lain telah dibuat, traffic telah dialihkan, dan serentak kembali ke 80.
Tim pemasaran meminta Anda mengubah halaman beranda situs perusahaan Anda. Menurut mereka, halaman ini harus lebih informatif terkait apa perusahaan dan produk yang dijual. Di bagian ini, Anda akan menambahkan beberapa teks ke halaman beranda agar tim pemasaran merasa senang.
Sepertinya salah satu developer Anda telah membuat perubahan dengan nama file index.js.new
. Anda cukup menyalin file tersebut ke index.js
dan perubahan Anda akan diterapkan. Ikuti petunjuk untuk melakukan perubahan yang sesuai.
Jalankan perintah berikut, salin file yang telah diperbarui ke nama file yang benar, dan cetak isinya untuk memverifikasi perubahan:
cd ~/monolith-to-microservices/react-app/src/pages/Home mv index.js.new index.js cat ~/monolith-to-microservices/react-app/src/pages/Home/index.js
Kode yang dihasilkan akan terlihat seperti ini:
/* Copyright 2019 Google LLC Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ import React from "react"; import { makeStyles } from "@material-ui/core/styles"; import Paper from "@material-ui/core/Paper"; import Typography from "@material-ui/core/Typography"; const useStyles = makeStyles(theme => ({ root: { flexGrow: 1 }, paper: { width: "800px", margin: "0 auto", padding: theme.spacing(3, 2) } })); export default function Home() { const classes = useStyles(); return ( <div className={classes.root}> <Paper className={classes.paper}> <Typography variant="h5"> Fancy Fashion & Style Online </Typography> <br /> <Typography variant="body1"> Tired of mainstream fashion ideas, popular trends and societal norms? This line of lifestyle products will help you catch up with the Fancy trend and express your personal style. Start shopping Fancy items now! </Typography> </Paper> </div> ); }
Anda telah mengupdate komponen React, tetapi Anda perlu membangun aplikasi React untuk menghasilkan file statis. Jalankan perintah berikut untuk membangun aplikasi React dan salin ke direktori publik monolit:
cd ~/monolith-to-microservices/react-app npm run build:monolith
Setelah kode diperbarui, Anda perlu membangun ulang container Docker dan memublikasikannya ke Container Registry. Anda dapat menggunakan perintah yang sama seperti sebelumnya, tetapi kali ini Anda akan memperbarui label versi.
Jalankan perintah berikut untuk memicu Cloud Build baru dengan versi image yang diupdate menjadi 2.0.0:
cd ~/monolith-to-microservices/monolith #Feel free to test your application npm start gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 .
Di bagian berikutnya, Anda akan menggunakan image tersebut untuk mengupdate aplikasi tanpa waktu henti.
Perubahan telah selesai dan tim pemasaran puas dengan pembaruan Anda. Saatnya memperbarui situs tanpa mengganggu pengguna.
Cloud Run memperlakukan setiap deployment sebagai revisi baru, yang akan diaktifkan lalu traffic dialihkan ke revisi tersebut.
Ikuti rangkaian petunjuk berikutnya untuk memperbarui situs Anda.
Command line
Dari command line, Anda dapat men-deploy ulang layanan untuk memperbarui image ke versi baru dengan perintah berikut:
gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 --platform managed
Memverifikasi deployment
Validasi update deployment Anda dengan menjalankan perintah berikut:
gcloud run services describe monolith --platform managed
Outputnya akan terlihat seperti ini:
apiVersion: serving.knative.dev/v1alpha1 kind: Service metadata: annotations: client.knative.dev/user-image: gcr.io/my-cloudrun-codelab/monolith:2.0.0 ...
Anda akan melihat bahwa layanan Anda kini menggunakan versi terbaru image yang di-deploy dalam revisi baru.
Untuk memverifikasi perubahan, buka URL eksternal layanan Cloud Run Anda lagi dan perhatikan bahwa judul aplikasi Anda telah diperbarui.
Jalankan perintah berikut untuk mencantumkan layanan dan melihat alamat IP jika Anda lupa:
gcloud run services list
Situs Anda kini akan menampilkan teks yang Anda tambahkan ke komponen halaman beranda.
Menghapus image Container Registry
# Delete the container image for version 1.0.0 of our monolith gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --quiet # Delete the container image for version 2.0.0 of our monolith gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 --quiet
Menghapus artefak Cloud Build dari Cloud Storage
# The following command will take all source archives from all builds and delete them from cloud storage # Run this command to print all sources: # gcloud builds list | awk 'NR > 1 {print $4}' gcloud builds list | awk 'NR > 1 {print $4}' | while read line; do gsutil rm $line; done
Menghapus layanan Cloud Run
gcloud run services delete monolith --platform managed
Anda telah men-deploy, menskalakan, dan mengupdate situs dengan Cloud Run.