Cloud Storage から直接イベントを受信する(gcloud CLI)
このクイックスタートでは、Eventarc を使用して、未承認の Cloud Run サービスで Cloud Audit Logs を使用せずに)Cloud Storage から直接イベントを受信する方法について説明します。
Cloud Storage バケット内のさまざまなイベント(オブジェクトの作成、削除、アーカイブ、メタデータの更新)に応じて通知のトリガーを構成できます。詳細については、Cloud Storage イベントを Cloud Run に転送するトリガーを作成するをご覧ください。
このクイックスタートでは、以下の操作を行います。
イベントソースとなる Cloud Storage バケットを作成する。
イベント レシーバ サービスを Cloud Run にデプロイする。
Eventarc トリガーを作成する。
Cloud Storage バケットにファイルをアップロードしてイベントを生成し、Cloud Run のログで確認する。
始める前に
組織で定義されているセキュリティの制約により、次の手順を完了できない場合があります。トラブルシューティング情報については、制約のある 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.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
Cloud Run、Cloud Storage、Eventarc、Pub/Sub API を有効にします。
gcloud services enable \ eventarc.googleapis.com \ pubsub.googleapis.com \ run.googleapis.com \ storage.googleapis.com
gcloud
コンポーネントを更新します。gcloud components update
- アカウントを使用してログインします。
gcloud auth login
- このクイックスタートで使用する構成変数を設定します。
gcloud config set run/region us-central1 gcloud config set run/platform managed gcloud config set eventarc/location us-central1
-
プロジェクト作成者には、基本オーナーロール(
roles/owner
)が付与されます。デフォルトでは、この Identity and Access Management(IAM)ロールには、ほとんどの Google Cloud リソースへの完全アクセス権に必要な権限が含まれており、この手順は省略できます。プロジェクト作成者でない場合は、プロジェクトで適切なプリンシパルに必要な権限を付与する必要があります。プリンシパルは Google アカウント(エンドユーザーの場合)やサービス アカウント(アプリケーションとコンピューティング ワークロードの場合)になることもあります。詳細については、イベントの宛先のロールと権限のページをご覧ください。
必要な権限
このチュートリアルを完了するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
Cloud Run 管理者(
roles/run.admin
) -
Eventarc 管理者(
roles/eventarc.admin
) -
ログ表示アクセス者(
roles/logging.viewAccessor
) -
プロジェクト IAM 管理者(
roles/resourcemanager.projectIamAdmin
) - サービス アカウント管理者(
roles/iam.serviceAccountAdmin
) -
サービス アカウント ユーザー(
roles/iam.serviceAccountUser
) - Service Usage 管理者 (
roles/serviceusage.serviceUsageAdmin
) -
ストレージ管理者(
roles/storage.admin
)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。
-
Cloud Run 管理者(
Compute Engine のデフォルトのサービス アカウントをメモしておいてください。テスト目的で、Eventarc トリガーに関連付けて、トリガーの ID を示すためです。このサービス アカウントは、Compute Engine を使用する Google Cloud サービスを有効にするか、使用すると自動的に作成されます。メールアドレスの形式は次のとおりです。
PROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_NUMBER
は、実際の Google Cloud プロジェクトの番号に置き換えます。プロジェクト番号は、Google Cloud コンソールの [ようこそ] ページで確認できます。また、次のコマンドで確認することもできます。gcloud projects describe PROJECT_ID --format='value(projectNumber)'
本番環境では、新しいサービス アカウントを作成して、必要最小限の権限を含む、最小権限の原則に従った 1 つ以上の IAM ロールを付与することを強くおすすめします。
- プロジェクトの Eventarc イベント レシーバーのロール(
roles/eventarc.eventReceiver
)を Compute Engine のデフォルト サービス アカウントに付与して、Eventarc トリガーがイベント プロバイダからイベントを受信できるようにします。gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/eventarc.eventReceiver
- Cloud Storage からの直接イベントのトリガーを作成する前に、Cloud Storage サービス エージェントに Pub/Sub パブリッシャーのロール(
roles/pubsub.publisher
)を付与します。SERVICE_ACCOUNT="$(gcloud storage service-agent --project=PROJECT_ID)" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:${SERVICE_ACCOUNT}" \ --role='roles/pubsub.publisher'
- 2021 年 4 月 8 日以前に、認証済みの Pub/Sub push リクエストをサポートするために 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 バケットを作成する
イベントソースとして使用する Cloud Storage バケットを作成します。gsutil mb -l us-central1 gs://PROJECT_ID-bucket/
イベントソースの作成後、Cloud Run にイベント レシーバ サービスをデプロイできます。
イベント レシーバー サービスを Cloud Run にデプロイする
ビルド済みのイメージ us-docker.pkg.dev/cloudrun/container/hello
を使用し、イベントを受信してログに記録する Cloud Run サービスをデプロイします。
gcloud run deploy helloworld-events \
--image=us-docker.pkg.dev/cloudrun/container/hello \
--allow-unauthenticated
デプロイに成功すると、コマンドラインにサービスの URL が表示されます。
helloworld-events
というイベント レシーバ サービスが Cloud Run にデプロイされました。これでトリガーを設定できます。
Eventarc トリガーを作成する
Eventarc トリガーは、Cloud Storage バケットから helloworld-events
Cloud Run サービスにイベントを送信します。
Cloud Storage イベントをフィルタし、Compute Engine のデフォルト サービス アカウントを使用するトリガーを作成します。
gcloud eventarc triggers create storage-events-trigger \ --destination-run-service=helloworld-events \ --destination-run-region=us-central1 \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=PROJECT_ID-bucket" \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
これにより、
storage-events-trigger
というトリガーが作成されます。Google Cloud プロジェクトで初めて Eventarc トリガーを作成する場合、Eventarc サービス エージェントのプロビジョニングに遅延が発生することがあります。この問題は通常、トリガーを再度作成することで解決できます。詳細については、権限拒否エラーをご覧ください。
storage-events-trigger
が正常に作成されたことを確認するには、次のコマンドを実行します。gcloud eventarc triggers list --location=us-central1
出力は次のようになります。
NAME TYPE DESTINATION_RUN_SERVICE DESTINATION_RUN_PATH ACTIVE storage-events-trigger google.cloud.storage.object.v1.finalized helloworld-events Yes
イベントを生成して表示する
イベントを生成するには、Cloud Storage にテキスト ファイルをアップロードします。
echo "Hello World" > random.txt gsutil cp random.txt gs://PROJECT_ID-bucket/random.txt
アップロードによりイベントが生成され、Cloud Run サービスはイベントのメッセージをロギングします。
ログエントリを表示するには、ログエントリをフィルタし、JSON 形式で出力を返します。
gcloud logging read 'jsonPayload.message: "Received event of type google.cloud.storage.object.v1.finalized."'
次のようなログエントリを探します。
jsonPayload: event: ... eventType: google.cloud.storage.object.v1.finalized message: | Received event of type google.cloud.storage.object.v1.finalized. Event data: { "kind": "storage#object", "id": "PROJECT_ID-bucket/random.txt/1713970683868432", "selfLink": "https://www.googleapis.com/storage/v1/b/PROJECT_ID-bucket/o/random.txt", "name": "random.txt", "bucket": "PROJECT_ID-bucket", ... }
これで完了です。これで、イベント レシーバ サービスを Cloud Run にデプロイし、Eventarc トリガーを作成して、Cloud Storage からイベントを生成し、それを Cloud Run ログで確認できました。
クリーンアップ
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。
次のことが可能です。
また、Google Cloud プロジェクトを削除して、料金が発生しないようにすることもできます。Google Cloud プロジェクトを削除すると、そのプロジェクト内で使用されているすべてのリソースに対する課金が停止します。
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
複数のチュートリアルとクイックスタートを実施する予定がある場合は、プロジェクトを再利用すると、プロジェクトの割り当て上限を超えないようにできます。