Cloud Run ジョブにイベントを公開する
このクイックスタートでは、 Google Cloudプロジェクトで Eventarc Advanced バスと登録を作成して、イベント メッセージをパブリッシュして受信する方法について説明します。
バスは、イベントソースからメッセージを受信したり、プロバイダによって公開されたメッセージを受信したりする中央ルーターとして機能します。
登録により、バスで受信したメッセージが処理パイプラインを介して 1 つ以上の宛先に転送されます。
このクイックスタートでは、以下の操作を行います。
ソースコードから Cloud Run ジョブをデプロイします。
Eventarc Advanced バスを作成します。
Eventarc Advanced 登録を作成します。
イベント メッセージをバスにパブリッシュします。
Cloud Run ジョブが正常に実行されたことを確認します。
このクイックスタートでは gcloud CLI を使用します。
始める前に
組織で定義されているセキュリティの制約により、次の手順を完了できない場合があります。トラブルシューティング情報については、制約のある Google Cloud 環境でアプリケーションを開発するをご覧ください。
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Install the Google Cloud CLI.
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します。
gcloud init -
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Run and Eventarc APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com eventarc.googleapis.com eventarcpublishing.googleapis.com run.googleapis.com -
Install the Google Cloud CLI.
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します。
gcloud init -
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Run and Eventarc APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com eventarc.googleapis.com eventarcpublishing.googleapis.com run.googleapis.com gcloudコンポーネントを更新します。gcloud components update
- アカウントを使用してログインします。
gcloud auth login
- このクイックスタートで使用する構成変数を設定します。
REGION=REGION
REGIONは、バスでサポートされているロケーション(us-central1など)に置き換えます。 -
プロジェクト作成者には、基本オーナーロール(
roles/owner)が付与されます。デフォルトでは、この Identity and Access Management(IAM)ロールには、ほとんどの Google Cloudリソースへのフルアクセスに必要な権限が含まれており、この手順は省略できます。プロジェクト作成者でない場合は、プロジェクトで適切なプリンシパルに必要な権限を付与する必要があります。プリンシパルは Google アカウント(エンドユーザーの場合)やサービス アカウント(アプリケーションとコンピューティング ワークロードの場合)になることもあります。
必要な権限
このクイックスタートを完了するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
Cloud Run デベロッパー(
roles/run.developer) -
Eventarc デベロッパー (
roles/eventarc.developer) -
Eventarc メッセージバス管理者 (
roles/eventarc.messageBusAdmin) -
ログ表示アクセス者(
roles/logging.viewAccessor) -
プロジェクト IAM 管理者(
roles/resourcemanager.projectIamAdmin) -
サービス アカウント管理者(
roles/iam.serviceAccountAdmin) -
サービス アカウント ユーザー(
roles/iam.serviceAccountUser) -
Service Usage 管理者(
roles/serviceusage.serviceUsageAdmin)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
-
Cloud Run デベロッパー(
- Eventarc Advanced に Cloud Run ジョブを実行するために必要な権限を付与するには、Google Cloud プロジェクトの Cloud Run 起動元(
roles/run.invoker)IAM ロールをサービス アカウントに付与するよう管理者に依頼してください。- サービス アカウントを作成します。テスト目的で、このサービス アカウントを Eventarc Advanced パイプラインに関連付けて、パイプラインの ID を示します。
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
SERVICE_ACCOUNT_NAMEをサービス アカウントの名前に置き換えます。 - サービス アカウントに
roles/run.invokerIAM ロールを付与します。gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \ --role=roles/run.invoker
- サービス アカウントを作成します。テスト目的で、このサービス アカウントを Eventarc Advanced パイプラインに関連付けて、パイプラインの ID を示します。
jobsという名前のディレクトリを作成し、そのディレクトリに移動します。mkdir jobs cd jobsmain.pyファイルを作成し、次のサンプルコードをコピーします。import os TASK_INDEX = os.getenv("CLOUD_RUN_TASK_INDEX", 0) def main(): """ This job prints "Hello world" """ print(f"Starting task #{TASK_INDEX}...") print("Hello world") print(f"Completed task #{TASK_INDEX}.") # Start script if __name__ == "__main__": main()ファイル拡張子のない
Procfileという名前のテキスト ファイルを作成し、次のテキストをコピーします。web: python3 main.pyジョブをデプロイします。
gcloud run jobs deploy JOB_NAME \ --source . \ --tasks 1 \ --region=$REGION
JOB_NAMEは、Cloud Run ジョブの一意の名前(my-jobなど)に置き換えます。gcloud eventarc pipelines createコマンドを使用してパイプラインを作成します。gcloud eventarc pipelines create PIPELINE_NAME \ --destinations=http_endpoint_uri='https://REGION-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/PROJECT_NUMBER/jobs/JOB_NAME:run',http_endpoint_message_binding_template='{"body": ""}',oauth_token_authentication_service_account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --input-payload-format-json= \ --location=$REGION
次のように置き換えます。
PIPELINE_NAME: パイプラインの ID または完全修飾名(例:my-pipeline)。PROJECT_NUMBER: Google Cloud プロジェクトの番号。プロジェクト番号を取得するには、次のコマンドを実行します。
gcloud projects describe PROJECT_ID --format='value(projectNumber)'
次の点にご注意ください。
http_endpoint_message_binding_templateキーは、イベントを Cloud Run Admin API で想定される形式に変換します。メッセージ バインディングを定義するときに、ペイロードにアクセスするための入力形式を構成する必要があります。oauth_token_authentication_service_accountキーは、サービス アカウントのメールアドレスを指定します。このメールアドレスは、*.googleapis.comでホストされている Google API を呼び出す場合にのみ使用される OAuth トークンの生成に使用されます。
gcloud eventarc enrollments createコマンドを使用して登録を作成します。gcloud eventarc enrollments create ENROLLMENT_NAME \ --cel-match=MATCH_EXPRESSION \ --destination-pipeline=PIPELINE_NAME \ --message-bus=BUS_NAME \ --message-bus-project=PROJECT_ID \ --location=$REGION
次のように置き換えます。
ENROLLMENT_NAME: 登録の ID または完全修飾名(例:my-enrollment)。MATCH_EXPRESSION: この登録のCEL を使用した一致式。例:"message.type == 'hello-world-type'"
gcloud logging readコマンドを使用して、ログエントリをフィルタして出力を返します。gcloud logging read 'textPayload: "Hello world"'
次のようなログエントリを探します。
insertId: 693c8dd0000cb2976d7966b8 ... labels: job_name: JOB_NAME location: REGION project_id: PROJECT_ID type: cloud_run_job textPayload: Hello world timestamp: '2025-12-12T21:49:04.832151Z'gcloud run jobs describeコマンドを使用して、Cloud Run ジョブが正常に実行されたことを確認することもできます。gcloud run jobs describe JOB_NAME \ --region=$REGION出力は次のようになります。
✔ Job JOB_NAME in region us-central1 Executed 1 time ...
Eventarc Advanced リソースを削除します。
ソースコードから Cloud Run ジョブをデプロイする
Cloud Run ジョブをイベントの宛先としてデプロイします。リクエストをリッスンして対応する Cloud Run サービスとは異なり、Cloud Run ジョブはタスクを実行するだけで、完了すると終了します。ジョブはリクエストをリッスンすることも対応することもしません。
Pub/Sub トピック、Workflows、別の HTTP エンドポイントなどの他のイベントの宛先もサポートされています。詳細については、イベント プロバイダと宛先をご覧ください。
gcloud run jobs deploy コマンドを使用して、Python ソースコードからジョブを作成します。コードは自動的にコンテナ イメージにパッケージ化され、Artifact Registry にアップロードされてから、Cloud Run にデプロイされます。
Eventarc Advanced バスを作成する
バスは、メッセージ ソースからイベント メッセージを受信するか、プロバイダによって公開されたイベント メッセージを受信し、メッセージ ルーターとして機能します。
詳細については、メッセージを転送するバスを作成するをご覧ください。
gcloud eventarc message-buses create コマンドを使用して、プロジェクトに Eventarc Advanced バスを作成します。
gcloud eventarc message-buses create BUS_NAME \ --location=$REGION
BUS_NAME は、バスの ID または完全修飾名(my-bus など)に置き換えます。
Eventarc Advanced の登録を作成する
登録により、どのメッセージが宛先に転送されるかが決まります。また、イベント メッセージの宛先を構成するために使用されるパイプラインも指定します。この場合、移行先の宛先は Cloud Run ジョブです。
詳細については、イベントを受信する登録を作成するをご覧ください。
gcloud CLI を使用する場合は、まずパイプラインを作成してから登録を作成します。
イベント メッセージをバスにパブリッシュする
メッセージをバスに直接パブリッシュするには、gcloud eventarc message-buses publish コマンドを使用するか、Eventarc Publishing REST API にリクエストを送信します。詳細については、イベントを直接パブリッシュするをご覧ください。
メッセージは、イベントデータを一般的な方法で記述するための仕様である CloudEvents 形式である必要があります。data 要素は、イベントのペイロードです。このフィールドには、整形式の JSON を指定できます。CloudEvents コンテキスト属性の詳細については、イベント形式をご覧ください。
以下は、Eventarc Advanced バスにイベントを直接パブリッシュする例です。
例 1
gcloud CLI と --event-data フラグやその他のイベント属性フラグを使用して、イベントをバスにパブリッシュします。
gcloud eventarc message-buses publish BUS_NAME \
--event-data='{"key": "hello-world-data"}' \
--event-id=hello-world-id-1234 \
--event-source=hello-world-source \
--event-type=hello-world-type \
--event-attributes="datacontenttype=application/json" \
--location=$REGION
例 2
gcloud CLI と --json-message フラグを使用して、イベントを JSON メッセージとしてバスにパブリッシュします。
gcloud eventarc message-buses publish BUS_NAME \
--location=$REGION \
--json-message='{"id": "hello-world-id-1234", "type":
"hello-world-type", "source":
"hello-world-source", "specversion": "1.0", "data":
{"key": "hello-world-data"}}'
イベントを公開すると、「イベントが正常に公開されました」というメッセージが表示されます。
Cloud Run ジョブが正常に実行されたことを確認する
Eventarc Advanced バスにイベントを公開したら、Cloud Run ジョブのログを確認して、Cloud Run ジョブが正常に実行され、「Hello world」が出力されたことを確認します。ジョブが実行されて完了するまでに数分かかることがあります。
Eventarc Advanced バスと登録が正常に作成され、イベント メッセージがバスに公開され、イベント レシーバのログで期待される結果が確認されました。
クリーンアップ
このクイックスタートの終了後に課金が継続されないようにするには、作成したリソースを削除します。また、 Google Cloud プロジェクトを削除して、料金が発生しないようにすることもできます。 Google Cloud プロジェクトを削除すると、そのプロジェクト内で使用されているすべてのリソースに対する課金が停止します。
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID