Pub/Sub メッセージを使用してイベントを受信する(Terraform)
このクイックスタートでは、Terraform を使用して、Pub/Sub から直接イベントを受信し、Cloud Run サービスに転送する Eventarc トリガーを作成する方法について説明します。Terraform を使用して Eventarc トリガーを作成する方法については、 Terraform を使用してトリガーを作成するをご覧ください。
このクイックスタートでは、以下のことを行います。
Terraform をデプロイする準備をします。
次の処理を行う Terraform 構成を定義します。
- API を有効にします。
- サービス アカウントを作成します。
- イベント プロバイダとして Pub/Sub トピックを作成します。
- イベントの宛先として Cloud Run にサービスをデプロイします。
- Eventarc トリガーを作成します。
Terraform 構成を適用します。
これにより、Pub/Sub トピックにメッセージをパブリッシュしてイベントを生成できます。Eventarc トリガーは、 メッセージを Cloud Run にデプロイされたイベント レシーバ サービスに転送します。 サービスはイベント メッセージをログに記録します。これにより、 イベント ドリブン アーキテクチャ の簡単な例が提供されます。
始める前に
組織で定義されているセキュリティの制約により、次の手順を完了できない場合があります。トラブルシューティング情報については、 制約のある Google Cloud 環境でアプリケーションを開発するをご覧ください。
- アカウントにログインします Google Cloud を初めて使用する場合は、 Google Cloud アカウントを作成して、 実際のシナリオで Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します:
gcloud init -
プロジェクトを Google Cloud 作成または選択します。
プロジェクトを選択または作成するために必要なロール
- プロジェクトを選択する: プロジェクトの選択に特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトを選択できます。
-
プロジェクトを作成する: プロジェクトを作成するには、プロジェクト作成者ロール
(
roles/resourcemanager.projectCreator)が必要です。これにはresourcemanager.projects.create権限が含まれています。ロールを付与する方法を確認する。
-
プロジェクトを作成する Google Cloud :
gcloud projects create PROJECT_ID
PROJECT_IDは、作成する Google Cloud プロジェクトの名前に置き換えます。 -
作成した Google Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
PROJECT_IDは、 Google Cloud プロジェクトの名前に置き換えます。
Cloud Resource Manager API と Identity and Access Management(IAM)API を有効にします:
API を有効にするために必要なロール
API を有効にするには、 権限を含む Service Usage 管理者 IAM ロール(
roles/serviceusage.serviceUsageAdmin)が必要です。serviceusage.services.enableロールを付与する方法を確認する。gcloud services enable cloudresourcemanager.googleapis.com
iam.googleapis.com -
ローカルシェルを使用している場合は、ユーザー アカウントのローカル認証情報を作成します。
gcloud auth application-default login
Cloud Shell を使用している場合は、この操作を行う必要はありません。
認証エラーが返され、外部 ID プロバイダ (IdP)を使用している場合は、 フェデレーション ID を使用して gcloud CLI にログインしていることを確認します。
-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します:
gcloud init -
プロジェクトを Google Cloud 作成または選択します。
プロジェクトを選択または作成するために必要なロール
- プロジェクトを選択する: プロジェクトの選択に特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトを選択できます。
-
プロジェクトを作成する: プロジェクトを作成するには、プロジェクト作成者ロール
(
roles/resourcemanager.projectCreator)が必要です。これにはresourcemanager.projects.create権限が含まれています。ロールを付与する方法を確認する。
-
プロジェクトを作成する Google Cloud :
gcloud projects create PROJECT_ID
PROJECT_IDは、作成する Google Cloud プロジェクトの名前に置き換えます。 -
作成した Google Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
PROJECT_IDは、 Google Cloud プロジェクトの名前に置き換えます。
Cloud Resource Manager API と Identity and Access Management(IAM)API を有効にします:
API を有効にするために必要なロール
API を有効にするには、 権限を含む Service Usage 管理者 IAM ロール(
roles/serviceusage.serviceUsageAdmin)が必要です。serviceusage.services.enableロールを付与する方法を確認する。gcloud services enable cloudresourcemanager.googleapis.com
iam.googleapis.com -
ローカルシェルを使用している場合は、ユーザー アカウントのローカル認証情報を作成します。
gcloud auth application-default login
Cloud Shell を使用している場合は、この操作を行う必要はありません。
認証エラーが返され、外部 ID プロバイダ (IdP)を使用している場合は、 フェデレーション ID を使用して gcloud CLI にログインしていることを確認します。
- このガイドで既存のプロジェクトを使用する場合は、このガイドを完了するために必要な権限があることを確認します。
新しいプロジェクトを作成した場合は、
必要な権限がすでに付与されています。
必要な権限
このクイックスタートを完了するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
Cloud Run 管理者(
roles/run.admin) -
Eventarc 管理者(
roles/eventarc.admin) -
ログ表示アクセス者(
roles/logging.viewAccessor) -
プロジェクト IAM 管理者 (
roles/resourcemanager.projectIamAdmin) -
Pub/Sub パブリッシャー (
roles/pubsub.publisher) -
サービス アカウント管理者 (
roles/iam.serviceAccountAdmin) -
サービス アカウント ユーザー (
roles/iam.serviceAccountUser)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
-
Cloud Run 管理者(
Terraform をデプロイする準備をする
Terraform リソースをデプロイする前に、Terraform 構成ファイルを作成する必要があります。Terraform 構成ファイルを使用すると、Terraform 構文を使用して、インフラストラクチャの望ましい最終状態を定義できます。
ローカルシェルを使用している場合は、 Terraform をインストールします。
Terraform は Cloud Shell 環境にすでに統合されています。Cloud Shell を使用すると、Terraform をインストールしなくても Terraform リソースをデプロイできます。
Cloud Shell またはローカルシェルで、Terraform 構成を適用するデフォルトの Google Cloud プロジェクト を設定します。このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
PROJECT_IDは、 Google Cloud プロジェクトの ID に置き換えます。Terraform 構成ファイルに明示的な値を設定すると、環境変数がオーバーライドされます。
各 Terraform 構成ファイルには独自のディレクトリ(ルート モジュール)が必要です。 ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。
mkdir DIRECTORY && cd DIRECTORY && touch main.tf
DIRECTORYは、Terraform ディレクトリの名前に置き換えます。ファイル名の拡張子は
.tfにする必要があります。たとえば、このクイックスタートでは、構成ファイルはmain.tfです。
Terraform 構成を定義する
次の Terraform コードスニペットを main.tf ファイルにコピーします。または、GitHub からコードサンプル全体をコピーするには、コードスニペットの右上にある
more_vert
をクリックし、
>
[GitHub で表示]を選択します。
API を有効にする
Terraform 構成の適用に必要な API を有効にするには、
google_project_service
Terraform リソースを使用します。
サービス アカウントを作成する
すべての Eventarc トリガーは IAM サービス アカウントに関連付けられます。テスト用に専用のサービス アカウントを作成するには、
the
google_service_account
Terraform リソースを使用します。
2021 年 4 月 8 日以前に Pub/Sub サービス エージェントを有効にした場合は、
サービス
アカウント トークン作成者のロール(roles/iam.serviceAccountTokenCreator)
をサービス エージェントに付与します。
resource "google_project_iam_member" "tokencreator" { project = data.google_project.project.id role = "roles/iam.serviceAccountTokenCreator" member = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com" }
イベント プロバイダとして Pub/Sub トピックを作成する
Pub/Sub トピックを作成するには、
google_pubsub_topic
Terraform リソースを使用します。トピック レベルで Pub/Sub パブリッシャーのロール(roles/pubsub.publisher)をサービス アカウントに付与するには、
google_pubsub_topic_iam_member
Terraform リソースを使用します。
Cloud Run にイベント レシーバをデプロイする
イベントの宛先として Cloud Run サービスを作成するには、
google_cloud_run_v2_service
Terraform リソースを使用します。サービスレベルで
Cloud Run 起動元
ロール(roles/run.invoker)をサービス アカウントに付与するには、
google_cloud_run_v2_service_iam_member
Terraform リソースを使用します。
Eventarc トリガーを作成する
Pub/Sub メッセージをリッスンする Eventarc トリガーを作成するには、
google_eventarc_trigger
Terraform リソースを使用します。
Terraform 構成を適用する
Terraform CLI を使用して、構成ファイルに基づいてインフラストラクチャをプロビジョニングします。詳細については、 基本的な Terraform コマンドをご覧ください。
Terraform を初期化します。これは、ディレクトリごとに 1 回だけ行います。
terraform init
最新バージョンの Google プロバイダを使用する場合は、
-upgradeオプションを使用します。terraform init -upgrade
構成を確認して、Terraform が作成または更新するリソースが想定どおりであることを確認します。
terraform plan
必要に応じて構成を修正します。
次のコマンドを実行し、プロンプトで「
yes」と入力して、Terraform 構成を適用します。terraform apply
通常、構成全体を一度に適用します。ただし、特定のリソースをターゲットにすることもできます。次に例を示します。
terraform apply -target="google_eventarc_trigger.default"
API を有効にした後、アクションが反映されるまでに数分かかることがあります。それまでは、リソースをデプロイできません。問題が発生した場合は、Terraform 構成をもう一度適用してみてください。
Terraform に「Apply complete!」というメッセージが表示されるまで待ちます。
リソースの作成を確認する
Cloud Run サービスが作成されていることを確認します。
gcloud run services list --region us-central1出力例を以下に示します。
SERVICE: hello-events REGION: us-central1 URL: https://hello-events-13335919645.us-central1.run.app LAST DEPLOYED BY: ... LAST DEPLOYED AT: 2024-12-16T15:00:52.606160ZEventarc トリガーが作成されていることを確認します。
gcloud eventarc triggers list --location us-central1出力例を以下に示します。
NAME: trigger-pubsub-cloudrun-tf TYPE: google.cloud.pubsub.topic.v1.messagePublished DESTINATION: Cloud Run service: hello-events ACTIVE: Yes LOCATION: us-central1
Pub/Sub トピック イベントを生成して表示する
Pub/Sub トピックにメッセージをパブリッシュすることでイベントを生成できます。Eventarc トリガーは、メッセージを Cloud Run にデプロイされたイベント レシーバ サービスに転送します。サービスはイベント メッセージをログに記録します。
Pub/Sub トピックを検索して、環境変数として設定します。
gcloud config set eventarc/location us-central1 export RUN_TOPIC=$(gcloud eventarc triggers describe trigger-pubsub-cloudrun-tf \ --format='value(transport.pubsub.topic)')イベントを生成するには、Pub/Sub トピックにメッセージをパブリッシュします。
gcloud pubsub topics publish $RUN_TOPIC --message "Hello World!"イベントが Cloud Run サービスに転送され、イベント メッセージがログに記録されます。
サービスによって作成されたログエントリをフィルタします。
gcloud logging read 'jsonPayload.message: "Received event of type google.cloud.pubsub.topic.v1.messagePublished"'
次のようなログエントリを探します。
jsonPayload: ... message: 'Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: Hello World!'
Terraform を使用して、イベント レシーバ サービスを Cloud Run にデプロイし、Eventarc トリガーを作成できました。Pub/Sub からイベントを生成したら、Cloud Run ログで確認できます。
クリーンアップ
このクイックスタートに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。
次のコマンドを実行しています。プロンプトでyesと入力して、以前に Terraform 構成で適用されたリソースを削除します。
terraform destroy
また、プロジェクトを削除して課金を停止することもできます。 Google Cloud プロジェクトを削除すると、そのプロジェクト内で使用されているすべてのリソースに対する課金が停止します。 Google Cloud
プロジェクトを削除する: Google Cloud
gcloud projects delete PROJECT_ID
複数のチュートリアルとクイックスタートを実施する予定がある場合は、プロジェクトを再利用すると、プロジェクトの割り当て上限を超えないようにできます。