Men-deploy dan menjalankan container dengan Cloud Run di Node.js

1. Sebelum memulai

6a5cf23c8e20491f.png

Cloud Run adalah platform komputasi terkelola yang memungkinkan Anda untuk menjalankan container stateless yang dapat dipanggil melalui permintaan HTTP. Cloud Run bersifat serverless; platform ini tidak memerlukan pengelolaan infrastruktur, sehingga Anda dapat fokus pada hal terpenting, yakni membuat aplikasi yang andal. Layanan ini dibangun dari Knative, sehingga Anda dapat memilih untuk menjalankan container dengan Cloud Run (terkelola sepenuhnya) atau Cloud Run for Anthos. Tujuan codelab ini adalah agar Anda dapat membangun image container dan men-deploy-nya di Cloud Run.

Prasyarat

T/A

2. Penyiapan dan persyaratan

Penyiapan lingkungan mandiri

  1. Login ke Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. (Jika belum memiliki akun Gmail atau G Suite, Anda harus membuatnya.)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

Ingat project ID, nama unik di semua project Google Cloud (maaf, nama di atas telah digunakan dan tidak akan berfungsi untuk Anda!) Project ID tersebut selanjutnya akan dirujuk di codelab ini sebagai PROJECT_ID.

  1. Selanjutnya, Anda harus mengaktifkan penagihan di Cloud Console untuk menggunakan resource Google Cloud.

Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Pastikan untuk mengikuti petunjuk yang ada di bagian "Membersihkan" yang memberi tahu Anda cara menonaktifkan resource sehingga tidak menimbulkan penagihan di luar tutorial ini. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.

Cloud Shell

Meskipun Google Cloud dapat dioperasikan dari jarak jauh menggunakan laptop Anda, Anda akan menggunakan Cloud Shell, lingkungan command line yang berjalan di Google Cloud.

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.

Aktifkan Cloud Run API

Aktifkan Cloud Run API dari Cloud Shell.

gcloud services enable run.googleapis.com

Perintah di atas akan menampilkan pesan seperti berikut yang menandakan bahwa proses berhasil:

Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.

3. Menulis aplikasi contoh

Anda akan membangun aplikasi Node.js sederhana berbasis ekspres yang merespons permintaan HTTP.

Untuk membangun aplikasi, gunakan Cloud Shell untuk membuat direktori baru bernama helloworld-nodejs dan beralihlah ke direktori tersebut.

mkdir helloworld-nodejs
cd helloworld-nodejs

Buat file package.json dengan konten berikut:

{
  "name": "cloudrun-helloworld",
  "version": "1.0.0",
  "description": "Simple hello world sample in Node",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "author": "",
  "license": "Apache-2.0",
  "dependencies": {
    "express": "^4.17.1"
  }
}

Dan yang paling penting, file di atas berisi perintah mulai skrip dan dependensi pada framework aplikasi web Express.

Selanjutnya, di direktori yang sama, buat file index.js dan salin konten berikut ke dalamnya:

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  console.log('Hello world received a request.');

  const target = process.env.TARGET || 'World';
  res.send(`Hello ${target}!`);
});

const port = process.env.PORT || 8080;
app.listen(port, () => {
  console.log('Hello world listening on port', port);
});

Kode tersebut membuat server web dasar yang memantau port yang ditentukan oleh variabel lingkungan PORT. Aplikasi Anda kini siap dimasukkan ke dalam container, diuji, dan diupload ke Container Registry.

4. Memasukkan aplikasi ke dalam container dan menguploadnya ke Container Registry

Untuk memasukkan aplikasi contoh ke dalam container, buat file baru bernama Dockerfile di dalam direktori yang sama dengan file sumber, lalu salin konten berikut ke dalamnya:

# Use the official lightweight Node.js 12 image.
# https://hub.docker.com/_/node
FROM node:12-slim

# Create and change to the app directory.
WORKDIR /usr/src/app

# Copy application dependency manifests to the container image.
# A wildcard is used to ensure both package.json AND package-lock.json are copied.
# Copying this separately prevents re-running npm install on every code change.
COPY package*.json ./

# Install production dependencies.
RUN npm install --only=production

# Copy local code to the container image.
COPY . ./

# Run the web service on container startup.
CMD [ "npm", "start" ]

Sekarang, bangun image container Anda menggunakan Cloud Build dengan menjalankan perintah berikut dari direktori yang berisi Dockerfile:

gcloud builds submit --tag gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld

$GOOGLE_CLOUD_PROJECT adalah variabel lingkungan yang berisi project ID Google Cloud Anda saat berjalan di Cloud Shell. Anda juga bisa mendapatkannya dengan menjalankan gcloud config get-value project.

Setelah dikirimkan ke registry, Anda akan melihat pesan SUCCESS yang berisi nama image (gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld). Image tersebut disimpan di Container Registry dan dapat digunakan kembali jika diinginkan.

Anda dapat mencantumkan semua image container yang terkait dengan project saat ini menggunakan perintah berikut:

gcloud container images list

Jika ingin menjalankan dan menguji aplikasi secara lokal dari Cloud Shell, Anda dapat memulainya menggunakan perintah docker standar ini:

docker run -d -p 8080:8080 gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld

Di Cloud Shell, klik Web Preview 170b7a95be8c6296.png, lalu pilih Preview on port 8080.

3618ca3a4a135570.png

Tindakan tersebut akan membuka jendela browser yang menampilkan Hello World!

a0307f34cacf9e6a.png

Anda juga dapat menggunakan curl localhost:8080.

5. Men-deploy ke Cloud Run

Deploy aplikasi dalam container Anda ke Cloud Run menggunakan perintah berikut (pastikan untuk menyesuaikannya dengan nama image yang benar untuk aplikasi yang Anda buat atau gunakan image bawaan gcr.io/cloudrun/hello):

gcloud run deploy helloworld \
  --image gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld \
  --platform managed \
  --region us-central1 \
  --allow-unauthenticated

Opsi deployment --allow-unauthenticated memungkinkan Anda menjangkau aplikasi tanpa autentikasi. Opsi deployment --platform managed \ berarti Anda meminta lingkungan yang dikelola sepenuhnya (bukan infrastruktur Kubernetes melalui Anthos).

Tunggu sebentar sampai proses deployment selesai. Setelah selesai, command line akan menampilkan URL layanan.

Service [helloworld] revision [helloworld-00001] has been deployed
and is serving traffic at https://helloworld-wdl7fdwaaa-uc.a.run.app

Sekarang Anda dapat melihat container yang telah di-deploy dengan membuka URL layanan di browser web:

63260b4d3aee42b8.png

Cloud Run secara otomatis dan horizontal meningkatkan skala image container Anda untuk menangani permintaan yang diterima, lalu menurunkan skala saat permintaan berkurang. Anda hanya membayar untuk CPU, memori, dan jaringan yang terpakai selama penanganan permintaan.

6. Pembersihan

Meskipun Cloud Run tidak mengenakan biaya saat layanannya tidak digunakan, Anda mungkin akan tetap ditagih atas penyimpanan image container yang telah dibuat.

Anda dapat menghapus project Google Cloud untuk menghindari tagihan, yang akan menghentikan penagihan atas semua resource yang digunakan untuk project tersebut, atau cukup hapus image helloworld Anda menggunakan perintah ini:

gcloud container images delete gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld

Untuk menghapus layanan Cloud Run, gunakan perintah ini:

gcloud run services delete helloworld \
  --platform managed \
  --region us-central1

7. Selamat

Selamat! Anda men-deploy aplikasi yang dikemas dalam image container ke Cloud Run.

Pelajari lebih lanjut

Langkah selanjutnya yang baik adalah membaca Panduan memulai: Men-deploy ke Cloud Run for Anthos di Google Cloud.

Untuk mengetahui informasi selengkapnya tentang cara membangun container HTTP stateless yang cocok untuk Cloud Run dari kode sumber dan mengirimkannya ke Container Registry, lihat referensi berikut:

Untuk mempelajari lebih lanjut Knative, project open source yang mendasarinya, lihat Knative.