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.
Trong phần này, bạn sẽ tìm hiểu cách triển khai một hàm dựa trên sự kiện trong python. Hàm này sử dụng Gemini để tóm tắt một tệp văn bản thuần tuý đã tải lên bộ chứa Cloud Storage.
Kiến thức bạn sẽ học được
- Cách triển khai hàm Cloud Run dựa trên sự kiện được kích hoạt bất cứ khi nào 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
- Cách sử dụng Gemini để tóm tắt tài liệu văn bản thuần tuý được tải lên Cloud Storage
2. Thiết lập biến môi trường và bật API
Cập nhật gcloud CLI
Lớp học lập trình này yêu cầu bạn đã cài đặt phiên bản gcloud CLI gần đây. 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 sẽ 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 \ eventarc.googleapis.com \ aiplatform.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 PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)') SERVICE_NAME=crf-vertexai-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 lưu trữ
Bạn có thể tạo một bộ chứa 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ụ.
SERVICE_ACCOUNT="crf-vertexai-codelab" 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
Bây giờ, hãy cấp cho tài khoản dịch vụ vai trò Người dùng nền tảng AI để tài khoản này có thể thực hiện lệnh gọi đến Gemini.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role="roles/aiplatform.user"
Đồng thời, hãy cấp cho tài khoản dịch vụ vai trò Người xem đối tượng lưu trữ để tài khoản này có thể truy cập vào tệp.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role="roles/storage.objectViewer"
Cloud Pub/Sub cần vai trò roles/iam.serviceAccountTokenCreator trên dự án của bạn để tạo mã thông báo nhận dạng.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Điều kiện kích hoạt của bạn cần có vai trò roles/pubsub.publisher được cấp cho tài khoản dịch vụ Google Cloud Storage để nhận sự kiện qua Cloud Storage.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:service-$PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com \ --role=roles/pubsub.publisher
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 một tệp requirements.txt
có nội dung sau:
functions-framework==3.* google-cloud-aiplatform==1.63.* google-cloud-storage==2.16.*
Tiếp theo, hãy tạo tệp main.py
có nội dung sau:
import functions_framework import vertexai from vertexai.generative_models import GenerativeModel from google.cloud import storage vertexai.init(project="<YOUR_PROJECT_ID>", location="us-central1") model = GenerativeModel( model_name="gemini-1.5-pro-001", system_instruction=[ "Summarize the following document in a single sentence. Do not respond with more than one sentence.", ], ) # Triggered by a change in a storage bucket @functions_framework.cloud_event def hello_gcs(cloud_event): data = cloud_event.data # download the file storage_client = storage.Client() blob = storage_client.bucket(data["bucket"]).get_blob(data["name"]) #print(blob) doc = blob.download_as_text() contents = [doc] response = model.generate_content(contents) print(response.text) print(f"Response from Model: {response.text}")
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 hello_gcs \ --region $REGION \ --no-allow-unauthenticated \ --service-account $SERVICE_ACCOUNT_ADDRESS
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 hàm của bạn được gọi công khai
Bạn có thể được hỏi "Việc triển khai từ nguồn yêu cầu kho lưu trữ Docker của Cấu phần phần mềm để lưu trữ các vùng chứa đã tạo. Hệ thống sẽ tạo một kho lưu trữ có tên [cloud-run-source-deploy] trong khu vực [<YOUR_REGION>]." Chấp nhận lựa chọn mặc định là có để tạo kho lưu trữ.
Bạn có thể xem dịch vụ mới crf-vertexai-codelab
bằng cách chạy lệnh sau:
gcloud beta run services describe $SERVICE_NAME --region $REGION
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=$SERVICE_NAME \ --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 ý rằng đối với cờ --event-filters
, không sử dụng tiền tố gs:// trong tên bộ chứa.
Nếu bạn thấy lỗi If you recently started to use Eventarc, it may take a few minutes before all necessary permissions are propagated to the Service Agent.
, vui lòng đợi vài phút rồi thử lại.
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
Sau khi triển khai hàm và tạo một điều kiện kích hoạt, chúng ta hiện đã có thể 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ụ:
gsutil cp <YOUR_PLAIN_TEXT_FILE> 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ẽ gọi Gemini để tóm tắt tệp văn bản thuần tuý. Nội dung tóm tắt sẽ được in vào nhật ký.
Bạn có thể xem nhật ký trong Cloud Console cho dịch vụ Cloud Run hoặc chạy lệnh sau:
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE_NAME AND textPayload: Response"
Ví dụ: việc tải tệp văn bản thuần tuý của hướng dẫn sử dụng các hàm Cloud Run lên đối với bản xem trước ở chế độ riêng tư sẽ dẫn đến những kết quả sau được in vào nhật ký:
Response from Model: Cloud Run functions offer a new way to deploy serverless workloads with familiar Google Cloud Functions paradigms while providing control over the underlying Cloud Run service.
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 bất cứ khi nào 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
- Cách sử dụng Gemini để tóm tắt tài liệu văn bản thuần tuý được tải lên Cloud Storage
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-vertexai-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 mà bạn đã tạo ở Bước 2 rồi chọn Xoá. Nếu xoá dự án, bạn sẽ cần thay đổi các 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
.