Men-deploy situs dengan Cloud Run

1. Sebelum memulai

Menjalankan situs bisa jadi sulit dengan semua overhead pembuatan dan pengelolaan instance, cluster, Pod, layanan Virtual Machine (VM), dan banyak lagi. Hal ini tidak masalah untuk aplikasi multi-tingkat yang lebih besar, tetapi jika Anda hanya mencoba untuk men-deploy dan menampilkan situs Anda, hal ini memerlukan banyak overhead.

Dengan Cloud Run, yang merupakan implementasi Knative di Google Cloud, Anda dapat mengelola dan men-deploy situs tanpa overhead yang diperlukan untuk 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 as a service (PaaS) terkelola sepenuhnya yang disediakan oleh Cloud Run. Anda akan menguji skenario yang terakhir dalam codelab ini.

Diagram berikut mengilustrasikan alur deployment dan hosting Cloud Run. Anda memulai dengan image Docker yang dibuat melalui Cloud Build, yang Anda picu di Cloud Shell. Kemudian, deploy image tersebut ke Cloud Run dengan perintah di Cloud Shell.

db5f05c090d5ebcb.png

Prasyarat

Yang akan Anda pelajari

  • Cara membangun 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 container ini yang ada di Container Registry
  • Deployment Cloud Run untuk situs statis

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. Selanjutnya, login ke Konsol Google Cloud dan klik Project > Buat project.

53dad2cefdae71da.pngS

faab21976aabeb4c.png

Ingat project ID, yang diisi secara otomatis 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. Nama tersebut nantinya akan disebut sebagai PROJECT_ID.

Selanjutnya, Anda perlu mengaktifkan penagihan di Cloud Console untuk menggunakan resource Google Cloud dan mengaktifkan Cloud Run API.

Mengaktifkan Cloud Run API

Klik Menu navigasi LENGTHINDAYS > API & Layanan > Dasbor > Mengaktifkan API Dan Layanan. .

5dbb2e6e27a55fcf.png

Telusuri "Cloud Run API", lalu klik Cloud Run API > Aktifkan.

f1fd486174a744cf.png

Menjalankan operasi dalam codelab ini seharusnya tidak menghabiskan biaya lebih dari beberapa dolar, tetapi bisa lebih mahal jika Anda memutuskan untuk menggunakan lebih banyak resource atau jika Anda membiarkannya berjalan (lihat Membersihkan 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 secara jarak jauh dari laptop, Anda akan menggunakan Cloud Shell, yakni lingkungan command line yang berjalan di Google Cloud. Lingkungan ini sudah dikonfigurasi 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).

  1. Untuk mengaktifkan Cloud Shell dari Cloud Console, cukup klik Aktifkan Cloud ShellfEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVB7zSwz7p6ItNgx4tXqQjag7BfWPcZN5kP-X3Q (hanya perlu beberapa saat untuk melakukan penyediaan dan terhubung ke lingkungan).

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01A

Screen Shot 2017-06-14 at 10.13.43 PM.png

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:

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93Drxccyj2-5zz4AxL-G3hzxZ4PsM5HHQ

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>
  1. 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

Mengingat bahwa 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-nya 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 sehingga Anda 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, mengubah direktori, dan menginstal dependensi yang diperlukan untuk menjalankan aplikasi Anda secara lokal. Mungkin perlu waktu beberapa menit untuk menjalankan skrip.

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 acc630712255c604.png dan memilih Preview on port 8080.

5869738f0e9ec386.pngS

Tindakan itu akan membuka jendela baru tempat Anda dapat melihat Fancy Store beraksi!

9ed25c3f0cbe62fa.pngS

Anda dapat menutup jendela ini setelah melihat situs. Untuk menghentikan proses server web, tekan CONTROL+C (Command+C pada Macintosh) di jendela terminal.

4. Membuat container Docker dengan Cloud Build

Setelah file sumber siap digunakan, saatnya untuk melakukan Dockerisasi aplikasi Anda.

Biasanya, Anda harus menggunakan pendekatan dua langkah yang meliputi membangun container Docker dan mengirimkannya ke registry untuk menyimpan image yang akan diambil GKE. Namun, Anda dapat membuat hidup lebih mudah dengan menggunakan Cloud Build untuk membangun container Docker dan menempatkan image di Container Registry dengan satu perintah. Untuk melihat proses manual pembuatan Dockerfile dan menerapkannya, lihat Panduan Memulai untuk Container Registry.

Cloud Build mengompresi file dari direktori dan memindahkannya ke bucket Cloud Storage. Selanjutnya, 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 Anda telah mengaktifkan Cloud Build API. 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 perlu 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 menonton prosesnya secara real time, Anda dapat membuka Konsol Cloud, lalu mengklik Navigation menu dimaksud > Cloud Build > Histori. Di sana, Anda dapat melihat daftar semua build sebelumnya, tetapi seharusnya hanya ada build yang Anda buat.

4c753ede203255f6.pngS

Jika mengklik Build id, Anda dapat melihat semua detail untuk build tersebut, termasuk output log. Anda dapat melihat image container yang dibuat dengan mengklik link di samping Image.

6e88ed1643dfe629.pngS

5. Men-deploy container ke Cloud Run

Setelah Anda memasukkan situs ke dalam container dan menerapkannya ke Container Registry, sekarang saatnya men-deploy ke Cloud Run.

Ada dua pendekatan untuk men-deploy ke Cloud Run:

  • Cloud Run (terkelola sepenuhnya) adalah model PaaS yang mengelola seluruh siklus proses container. Anda akan menggunakan pendekatan tersebut untuk codelab ini.
  • Cloud Run for Anthos adalah Cloud Run dengan lapisan kontrol tambahan, yang memungkinkan Anda memindahkan cluster dan Pod dari GKE. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan Cloud Run for Anthos di Google Cloud.

Contoh command line akan tersedia 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 yang ingin Anda jalankan. Pilih region terdekat, lalu setujui nama layanan default yang disarankan (monolit).

d52d9419c5166674.png

Untuk tujuan pengujian, izinkan permintaan yang tidak diautentikasi ke aplikasi. Masukkan y saat diminta.

3a57b32f133dad61.pngS

Memverifikasi deployment

Untuk memastikan bahwa deployment berhasil dibuat, jalankan perintah berikut. Mungkin perlu waktu beberapa saat agar 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 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 lihat pratinjaunya secara lokal.

6. Buat 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 konkurensi 80, yang berarti setiap instance container akan melayani hingga 80 permintaan sekaligus. Hal tersebut merupakan perubahan besar dari model function as a service (FaaS), di mana satu instance menangani permintaan satu per satu.

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

Jawablah pertanyaan berikutnya seperti yang Anda lakukan pertama kali. Setelah perintah berhasil, periksa Cloud Console untuk melihat hasilnya.

Dari dasbor Cloud Run, klik service monolith untuk melihat detailnya.

7d1eed2e4728a4f2.pngS

Klik tab Revisi. Anda akan melihat dua revisi yang dibuat. Klik monolith-00002 dan tinjau detailnya. Anda akan melihat nilai serentak dikurangi menjadi 1.

217185c0eccc87dd.pngS]

4ad481b8bcd0343d.pngS

Meskipun konfigurasi tersebut cukup untuk pengujian, dalam sebagian besar skenario produksi, Anda akan memiliki container 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 apa pun dan menetapkannya ke nilai maksimum default (yang terjadi menjadi 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 tersebut telah dialihkan, dan konkurensi kembali ke 80.

7. Membuat perubahan pada situs

Tim pemasaran meminta Anda untuk mengubah halaman beranda situs perusahaan Anda. Mereka pikir itu harus lebih informatif tentang apa yang dijual dan dijual perusahaan. Di bagian ini, Anda akan menambahkan beberapa teks ke halaman beranda untuk membuat tim pemasaran senang!

Sepertinya salah satu developer Anda sudah membuat perubahan dengan nama file index.js.new. Cukup menyalin file tersebut ke index.js dan perubahan Anda akan terlihat. Ikuti petunjuk untuk melakukan perubahan yang sesuai.

Jalankan perintah berikut, salin file yang 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 &amp; 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 Anda diperbarui, Anda harus membangun ulang container Docker dan memublikasikannya ke Container Registry. Anda dapat menggunakan perintah yang sama seperti sebelumnya, tetapi kali ini Anda akan mengupdate 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 periode nonaktif.

8. Memperbarui situs tanpa periode nonaktif

Perubahan telah selesai dan tim pemasaran senang dengan pembaruan Anda. Saatnya memperbarui situs tanpa gangguan bagi pengguna.

Cloud Run memperlakukan setiap deployment sebagai revisi baru, yang akan dibawa secara online, lalu traffic dialihkan ke sana.

Ikuti kumpulan 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 lagi URL eksternal layanan Cloud Run Anda dan perhatikan bahwa judul aplikasi telah diperbarui.

Jalankan perintah berikut untuk menampilkan layanan dan melihat alamat IP jika Anda lupa:

gcloud run services list

{i>Website<i} Anda sekarang seharusnya menampilkan teks yang telah ditambahkan ke komponen halaman beranda.

451ca252acae6928.pngS

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 memperbarui situs dengan Cloud Run.

Pelajari lebih lanjut