1. Giới thiệu
Tổng quan
Hàm Cloud Run là một cách mới để triển khai khối lượng công việc bằng cách sử dụng các mô hình sự kiện GCF và chữ ký hàm quen thuộc. Thay vì sử dụng quy trình xây dựng và cấu hình triển khai có sẵn, các hàm Cloud Run cho phép bạn kiểm soát trực tiếp Dịch vụ cơ bản được tạo trên Cloud Run.
Với các hàm Cloud Run, chúng tôi cung cấp trải nghiệm người dùng đơn giản của tính năng triển khai nguồn Cloud Run, giúp nhà phát triển có toàn quyền kiểm soát khối lượng công việc của họ bằng cách sử dụng cấu hình Cloud Run.
Trong phần này, bạn sẽ tìm hiểu cách triển khai một hàm do sự kiện điều khiển trong Node. Bạn sẽ triển khai một hàm được kích hoạt bất cứ khi nào một đối tượng được hoàn tất trong bộ chứa Google Cloud Storage.
Lớp học lập trình này sử dụng các mẫu nodejs trong các ví dụ bên dưới. Tuy nhiên, bạn có thể sử dụng các mẫu mã của Cloud Functions thế hệ 2 bằng ngôn ngữ mà bạn chọn:
Kiến thức bạn sẽ học được
- Cách triển khai một hàm Cloud Run do sự kiện điều khiển được kích hoạt mỗi khi một đối tượng được tải lên bộ chứa GCS
- Cách tạo tài khoản dịch vụ có vai trò thích hợp để nhận sự kiện từ Cloud Storage và gọi hàm Cloud Run
2. Thiết lập biến môi trường và bật API
Cập nhật CLI gcloud
Lớp học lập trình này yêu cầu bạn phải cài đặt phiên bản mới nhất của CLI gcloud. Bạn có thể cập nhật CLI bằng cách chạy
gcloud components update
Bật API
Trước khi có thể bắt đầu sử dụng lớp học lập trình này, bạn cần bật một số API. Lớp học lập trình này yêu cầu bạn sử dụng các API sau. Bạn có thể bật các API đó bằng cách chạy lệnh sau:
gcloud services enable run.googleapis.com \ cloudbuild.googleapis.com \ storage.googleapis.com \ artifactregistry.googleapis.com
Thiết lập biến môi trường
Bạn có thể thiết lập các biến môi trường sẽ được sử dụng trong suốt lớp học lập trình này.
PROJECT_ID=<YOUR_PROJECT_ID> REGION=<YOUR_REGION, e.g. us-central1> gcloud config set project $PROJECT_ID SERVICE_NAME=crf-event-codelab BUCKET_NAME=$PROJECT_ID-$SERVICE_NAME TRIGGER_NAME=$SERVICE_NAME-trigger
3. Tạo một vùng chứa bộ nhớ và một tài khoản dịch vụ
Tạo bộ chứa bộ nhớ
Bạn có thể tạo một bộ chứa trên Cloud Storage bằng cách chạy lệnh sau:
gsutil mb -l us-central1 gs://$BUCKET_NAME
Tạo một tài khoản dịch vụ
Trong ví dụ này, bạn sẽ tạo một tài khoản dịch vụ có các quyền EventArc bắt buộc và vai trò trình gọi Cloud Run để nhận một sự kiện từ Cloud Storage và gọi hàm Cloud Run.
Trước tiên, hãy tạo tài khoản dịch vụ.
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)') SERVICE_ACCOUNT="cloud-run-functions" SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run functions Eventarc service account"
Tiếp theo, hãy cấp vai trò Trình nhận sự kiện Eventarc (roles/eventarc.eventReceiver) trên dự án cho tài khoản dịch vụ được liên kết với trình kích hoạt Eventarc để trình kích hoạt có thể nhận sự kiện từ nhà cung cấp sự kiện.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/eventarc.eventReceiver
Sau đó, hãy cấp cho tài khoản dịch vụ vai trò trình gọi Cloud Run để tài khoản này có thể gọi hàm.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/run.invoker
4. Tạo và triển khai hàm
Trước tiên, hãy tạo một thư mục cho mã nguồn và cd vào thư mục đó.
mkdir ../$SERVICE_NAME && cd $_
Sau đó, hãy tạo tệp package.json
có nội dung sau:
{ "dependencies": { "@google-cloud/functions-framework": "^3.0.0" } }
Tiếp theo, hãy tạo tệp index.js
có nội dung sau:
const functions = require("@google-cloud/functions-framework"); // Register a CloudEvent callback with the Functions Framework that will // be triggered by Cloud Storage. functions.cloudEvent("helloGCS", (cloudEvent) => { console.log(`Event ID: ${cloudEvent.id}`); console.log(`Event Type: ${cloudEvent.type}`); const file = cloudEvent.data; console.log(`Bucket: ${file.bucket}`); console.log(`File: ${file.name}`); console.log(`Metageneration: ${file.metageneration}`); console.log(`Created: ${file.timeCreated}`); console.log(`Updated: ${file.updated}`); });
Bây giờ, bạn có thể triển khai hàm Cloud Run bằng cách chạy lệnh sau:
gcloud beta run deploy $SERVICE_NAME \ --source . \ --function helloGCS \ --region $REGION \ --no-allow-unauthenticated
Xin lưu ý những điều sau:
- cờ –source được dùng để yêu cầu Cloud Run tạo hàm thành một dịch vụ dựa trên vùng chứa có thể chạy
- cờ –function (mới) được dùng để đặt điểm truy cập của dịch vụ mới thành chữ ký hàm mà bạn muốn gọi
- (không bắt buộc) –no-allow-unauthenticated để ngăn không cho người khác gọi hàm của bạn
Bạn có thể xem dịch vụ mới crf-nodejs-event
bằng cách chạy lệnh sau:
gcloud beta run services describe $SERVICE_NAME
5. Tạo sự kiện
Chúng ta có thể tạo một điều kiện kích hoạt Eventarc để gửi thông báo đến hàm của mình mỗi khi một đối tượng được hoàn tất trong Google Cloud Storage:
BUCKET_REGION=$REGION gcloud eventarc triggers create $TRIGGER_NAME \ --location=$REGION \ --destination-run-service=crf-nodejs-event \ --destination-run-region=$BUCKET_REGION \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=$BUCKET_NAME" \ --service-account=$SERVICE_ACCOUNT_ADDRESS
Xin lưu ý những điều sau:
- gcs-function-trigger là tên của điều kiện kích hoạt
- crf-nodejs-event là tên của dịch vụ Cloud Run nơi chúng ta triển khai hàm
- đối với cờ –event-filters, đừng sử dụng tiền tố gs:// trong tên bộ chứa.
Bạn có thể xem hướng dẫn chi tiết về cách thiết lập dịch vụ Điều kiện kích hoạt từ Cloud Storage bằng Eventarc trong tài liệu về Cloud Run tại đây: https://cloud.google.com/run/docs/tutorials/eventarc
6. Kiểm thử hàm
Khi quá trình triển khai hoàn tất, bạn sẽ thấy URL dịch vụ. Để gọi hàm này, bạn cần gửi một yêu cầu đã xác thực bằng mã thông báo nhận dạng của bạn hoặc mã thông báo nhận dạng của một nguyên tắc có vai trò là Trình gọi Cloud Run, như minh hoạ dưới đây:
# get the Service URL SERVICE_URL="$(gcloud run services describe crf-nodejs-event --region us-central1 --format 'value(status.url)')" # invoke the service curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
Sau khi triển khai hàm và tạo điều kiện kích hoạt, chúng ta đã sẵn sàng gọi hàm.
Tạo một tệp rồi tải tệp đó lên bộ chứa Cloud Storage. Bạn có thể thực hiện việc này thông qua giao diện web của Cloud Console hoặc sử dụng công cụ dòng lệnh gsutil, ví dụ:
echo "hello world" > test.txt gsutil cp test gs://$BUCKET_NAME
Khi tệp được tải lên thành công, một sự kiện sẽ được tạo và hàm của bạn sẽ in một số thông tin cơ bản về đối tượng, chẳng hạn như tên tệp. Bạn có thể tìm thấy kết quả này trong các mục nhập nhật ký cho hàm trong Cloud Console. Ngoài ra, bạn có thể truy vấn kết quả này bằng cách sử dụng CLI gcloud:
gcloud logging read "resource.labels.service_name=crf-nodejs-event AND textPayload: File" --format=json
và bạn sẽ thấy kết quả sau
"textPayload": "File: test.txt"
7. Xin chúc mừng!
Chúc mừng bạn đã hoàn thành lớp học lập trình!
Bạn nên xem lại tài liệu về các hàm Cloud Run
Nội dung đã đề cập
- Cách triển khai một hàm Cloud Run do sự kiện điều khiển được kích hoạt mỗi khi một đối tượng được tải lên bộ chứa GCS
- Cách tạo tài khoản dịch vụ có vai trò thích hợp để nhận sự kiện từ Cloud Storage và gọi hàm Cloud Run
8. Dọn dẹp
Để tránh bị tính phí do nhầm lẫn (ví dụ: nếu dịch vụ Cloud Run này vô tình được gọi nhiều lần hơn mức phân bổ số lần gọi Cloud Run hằng tháng trong cấp miễn phí), bạn có thể xoá dịch vụ Cloud Run hoặc xoá dự án mà bạn đã tạo ở Bước 2.
Để xoá các dịch vụ Cloud Run, hãy truy cập vào Cloud Console của Cloud Run tại https://console.cloud.google.com/run/ rồi xoá dịch vụ crf-event-codelab
mà bạn đã tạo trong lớp học lập trình này.
Nếu chọn xoá toàn bộ dự án, bạn có thể truy cập vào https://console.cloud.google.com/cloud-resource-manager, chọn dự án bạn đã tạo ở Bước 2 rồi chọn Xoá. Nếu xoá dự án, bạn sẽ cần thay đổi dự án trong SDK trên đám mây. Bạn có thể xem danh sách tất cả dự án hiện có bằng cách chạy gcloud projects list
.