1. Sebelum memulai
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 menampilkan situs, overhead-nya akan sangat besar.
Dengan Cloud Run, yang menerapkan 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.
Dalam codelab ini, 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
- Pemahaman umum tentang Docker (Lihat bagian Memulai 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
2. Penyiapan lingkungan
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 bagian nama project Anda. Project ID adalah nama unik di semua project Google Cloud, sehingga nama dalam screenshot telah digunakan dan tidak akan berfungsi untuk Anda. Nama tersebut nantinya akan disebut sebagai PROJECT_ID
.
Selanjutnya, Anda harus mengaktifkan penagihan di Cloud Console 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 > Enable.
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 bagian 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 akan menggunakan Cloud Shell, lingkungan command line yang berjalan di Google Cloud. Lingkungan ini telah dikonfigurasi sebelumnya dengan semua library dan framework klien yang Anda perlukan.
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 Cloud Shell dari Cloud Console, cukup klik Aktifkan Cloud Shell
(hanya perlu beberapa saat untuk melakukan penyediaan dan terhubung ke lingkungan).
Setelah terhubung ke Cloud Shell, Anda akan melihat bahwa Anda sudah diautentikasi dan project sudah ditetapkan ke PROJECT_ID
.
gcloud auth list
Output perintah
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Output perintah
[core] project = <PROJECT_ID>
Jika, untuk beberapa alasan, project belum disetel, 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 Cloud Console:
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>
- Terakhir, tetapkan zona dan konfigurasi project default.
gcloud config set compute/zone us-central1-f
Anda dapat memilih berbagai zona yang berbeda. Untuk informasi selengkapnya, lihat Region & Zona.
3. Membuat clone repositori sumber
Karena Anda men-deploy situs yang sudah ada, Anda hanya perlu meng-clone sumber dari repositori, sehingga Anda dapat berfokus pada pembuatan image Docker dan deployment 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 secara lokal. Mungkin perlu waktu beberapa menit untuk menjalankan skrip.
Lakukan uji kelayakan dan uji aplikasi Anda. Jalankan perintah berikut untuk memulai server web:
cd ~/monolith-to-microservices/monolith npm start
Output:
Monolith listening on port 8080!
Anda dapat melihat pratinjau aplikasi dengan mengklik Pratinjau Web dan memilih Pratinjau di port 8080.
Tindakan ini akan membuka jendela baru tempat Anda dapat melihat Fancy Store Anda.
Anda dapat menutup jendela ini setelah melihat situs. Untuk menghentikan proses server web, tekan CONTROL+C
(Command+C
di Macintosh) di jendela terminal.
4. Membuat container Docker dengan Cloud Build
Setelah file sumber siap, sekarang saatnya men-Dockerize aplikasi Anda.
Biasanya, Anda harus melakukan pendekatan dua langkah yang mencakup pembuatan container Docker dan pengirimannya ke registry untuk menyimpan image yang akan diambil oleh GKE. Namun, Anda dapat mempermudah prosesnya dengan menggunakan Cloud Build untuk mem-build container Docker dan menempatkan image di Container Registry dengan satu perintah. Untuk melihat proses manual pembuatan Dockerfile dan pengirimannya, lihat Panduan memulai Container Registry.
Cloud Build mengompresi file dari direktori dan memindahkannya ke bucket Cloud Storage. Kemudian, proses build 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 memerlukan 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 melihat 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 seharusnya hanya ada 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.
5. Men-deploy container ke Cloud Run
Setelah Anda membuat container situs dan mendorongnya ke Container Registry, saatnya men-deploy ke Cloud Run.
Ada dua pendekatan untuk men-deploy ke Cloud Run:
- Cloud Run (fully managed) adalah model PaaS tempat seluruh siklus proses penampung 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 informasi selengkapnya, lihat Menyiapkan Cloud Run for Anthos di Google Cloud.
Contoh command line akan berada 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 wilayah tempat Anda ingin menjalankannya. Pilih region yang terdekat dengan Anda, lalu terima nama layanan yang disarankan secara default (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 hingga Pod status
menjadi 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 akan menampilkan beberapa hal. Anda dapat melihat deployment, 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 lihat pratinjaunya secara lokal.
6. Membuat revisi baru dengan konkurensi yang lebih rendah
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 menyalurkan hingga 80 permintaan sekaligus. Hal ini sangat berbeda dengan model function as a service (FaaS), yang menggunakan satu instance untuk 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 saat pertama kali. Setelah perintah berhasil, periksa Cloud Console 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 dikurangi 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 menetapkan nilai konkurensi ke default 80 atau 0, yang akan menghapus batasan konkurensi dan menetapkannya ke maksimum default (yang kebetulan adalah 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.
7. Membuat perubahan pada situs
Tim pemasaran meminta Anda untuk mengubah halaman beranda situs perusahaan. Menurut mereka, halaman ini harus lebih informatif terkait apa perusahaan Anda dan apa yang sebenarnya Anda jual. Di bagian ini, Anda akan menambahkan 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 kontennya 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 mem-build ulang container Docker dan memublikasikannya ke Container Registry. Anda dapat menggunakan perintah yang sama seperti sebelumnya, kecuali kali ini Anda akan memperbarui label versi.
Jalankan perintah berikut untuk memicu Cloud Build baru dengan versi image 2.0.0 yang telah diupdate:
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 downtime.
8. Mengupdate situs tanpa periode nonaktif
Perubahan telah selesai dan tim pemasaran senang dengan pembaruan Anda. Saatnya mengupdate situs tanpa mengganggu pengguna.
Cloud Run memperlakukan setiap deployment sebagai revisi baru, yang akan diaktifkan secara online, lalu traffic akan dialihkan ke revisi tersebut.
Ikuti rangkaian petunjuk berikutnya untuk memperbarui situs Anda.
Command line
Dari command line, Anda dapat men-deploy ulang layanan untuk mengupdate 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 sekarang menggunakan versi terbaru image yang di-deploy dalam revisi baru.
Untuk memverifikasi perubahan, buka kembali URL eksternal layanan Cloud Run Anda dan perhatikan bahwa judul aplikasi 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.
9. Pembersihan
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
10. Selamat
Anda telah men-deploy, menskalakan, dan mengupdate situs dengan Cloud Run.