Men-deploy situs dengan Cloud Run

Menjalankan situs dapat menjadi hal yang sulit dengan semua overhead pembuatan dan pengelolaan instance Mesin Virtual (VM), cluster, Pod, layanan, dan lainnya. Tidak masalah untuk aplikasi besar dan multi-tingkat, tetapi jika Anda hanya mencoba untuk membuat situs web Anda diterapkan dan terlihat, maka itu adalah overhead yang besar.

Dengan Cloud Run, implementasi Knative dari Google Cloud, Anda dapat mengelola dan men-deploy situs tanpa memerlukan overhead yang Anda butuhkan untuk deployment berbasis VM atau Kubernetes. Pendekatan yang lebih sederhana tidak hanya dari perspektif manajemen, tetapi juga memberi Anda kemampuan untuk menskalakan ke nol saat tidak ada permintaan yang datang ke situs Anda.

Cloud Run tidak hanya menghadirkan pengembangan tanpa server ke container, tetapi juga dapat dijalankan di cluster Google Kubernetes Engine (GKE) milik Anda sendiri atau pada platform terkelola sepenuhnya sebagai solusi layanan (PaaS) yang disediakan oleh Cloud Run. Anda akan menguji skenario terakhir dalam codelab ini.

Diagram berikut mengilustrasikan alur deployment dan hosting Cloud Run. Mulailah 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

Yang akan Anda pelajari

  • Cara membuat 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 berada di Container Registry
  • Deployment Cloud Run untuk situs statis Anda

Yang Anda butuhkan

  • Akun Google dengan akses admin untuk membuat project atau project dengan peran pemilik project

Penyiapan lingkungan mandiri

Jika belum memiliki Akun Google, Anda harus membuatnya. Kemudian, login ke Google Cloud Console dan klik Project > Buat project.

Ingat project ID yang otomatis diisi dengan nama project Anda. Project ID adalah nama unik di semua project Google Cloud, sehingga nama yang ada di screenshot sudah digunakan dan tidak akan berfungsi untuk Anda. Nama layanan ini 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 ☰> API & Services > Dasbor > Aktifkan API Dan Layanan. .

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

Menjalankan melalui 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 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 dari jarak jauh dari laptop Anda, Anda akan menggunakan Cloud Shell, lingkungan command line yang berjalan di Google Cloud. Lingkungan tersebut sudah 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 berjalan 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 waktu beberapa saat untuk penyediaan dan koneksi ke lingkungan):

aktivasiCloudShell.png

Klik tombol "Mulai Cloud Shell"

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>

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 berikan 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:

ID_project.png

PENTING: Terakhir, tetapkan zona default dan konfigurasi project:

gcloud config set compute/zone us-central1-f

Anda dapat memilih berbagai zona yang berbeda. Pelajari lebih lanjut di dokumentasi Region &amp. Zona.

Mengingat bahwa Anda men-deploy situs yang ada, Anda hanya perlu meng-clone sumber dari repositori Anda, sehingga Anda dapat berfokus pada pembuatan image Docker dan deployment ke Cloud Run.

Jalankan perintah berikut untuk membuat clone repositori ke instance Cloud Shell Anda dan ubah ke direktori yang sesuai. Anda juga akan menginstal dependensi Node.js sehingga dapat menguji aplikasi sebelum deployment.

cd ~
git clone https://github.com/googlecodelabs/monolith-to-microservices.git
cd ~/monolith-to-microservices
./setup.sh

Tindakan tersebut akan meng-clone repositori, mengubah direktori, dan menginstal dependensi yang diperlukan untuk menjalankan aplikasi Anda secara lokal. 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 Pratinjau Web dan memilih Pratinjau di port 8080.

Tindakan ini akan membuka jendela baru tempat Anda dapat melihat cara kerja Fancy Store.

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 digunakan, sekarang saatnya memindahkan Docker ke aplikasi Anda!

Biasanya, Anda harus melakukan pendekatan dua langkah yang mengharuskan pembuatan container Docker dan mendorongnya ke registry untuk menyimpan gambar untuk diambil dari GKE. Namun, Anda dapat membuat hidup lebih mudah 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 menerapkannya, lihat Quickstart 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 dalam direktori yang sama untuk menjalankan proses build Docker. Karena 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 memerlukan waktu beberapa menit, tetapi setelah selesai, akan ada output di terminal yang mirip dengan hal berikut:

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
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 proses secara real time, Anda dapat membuka Cloud Console, lalu mengklik Menu navigasi ☰ > Cloud Build > Histori. Di sana, Anda dapat melihat daftar semua build sebelumnya, tetapi hanya boleh ada yang Anda buat.

Jika mengklik Build id, Anda dapat melihat semua detail untuk build tersebut, termasuk output log. Anda dapat melihat gambar penampung yang dibuat dengan mengklik link di samping Gambar.

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

Ada dua pendekatan untuk di-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 menghadirkan 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 untuk men-deploy aplikasi Anda:

gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed 

Anda akan diminta untuk menentukan region mana yang ingin Anda jalankan. Pilih wilayah terdekat, 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 diperlukan 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, serta pengguna yang menerapkannya (alamat email) dan URL yang dapat digunakan untuk mengakses aplikasi. Sepertinya semuanya berhasil dibuat.

Buka URL yang disediakan dalam daftar layanan di browser web Anda dan Anda akan melihat situs yang sama yang dipratinjau secara lokal.

Sekarang deploy aplikasi 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. Itu merupakan keberangkatan besar dari fungsi sebagai model layanan (FaaS), yang 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 selanjutnya seperti yang Anda lakukan 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 dibuat. Klik monolith-00002 dan tinjau detailnya. Anda akan melihat nilai serentak berkurang menjadi 1.

]

Meskipun konfigurasi tersebut memadai untuk pengujian, di sebagian besar skenario produksi, Anda akan memiliki container yang mendukung beberapa permintaan serentak.

Sekarang, pulihkan konkurensi asli tanpa men-deploy ulang. Anda dapat menyetel nilai serentak ke default 80 atau 0, yang akan menghapus semua batasan serentak dan menetapkannya ke nilai maks default (yang kebetulan 80 pada saat penulisan ini).

Jalankan perintah berikut di Cloud Shell untuk mengupdate 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.

Tim pemasaran meminta Anda untuk mengubah halaman beranda situs perusahaan Anda. Menurut mereka, perusahaan harus lebih informatif tentang apa yang dijual dan dijual perusahaan tersebut. 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. Anda dapat menyalin file tersebut ke index.js dan perubahan Anda akan terlihat. Ikuti petunjuk untuk membuat perubahan yang sesuai.

Jalankan perintah berikut, salin file yang telah diupdate 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 &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, namun Anda perlu membuat aplikasi React untuk menghasilkan file statis. Jalankan perintah berikut untuk mem-build aplikasi React dan salin ke direktori publik monolith:

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, tetapi 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 selanjutnya, Anda akan menggunakan gambar tersebut untuk memperbarui aplikasi Anda tanpa periode nonaktif.

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

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

Ikuti rangkaian petunjuk berikutnya untuk memperbarui situs Anda.

Command line

Dari command line, Anda dapat men-deploy ulang layanan untuk memperbarui gambar ke versi baru dengan perintah berikut:

gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 --platform managed

Memverifikasi deployment

Validasikan update deployment 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 Anda, buka URL eksternal layanan Cloud Run lagi 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 sekarang 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.

Pelajari lebih lanjut