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

Cloud Run adalah platform compute terkelola yang memungkinkan Anda untuk menjalankan container stateless yang dapat dipanggil melalui permintaan HTTP. Cloud Run bersifat tanpa server; menghilangkan kebutuhan akan pengelolaan infrastruktur, sehingga Anda dapat fokus pada hal yang terpenting—mem-build aplikasi yang hebat. Library ini dibuat 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 mem-build image container dan men-deploy-nya ke Cloud Run.

Prasyarat

T/A

Penyiapan lingkungan mandiri

Jika belum memiliki Akun Google (Gmail atau Google Apps), Anda harus membuatnya. Login ke Google Cloud Platform console (console.cloud.google.com) dan buat project baru:

Screenshot dari 10-02-2016 12:45:26.png

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.

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

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 bagian "pembersihan" di akhir dokumen ini).

Pengguna baru Google Cloud Platform memenuhi syarat untuk mendapatkan uji coba gratis senilai$300.

Cloud Shell

Meskipun Google Cloud dapat dioperasikan dari jarak jauh dari laptop, 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 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.

Mengaktifkan Cloud Run API

Dari Cloud Shell, aktifkan Cloud Run API.

gcloud services enable run.googleapis.com

Perintah tersebut akan menghasilkan pesan yang berhasil seperti ini:

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

Anda akan mem-build aplikasi Node.js sederhana berbasis ekspres yang merespons permintaan HTTP.

Untuk membuat aplikasi, gunakan Cloud Shell untuk membuat direktori baru bernama helloworld-nodejs dan ubah direktori di 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"
  }
}

Yang paling penting, file di atas berisi perintah skrip awal 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 menghasilkan server web dasar yang memantau port yang ditentukan oleh variabel lingkungan PORT. Aplikasi Anda sekarang siap untuk di-build dalam container, diuji, dan diupload ke Container Registry.

Untuk mem-build aplikasi contoh dalam container, buat file baru bernama Dockerfile di direktori yang sama dengan file sumber dan 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, build 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 gambar (gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld). Gambar disimpan di Container Registry dan dapat digunakan kembali jika diinginkan.

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

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 dan pilih Preview on port 8080.

Tindakan tersebut akan membuka jendela browser yang bertuliskan Hello World!

Anda juga dapat menggunakan curl localhost:8080.

Men-deploy aplikasi dalam container ke Cloud Run dilakukan menggunakan perintah berikut (pastikan untuk menyesuaikannya dengan nama gambar yang benar untuk aplikasi yang Anda build atau gunakan gambar 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

Anda kini dapat mengunjungi container yang di-deploy dengan membuka URL layanan di browser web:

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

Meskipun Cloud Run tidak mengenakan biaya saat layanan sedang tidak digunakan, Anda mungkin masih ditagih untuk menyimpan image container yang di-build.

Anda dapat menghapus project Google Cloud agar tidak dikenai biaya lebih, yang akan menghentikan penagihan untuk semua resource yang digunakan untuk project tersebut, atau cukup hapus image helloworld menggunakan perintah berikut:

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

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

Pelajari lebih lanjut

Langkah yang bagus berikutnya adalah melihat Quickstart: Deploy to Cloud Run for Anthos di Google Cloud.

Untuk informasi selengkapnya tentang mem-build container HTTP stateless yang cocok untuk Cloud Run dari sumber kode dan menerapkannya ke Container Registry, lihat referensi berikut:

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