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 adalah platform serverless; aplikasi ini tidak memerlukan pengelolaan infrastruktur, sehingga Anda dapat fokus pada hal yang paling penting—membuat aplikasi yang hebat. Produk ini dibangun dari Knative, yang memungkinkan Anda 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 ke 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 secara jarak jauh dari laptop Anda, gunakan Cloud Shell, yakni 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.

Mengaktifkan Cloud Run API

Dari Cloud Shell, aktifkan Cloud Run API.

gcloud services enable run.googleapis.com

Hasilnya 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 express yang merespons permintaan HTTP.

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

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.

Berikutnya, 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 akan menghasilkan server web dasar yang memantau port yang ditentukan oleh variabel lingkungan PORT. Aplikasi Anda sekarang 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 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 dikirim ke registry, Anda akan melihat pesan SUCCESS yang berisi nama image (gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld). Image disimpan di Container Registry dan dapat digunakan kembali jika diinginkan.

Anda dapat menampilkan daftar 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.pngS lalu pilih Preview on port 8080.

3618ca3a4a135570.pngS

Tindakan ini akan membuka jendela browser yang bertuliskan Hello World!

a0307f34cacf9e6a.png

Anda juga dapat menggunakan curl localhost:8080.

5. Men-deploy ke Cloud Run

Deploy aplikasi Anda yang ada di dalam container ke Cloud Run menggunakan perintah berikut (pastikan untuk menyesuaikannya dengan nama image yang benar untuk aplikasi yang Anda bangun 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 deploy --allow-unauthenticated memungkinkan Anda menjangkau aplikasi tanpa autentikasi. Opsi deploy --platform managed \ berarti Anda meminta lingkungan yang terkelola 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.pngS

Cloud Run meningkatkan skala image container secara otomatis dan horizontal 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

Meski Cloud Run tidak mengenakan biaya selama layanannya tidak digunakan, Anda mungkin 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 dengan 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 telah men-deploy aplikasi yang dikemas dalam image container ke Cloud Run.

Pelajari lebih lanjut

Langkah selanjutnya yang tepat adalah melihat Quickstart: Deploy to Cloud Run for Anthos on Google Cloud.

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

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