1. 簡介
總覽
Cloud Run functions 是一種新的工作負載部署方式,可使用熟悉的 GCF 事件處理模式和函式簽章。Cloud Run functions 不會使用我們預先設定的建構程序和部署設定,而是讓您直接控管在 Cloud Run 上建立的基礎服務。
在本節中,您將瞭解如何部署以事件為準的 Python 函式,使用 Gemini 為上傳至 Cloud Storage bucket 的純文字檔建立摘要。
課程內容
- 如何部署事件驅動型 Cloud Run 函式,在物件上傳至 GCS bucket 時觸發
- 如何建立具備適當角色的服務帳戶,以便接收 Cloud Storage 的事件並叫用 Cloud Run 函式
- 如何使用 Gemini 歸納上傳至 Cloud Storage 的純文字文件內容
2. 設定環境變數並啟用 API
更新 gcloud CLI
您必須安裝最新版本的 gcloud CLI,才能完成本程式碼研究室。如要更新 CLI,請執行
gcloud components update
啟用 API
開始進行本程式碼研究室之前,請先啟用數個 API。本程式碼研究室需要使用下列 API。執行下列指令即可啟用這些 API:
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
storage.googleapis.com \
artifactregistry.googleapis.com \
eventarc.googleapis.com \
aiplatform.googleapis.com
設定環境變數
您可以設定本程式碼實驗室全程都會使用的環境變數。
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. 建立儲存空間值區和服務帳戶
建立儲存空間值區
您可以執行下列指令來建立 Cloud Storage bucket:
gsutil mb -l us-central1 gs://$BUCKET_NAME
建立服務帳戶
在本範例中,您將建立具備必要 EventArc 權限和 Cloud Run 叫用者角色的服務帳戶,以便接收 Cloud Storage 的事件並叫用 Cloud Run 函式。
首先,請建立服務帳戶。
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"
接著,將專案的 Eventarc 事件接收者角色 (roles/eventarc.eventReceiver) 授予與 Eventarc 觸發條件相關聯的服務帳戶,讓觸發條件可以接收事件提供者的事件。
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/eventarc.eventReceiver
接著,將 Cloud Run 叫用者角色授予服務帳戶,讓該帳戶可以叫用函式。
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/run.invoker
現在,請將 AI Platform 使用者角色授予服務帳戶,以便呼叫 Gemini。
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
--role="roles/aiplatform.user"
並授予服務帳戶「Storage 物件檢視者」角色,以便存取檔案。
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
--role="roles/storage.objectViewer"
Cloud Pub/Sub 需要專案的 roles/iam.serviceAccountTokenCreator 角色,才能建立身分識別權杖。
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
如要透過 Cloud Storage 接收事件,您的觸發條件必須將 roles/pubsub.publisher 角色授予 Google 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. 建立及部署函式
首先,請建立原始碼的目錄,然後 cd 到該目錄。
mkdir $SERVICE_NAME && cd $_
接著,請建立 requirements.txt 檔案,並加入以下內容:
functions-framework==3.* google-cloud-aiplatform==1.63.* google-cloud-storage==2.16.*
接著,請建立 main.py 檔案,並加入以下內容:
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}")
現在您可以執行下列指令,部署 Cloud Run 函式:
gcloud beta run deploy $SERVICE_NAME \
--source . \
--function hello_gcs \
--region $REGION \
--no-allow-unauthenticated \
--service-account $SERVICE_ACCOUNT_ADDRESS
請注意下列事項:
--source旗標用於告知 Cloud Run 將函式建構為可執行的容器型服務--function旗標 (新) 用於將新服務的進入點設為您想叫用的函式簽章- (選用)
--no-allow-unauthenticated,避免函式可公開叫用
系統可能會詢問「Deploying from source requires an Artifact Registry Docker repository to store built containers. 系統會在 [<YOUR_REGION>] 區域中建立名為 [cloud-run-source-deploy] 的存放區。接受預設的「yes」來建立存放區。
執行下列指令,即可查看新服務 crf-vertexai-codelab:
gcloud beta run services describe $SERVICE_NAME --region $REGION
5. 建立活動
我們可以建立 Eventarc 觸發條件,在 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
請注意,使用 --event-filters 旗標時,請勿在 bucket 名稱中使用 gs:// 前置字串。
如果看到錯誤訊息 If you recently started to use Eventarc, it may take a few minutes before all necessary permissions are propagated to the Service Agent.,請稍候幾分鐘再試一次。
如需透過 Eventarc 設定 Cloud Storage 觸發條件服務的詳細教學課程,請參閱 Cloud Run 說明文件:https://cloud.google.com/run/docs/tutorials/eventarc
6. 測試函式
部署函式並建立觸發條件後,我們現在可以叫用函式。
建立檔案並上傳至 Cloud Storage bucket。您可以使用 Cloud 控制台網頁介面或 gsutil CLI 工具完成這項操作,例如:
gsutil cp <YOUR_PLAIN_TEXT_FILE> gs://$BUCKET_NAME
檔案上傳成功後,系統會產生事件,函式也會呼叫 Gemini,為純文字檔建立摘要。摘要會列印到記錄檔。
您可以在 Cloud Run 服務的 Cloud Console 中查看記錄,也可以執行下列指令:
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE_NAME AND textPayload: Response"
舉例來說,上傳 Cloud Run functions 使用者指南的純文字檔 (私人搶先版),會在記錄中列印下列內容:
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. 恭喜!
恭喜您完成本程式碼研究室!
建議您參閱 Cloud Run functions 說明文件
涵蓋內容
- 如何部署事件驅動型 Cloud Run 函式,在物件上傳至 GCS bucket 時觸發
- 如何建立具備適當角色的服務帳戶,以便接收 Cloud Storage 的事件並叫用 Cloud Run 函式
- 如何使用 Gemini 歸納上傳至 Cloud Storage 的純文字文件內容
8. 清理
為避免產生意外費用 (例如,如果這個 Cloud Run 服務的叫用次數不慎超過免費層級的每月 Cloud Run 叫用次數配額),您可以刪除 Cloud Run 服務,或刪除在步驟 2 中建立的專案。
如要刪除 Cloud Run 服務,請前往 Cloud Run Cloud 控制台 (https://console.cloud.google.com/run/),然後刪除您在本程式碼實驗室中建立的 crf-vertexai-codelab 服務。
如要刪除整個專案,請前往 https://console.cloud.google.com/cloud-resource-manager,選取您在步驟 2 中建立的專案,然後選擇「刪除」。刪除專案後,您必須在 Cloud SDK 中變更專案。如要查看所有可用專案的清單,請執行 gcloud projects list。