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 ロールは必要ありません。ロールが付与されているプロジェクトであれば、どのプロジェクトでも選択できます。
-
プロジェクトを作成する: プロジェクトを作成するには、
resourcemanager.projects.create権限を含むプロジェクト作成者ロール(roles/resourcemanager.projectCreator)が必要です。詳しくは、ロールを付与する方法をご覧ください。
-
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 を有効にするには、
serviceusage.services.enable権限を含む Service Usage 管理者 IAM ロール(roles/serviceusage.serviceUsageAdmin)が必要です。詳しくは、ロールを付与する方法をご覧ください。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 ロールは必要ありません。ロールが付与されているプロジェクトであれば、どのプロジェクトでも選択できます。
-
プロジェクトを作成する: プロジェクトを作成するには、
resourcemanager.projects.create権限を含むプロジェクト作成者ロール(roles/resourcemanager.projectCreator)が必要です。詳しくは、ロールを付与する方法をご覧ください。
-
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 を有効にするには、
serviceusage.services.enable権限を含む Service Usage 管理者 IAM ロール(roles/serviceusage.serviceUsageAdmin)が必要です。詳しくは、ロールを付与する方法をご覧ください。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 環境にすでに統合されているため、Terraform をインストールしなくても Cloud Shell を使用して 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 からコードサンプル全体をコピーするには、コード スニペットの右上にある > [GitHub で表示] をクリックします。
API を有効にする
Terraform 構成の適用に必要な API を有効にするには、google_project_service Terraform リソースを使用します。
サービス アカウントを作成する
すべての Eventarc トリガーは IAM サービス アカウントに関連付けられます。テスト用に専用のサービス アカウントを作成するには、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
複数のチュートリアルとクイックスタートを実施する予定がある場合は、プロジェクトを再利用すると、プロジェクトの割り当て上限を超えないようにできます。