使用經過驗證的 Cloud Run 服務接收 Pub/Sub 事件

本教學課程說明如何使用經過驗證的 Cloud Run 服務部署容器化應用程式,並透過 Pub/Sub 接收事件。Pub/Sub 是一項全代管的即時訊息傳遞服務,可讓您在不同應用程式之間收發訊息。

建立 Artifact Registry 標準存放區

建立 Artifact Registry 標準存放區,用於儲存容器映像檔:

gcloud artifacts repositories create REPOSITORY \
    --repository-format=docker \
    --location=$REGION

REPOSITORY 替換成存放區的專屬名稱。

將事件接收器部署至 Cloud Run

部署 Cloud Run 服務,記錄事件內容。

  1. 複製 GitHub 存放區:

    Node.js

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git

    您也可以 下載 zip 格式的範例,然後解壓縮該檔案。

    Python

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git

    您也可以 下載 zip 格式的範例,然後解壓縮該檔案。

    Go

    git clone https://github.com/GoogleCloudPlatform/golang-samples.git

    您也可以 下載 zip 格式的範例,然後解壓縮該檔案。

    Java

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git

    您也可以 下載 zip 格式的範例,然後解壓縮該檔案。

    Ruby

    git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git

    您也可以 下載 zip 格式的範例,然後解壓縮該檔案。

    C#

    git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git

    您也可以 下載 zip 格式的範例,然後解壓縮該檔案。

  2. 變更為包含 Cloud Run 範例程式碼的目錄:

    Node.js

    cd nodejs-docs-samples/eventarc/pubsub/

    Python

    cd python-docs-samples/eventarc/pubsub/

    Go

    cd golang-samples/eventarc/pubsub/

    Java

    cd java-docs-samples/eventarc/pubsub/

    Ruby

    cd ruby-docs-samples/eventarc/pubsub/

    C#

    cd dotnet-docs-samples/eventarc/pubsub/
  3. 建構容器並上傳至 Cloud Build:

    gcloud builds submit --tag $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/trigger-pubsub:v1
  4. 將容器映像檔部署至 Cloud Run:

    gcloud run deploy ${SERVICE_NAME} \
        --image $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/trigger-pubsub:v1
  5. 在「Allow unauthenticated invocations to trigger-pubsub (y/N)?」(允許未經驗證的叫用來觸發 trigger-pubsub (y/N)?) 提示中,輸入 n 代表「否」。

看到 Cloud Run 服務網址時,表示部署作業已完成。

建立 Eventarc 觸發條件

訊息發布至 Pub/Sub 主題時,事件會觸發 Cloud Run 服務。

  1. 建立觸發條件,監聽 Pub/Sub 訊息:

    新增 Pub/Sub 主題

      gcloud eventarc triggers create ${SERVICE_NAME} \
          --destination-run-service=${SERVICE_NAME} \
          --destination-run-region=${REGION} \
          --location=${REGION} \
          --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
          --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

    這會建立新的 Pub/Sub 主題,以及名為 trigger-pubsub 的觸發條件。

    現有 Pub/Sub 主題

      gcloud eventarc triggers create ${SERVICE_NAME} \
          --destination-run-service=${SERVICE_NAME} \
          --destination-run-region=${REGION} \
          --location=${REGION} \
          --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
          --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID \
          --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

    更改下列內容:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • TOPIC_ID:現有 Pub/Sub 主題的 ID

    這項操作會為現有的 Pub/Sub 主題建立名為 trigger-pubsub 的觸發條件。

    請注意,在 Google Cloud 專案中首次建立 Eventarc 觸發條件時,Eventarc 服務代理程式的佈建作業可能會延遲。這個問題通常可以透過重新建立觸發條件來解決。詳情請參閱「權限遭拒錯誤」。

  2. 確認觸發條件是否已成功建立。請注意,雖然觸發條件會立即建立,但最多可能需要兩分鐘才能正常運作。

    gcloud eventarc triggers list --location=${REGION}

    傳回的觸發條件狀態應為 ACTIVE: Yes

產生及查看活動

將訊息發布至 Pub/Sub 主題,產生事件並觸發 Cloud Run 服務。Cloud Run 服務會在服務記錄中記錄訊息。

  1. 找出並將 Pub/Sub 主題設為環境變數:

    export TOPIC_ID=$(gcloud eventarc triggers describe ${SERVICE_NAME} \
        --format='value(transport.pubsub.topic)')
  2. 將訊息傳送到 Pub/Sub 主題,產生事件:

    gcloud pubsub topics publish $TOPIC_ID --message "Hello there"

    事件會傳送至 Cloud Run 服務,該服務會記錄事件訊息。

  3. 查看服務建立的事件相關記錄項目:

    gcloud logging read 'textPayload: "Hello there!"'

    記錄項目內容大致如下:

    textPayload: 'Hello, Hello there!'

記錄需要一些時間才會出現。如果沒有立即看到記錄,請稍候片刻再查看一次。