Triển khai và chạy một vùng chứa bằng Cloud Run trên Node.js

Cloud Run là một nền tảng điện toán được quản lý, cho phép bạn chạy các vùng chứa không có trạng thái và có thể gọi được qua các yêu cầu HTTP. Cloud Run không có máy chủ và không cần quản lý cơ sở hạ tầng, vì vậy bạn có thể tập trung vào những gì quan trọng nhất – xây dựng những ứng dụng tuyệt vời. API này được tạo từ Knative, cho phép bạn chọn chạy các vùng chứa bằng Cloud Run (được quản lý hoàn toàn) hoặc Cloud Run for Anthos. Mục tiêu của lớp học lập trình này là để bạn tạo hình ảnh vùng chứa và triển khai hình ảnh đó cho Cloud Run.

Điều kiện tiên quyết

Không áp dụng

Thiết lập môi trường theo tiến độ riêng

Nếu chưa có Tài khoản Google (Gmail hoặc Google Apps), thì bạn phải tạo một tài khoản. Đăng nhập vào bảng điều khiển của Google Cloud Platform (console.cloud.google.com) và tạo một dự án mới:

Ảnh chụp màn hình từ 2016-02-10 12:45:26.png

Hãy ghi nhớ mã dự án, một tên duy nhất trên tất cả các dự án Google Cloud (tên ở trên đã được sử dụng và sẽ không hoạt động cho bạn!). Lớp học này sẽ được gọi sau này trong lớp học lập trình này là PROJECT_ID.

Tiếp theo, bạn sẽ cần bật tính năng thanh toán trong Cloud Console để sử dụng tài nguyên của Google Cloud.

Nếu tham gia lớp học lập trình này, bạn sẽ không mất quá vài đô la, nhưng có thể sẽ hiệu quả hơn nếu bạn quyết định sử dụng nhiều tài nguyên hơn hoặc nếu bạn để các tài nguyên đó hoạt động (xem "cleanup" ở cuối tài liệu này).

Người dùng mới của Google Cloud Platform đủ điều kiện dùng thử 300 đô la dùng thử miễn phí.

Cloud Shell

Mặc dù Google Cloud có thể hoạt động từ xa máy tính xách tay của bạn, nhưng bạn sẽ sử dụng Cloud Shell, một môi trường dòng lệnh chạy trong Google Cloud.

Máy ảo dựa trên Debian này được tải bằng tất cả công cụ phát triển mà bạn cần. cung cấp một thư mục gốc 5GB cố định và chạy trên Google Cloud, qua đó nâng cao đáng kể hiệu suất và khả năng xác thực mạng. Điều này có nghĩa là tất cả những gì bạn cần cho lớp học lập trình này là trình duyệt (có, nó hoạt động trên Chromebook).

Để kích hoạt Google Cloud Shell, từ bảng điều khiển dành cho nhà phát triển, bạn chỉ cần nhấp vào nút ở phía trên cùng bên phải (chỉ mất vài phút để cấp phép và kết nối với môi trường):

ActivateCloudShell.png.

Nhấp vào nút "Start Cloud Shell":

Ảnh chụp màn hình lúc 10:13,43 chiều ngày 14/6/2017

Sau khi kết nối với shell Cloud, bạn sẽ thấy rằng bạn đã được xác thực và dự án này đã được đặt thành PROJECT_ID của bạn :

gcloud auth list

Đầu ra lệnh

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

Đầu ra lệnh

[core]
project = <PROJECT_ID>

Cloud Shell cũng đặt một số biến môi trường theo mặc định. Những biến này có thể hữu ích khi bạn chạy các lệnh trong tương lai.

echo $GOOGLE_CLOUD_PROJECT

Đầu ra lệnh

<PROJECT_ID>

Nếu vì lý do nào đó mà dự án chưa được đặt, bạn chỉ cần đưa ra lệnh sau :

gcloud config set project <PROJECT_ID>

Bạn đang tìm kiếm PROJECT_ID của mình? Kiểm tra mã nhận dạng mà bạn đã sử dụng trong các bước thiết lập hoặc tìm kiếm mã đó trong trang tổng quan bảng điều khiển:

Project_ID.png.

LƯU Ý QUAN TRỌNG: Cuối cùng, hãy đặt cấu hình dự án và vùng mặc định:

gcloud config set compute/zone us-central1-f

Bạn có thể chọn nhiều khu vực khác nhau. Tìm hiểu thêm trong Tài liệu về khu vực và amp; khu vực.

Bật API Cloud Run

Từ Cloud Shell, hãy bật API Cloud Run.

gcloud services enable run.googleapis.com

Thao tác này sẽ tạo ra một thông báo thành công tương tự như thông báo sau:

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

Bạn sẽ tạo một ứng dụng Node.js đơn giản, dựa trên tốc độ phản hồi yêu cầu HTTP.

Để tạo ứng dụng của bạn, hãy sử dụng Cloud Shell để tạo một thư mục mới có tên helloworld-nodejs và thay đổi thư mục vào đó.

mkdir helloworld-nodejs
cd helloworld-nodejs

Tạo tệp package.json có nội dung sau:

{
  "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"
  }
}

Điều quan trọng nhất là tệp ở trên chứa một lệnh tập lệnh bắt đầu và một phần phụ thuộc trên khung ứng dụng web Express.

Tiếp theo, trong cùng thư mục đó, hãy tạo một tệp index.js và sao chép nội dung sau vào tệp đó:

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);
});

Mã đó tạo một máy chủ web cơ bản lắng nghe cổng do biến môi trường PORT xác định. Ứng dụng của bạn hiện đã sẵn sàng để được chứa và thử nghiệm, và tải lên Đăng ký vùng chứa.

Để vùng chứa ứng dụng mẫu, hãy tạo một tệp mới có tên Dockerfile trong cùng thư mục với tệp nguồn và sao chép nội dung sau vào tệp đó:

# 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" ]

Bây giờ, hãy tạo hình ảnh vùng chứa của bạn bằng Cloud Build bằng cách chạy lệnh sau từ thư mục chứa Dockerfile:

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

$GOOGLE_CLOUD_PROJECT là một biến môi trường có chứa mã dự án Google Cloud khi chạy trong Cloud Shell. Bạn cũng có thể lấy bằng cách chạy gcloud config get-value project.

Sau khi được đẩy vào sổ đăng ký, bạn sẽ thấy thông báo SUCCESS chứa tên hình ảnh (gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld). Hình ảnh này được lưu trữ trong Hệ thống tên miền và có thể sử dụng lại nếu muốn.

Bạn có thể liệt kê tất cả hình ảnh vùng chứa được liên kết với dự án hiện tại của mình bằng cách sử dụng lệnh sau:

gcloud container images list

Nếu muốn chạy và thử nghiệm ứng dụng cục bộ từ Cloud Shell, bạn có thể khởi động ứng dụng bằng lệnh docker chuẩn sau:

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

Trong Cloud Shell, hãy nhấp vào Xem trước trên web rồi chọn Xem trước trên cổng 8080.

Thao tác này sẽ mở ra một cửa sổ trình duyệt có nội dung Xin chào!

Bạn cũng có thể chỉ cần sử dụng curl localhost:8080.

Việc triển khai ứng dụng đã lưu trữ vào Cloud Run được thực hiện bằng lệnh sau (hãy nhớ điều chỉnh ứng dụng thành tên hình ảnh chính xác cho ứng dụng mà bạn đã tạo hoặc sử dụng hình ảnh được tạo sẵn của gcr.io/cloudrun/hello):

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

Lựa chọn triển khai --allow-unauthenticated cho phép bạn truy cập ứng dụng mà không cần xác thực. Tùy chọn triển khai --platform managed \ có nghĩa là bạn đang yêu cầu môi trường được quản lý hoàn toàn (không phải cơ sở hạ tầng Kubernetes thông qua Anthos).

Vui lòng đợi vài phút cho đến khi quá trình triển khai hoàn tất. Khi hoàn tất, dòng lệnh hiển thị URL dịch vụ.

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

Giờ đây, bạn có thể truy cập vào vùng chứa đã triển khai bằng cách mở URL dịch vụ trong một trình duyệt web:

Cloud Run tự động mở rộng hình ảnh vùng chứa của bạn để xử lý các yêu cầu nhận được, sau đó giảm kích thước khi nhu cầu giảm. Bạn chỉ phải thanh toán cho CPU, bộ nhớ và mạng sử dụng trong quá trình xử lý yêu cầu.

Mặc dù Cloud Run không tính phí khi dịch vụ này không được sử dụng, nhưng bạn có thể vẫn bị tính phí lưu trữ hình ảnh vùng chứa đã tạo.

Bạn có thể xóa dự án Google Cloud của mình để tránh phát sinh phí. Điều này sẽ ngừng tính phí cho tất cả tài nguyên dùng cho dự án đó hoặc chỉ cần xóa hình ảnh Helloworld bằng lệnh này:

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

Để xóa dịch vụ Cloud Run, hãy sử dụng lệnh sau:

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

Xin chúc mừng! Bạn đã triển khai một ứng dụng được đóng gói trong hình ảnh vùng chứa vào Cloud Run.

Tìm hiểu thêm

Bước tiếp theo phù hợp là xem Quickstart: Triển khai cho Cloud Run cho Anthos trên Google Cloud.

Để biết thêm thông tin về cách tạo vùng chứa HTTP không có trạng thái phù hợp với Cloud Run từ nguồn mã và đẩy vùng chứa đó vào Sổ đăng ký vùng chứa, hãy xem các tài nguyên sau:

Để tìm hiểu thêm về Korigin, dự án nguồn mở cơ bản, hãy xem Kese.