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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with 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_ID
with your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the 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.enable
permission. Learn how to grant roles.gcloud services enable 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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with 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_ID
with your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the 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.enable
permission. Learn how to grant roles.gcloud services enable 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.invoker
IAM ロールを付与します。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 を表します。
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-data"'
次のようなログエントリを探します。
insertId: 670808e70002b5c6477709ae labels: instanceId: 007989f2a10a4a33c21024f2c8e06a9de65d9b4fdc2ee27697a50379b3fab2f975b9233dc357d50b06270829b9b479d5a1ee54a10fa2cb2d98c5f77a0895e2be0f9e6e4b20 logName: projects/PROJECT_ID/logs/run.googleapis.com%2Fstderr receiveTimestamp: '2025-10-06T21:15:22.988264020Z' resource: labels: ... type: cloud_run_revision textPayload: "[2025-10-06 21:15:22,676] INFO in server: Body: b'{\"key\": \"hello-world-data\"\ }'" timestamp: '2025-10-06T21:15:22.675530Z'
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 コマンドを使用して、サンプル コンテナからジョブをデプロイします。
gcloud run jobs deploy JOB_NAME --image us-docker.pkg.dev/cloudrun/container/job:latest \ --region=$REGION
JOB_NAME
は、Cloud Run ジョブの一意の名前(my-job
など)に置き換えます。
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 ジョブのログを確認して、イベントが想定どおりに受信されたことを確認します。
Eventarc Advanced バスと登録が正常に作成され、イベント メッセージがバスに公開され、イベント レシーバのログで期待される結果が確認されました。
クリーンアップ
このクイックスタートの終了後に課金が発生しないようにするには、作成したリソースを削除します。また、 Google Cloud プロジェクトを削除して、料金が発生しないようにすることもできます。 Google Cloud プロジェクトを削除すると、そのプロジェクト内で使用されているすべてのリソースに対する課金が停止します。
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID