このドキュメントでは、Terraform で Google Cloud リソースを使用し、次の宛先の google_eventarc_trigger
リソースを使用して Eventarc トリガーを作成する方法について説明します。
- Cloud Run:
google_cloud_run_v2_service
Terraform リソースを使用します。 - Google Kubernetes Engine:
google_container_cluster
Terraform リソースを使用します。 - Workflows:
google_workflows_workflow
Terraform リソースを使用します。
このチュートリアルの例では、Cloud Storage からの直接イベントを使用していますが、任意のイベント プロバイダに適用できます。このチュートリアルでは、イベントのソースとなる新しいリソースを作成します。
Terraform の使用に関するリソースとガイダンスについては、Google Cloud 上の Terraform のドキュメントをご覧ください。
始める前に
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Resource Manager and Identity and Access Management (IAM) APIs.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Cloud Shell はシェル環境で、Terraform がすでに統合されています。
Eventarc トリガーを作成する
Terraform を使用して、さまざまな宛先に Eventarc トリガーを作成できます。
この例では、参照変数、リソースの属性、関数の呼び出しなどの代入に補間を使用しています。
Cloud Run
Cloud Shell を使用して、Terraform でリソースをデプロイし、Eventarc トリガーを作成します。
1. API を有効にする
必要な API を有効にするには、次のコードを使用します。
2. サービス アカウントの作成と IAM の構成
次のコードを使用して、専用のサービス アカウントと IAM ロールを作成します。
2021 年 4 月 8 日以前に Pub/Sub サービス エージェントを有効にした場合は、サービス エージェントに 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"
}
3. イベント プロバイダとして Cloud Storage バケットを作成する
次のコードを使用して、Eventarc に関連する権限を持つ Cloud Storage バケットを作成します。
4. Cloud Run サービスをイベント ターゲットとして定義する
トリガーのイベントの宛先として Cloud Run サービスを作成します。google_cloud_run_v2_service
リソースを使用して、Cloud Run サービスを定義します。
5. Eventarc トリガーを定義する
Eventarc トリガーは、イベント プロバイダをイベントの宛先に接続します。google_eventarc_trigger
リソースを使用して、Cloud Storage ダイレクト イベント プロバイダを定義し、Cloud Run の宛先に送信します。
トリガーの作成時に指定する event-filters
のように機能する、Eventarc でサポートされている CloudEvents 属性を使用して、複数の matching_criteria
を定義できます。詳細については、特定のプロバイダ、イベントタイプ、Cloud Run の宛先にトリガーを作成するの手順をご覧ください。すべてのフィルタに一致するイベントが宛先に送信されます。
6. 変更を適用する
Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。
Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を完了します。
Cloud Shell を準備する
- Cloud Shell を起動します。
-
Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。
このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Terraform 構成ファイルに明示的な値を設定すると、環境変数がオーバーライドされます。
ディレクトリを準備する
Terraform 構成ファイルには独自のディレクトリ(ルート モジュールとも呼ばれます)が必要です。
-
Cloud Shell で、ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。ファイルの拡張子は
.tf
にする必要があります(例:main.tf
)。このチュートリアルでは、このファイルをmain.tf
とします。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
チュートリアルを使用している場合は、各セクションまたはステップのサンプルコードをコピーできます。
新しく作成した
main.tf
にサンプルコードをコピーします。必要に応じて、GitHub からコードをコピーします。Terraform スニペットがエンドツーエンドのソリューションの一部である場合は、この方法をおすすめします。
- 環境に適用するサンプル パラメータを確認し、変更します。
- 変更を保存します。
-
Terraform を初期化します。これは、ディレクトリごとに 1 回だけ行います。
terraform init
最新バージョンの Google プロバイダを使用する場合は、
-upgrade
オプションを使用します。terraform init -upgrade
変更を適用する
-
構成を確認して、Terraform が作成または更新するリソースが想定どおりであることを確認します。
terraform plan
必要に応じて構成を修正します。
-
次のコマンドを実行します。プロンプトで「
yes
」と入力して、Terraform 構成を適用します。terraform apply
Terraform に「Apply complete!」というメッセージが表示されるまで待ちます。
- Google Cloud プロジェクトを開いて結果を表示します。Google Cloud コンソールの UI でリソースに移動して、Terraform によって作成または更新されたことを確認します。
7. リソースの作成を確認する
サービスが作成されたことを確認するには:
gcloud run services list --region us-central1
トリガーが作成されたことを確認するには:
gcloud eventarc triggers list --location us-central1
出力例を以下に示します。
NAME: trigger-storage-cloudrun-tf
TYPE: google.cloud.storage.object.v1.finalized
DESTINATION: Cloud Run service: hello-events
ACTIVE: Yes
LOCATION: us-central1
GKE
Cloud Shell を使用して、Terraform でリソースをデプロイし、Eventarc トリガーを作成します。
Eventarc トリガーには Google Kubernetes Engine サービスが必要です。このチュートリアルを簡略化するため、Terraform 構成を適用する間に、Terraform の外部でこのサービスを構成します。
1. GKE クラスタを作成する
必要な API を有効にするには、次のコードを使用します。
次のコードを使用して GKE クラスタを作成します。
2. 変更を適用する
Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。
Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を完了します。
Cloud Shell を準備する
- Cloud Shell を起動します。
-
Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。
このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Terraform 構成ファイルに明示的な値を設定すると、環境変数がオーバーライドされます。
ディレクトリを準備する
Terraform 構成ファイルには独自のディレクトリ(ルート モジュールとも呼ばれます)が必要です。
-
Cloud Shell で、ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。ファイルの拡張子は
.tf
にする必要があります(例:main.tf
)。このチュートリアルでは、このファイルをmain.tf
とします。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
チュートリアルを使用している場合は、各セクションまたはステップのサンプルコードをコピーできます。
新しく作成した
main.tf
にサンプルコードをコピーします。必要に応じて、GitHub からコードをコピーします。Terraform スニペットがエンドツーエンドのソリューションの一部である場合は、この方法をおすすめします。
- 環境に適用するサンプル パラメータを確認し、変更します。
- 変更を保存します。
-
Terraform を初期化します。これは、ディレクトリごとに 1 回だけ行います。
terraform init
最新バージョンの Google プロバイダを使用する場合は、
-upgrade
オプションを使用します。terraform init -upgrade
変更を適用する
-
構成を確認して、Terraform が作成または更新するリソースが想定どおりであることを確認します。
terraform plan
必要に応じて構成を修正します。
-
次のコマンドを実行します。プロンプトで「
yes
」と入力して、Terraform 構成を適用します。terraform apply
Terraform に「Apply complete!」というメッセージが表示されるまで待ちます。
- Google Cloud プロジェクトを開いて結果を表示します。Google Cloud コンソールの UI でリソースに移動して、Terraform によって作成または更新されたことを確認します。
3. GKE を構成する
ビルド済みの Cloud Run イメージ us-docker.pkg.dev/cloudrun/container/hello
を使用して、HTTP リクエストを受信し、イベントをログに記録する Kubernetes Service を GKE にデプロイします。
クラスタとやり取りするために必要な認証情報を取得します。
gcloud container clusters get-credentials eventarc-cluster \ --region=us-central1
hello-gke
という名前の Deployment を作成します。kubectl create deployment hello-gke \ --image=us-docker.pkg.dev/cloudrun/container/hello
Deployment を Kubernetes Service として公開します。
kubectl expose deployment hello-gke \ --type ClusterIP --port 80 --target-port 8080
Pod が実行されていることを確認します。
kubectl get pods
出力例を以下に示します。
NAME READY STATUS hello-gke-df6469d4b-5vv22 1/1 Running
STATUS
がPending
の場合、Pod はデプロイされています。デプロイが完了するまで 1 分ほど待ってから、もう一度ステータスを確認します。サービスが実行されていることを確認します。
kubectl get svc
出力例を以下に示します。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-gke ClusterIP 34.118.226.144 <none> 80/TCP kubernetes ClusterIP 34.118.224.1 <none> 443/TCP
4. Eventarc を作成して構成する
次の構成を使用してサービス アカウントを設定し、Eventarc が GKE のイベントを管理するための特定のロールを付与します。
次のコードを使用して、Eventarc に関連する権限を持つ Cloud Storage バケットを作成します。
次の構成を使用して必要な API を有効にし、Eventarc GKE 宛先サービスを初期化します。
Pub/Sub イベントを hello-gke
GKE サービスに転送する Eventarc トリガーを作成します。
トリガーの作成時に指定する event-filters
のように機能する、Eventarc でサポートされている CloudEvents 属性を使用して、複数の matching_criteria
を定義できます。詳細については、特定のプロバイダ、イベントタイプ、GKE の宛先にトリガーを作成するの手順をご覧ください。すべてのフィルタに一致するイベントが宛先に送信されます。
5. 追加の変更を適用する
Google Cloud プロジェクトで追加の Terraform 構成を適用するには、次の操作を行います。
Eventarc ID アカウントを作成します。
gcloud beta services identity create --service eventarc.googleapis.com
前の手順で取得した新しい Terraform コードを既存の
main.tf
ファイルに追加します。更新した Terraform 構成を適用します。
terraform plan terraform apply
Terraform に「Apply complete!」というメッセージが表示されるまで待ちます。
Google Cloud プロジェクトを開いて結果を表示します。Google Cloud コンソールの UI でリソースに移動して、Terraform によって作成または更新されたことを確認します。
Workflows
Cloud Shell を使用して、Terraform でリソースをデプロイし、ワークフローと Eventarc のトリガーを作成します。
1. API を有効にする
必要な API を有効にするには、次のコードを使用します。
2. サービス アカウントの作成と IAM の構成
次のコードを使用して専用のサービス アカウントを作成し、IAM ロールを追加します。
2021 年 4 月 8 日以前に Pub/Sub サービス エージェントを有効にした場合は、サービス エージェントに 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"
}
3. イベント プロバイダとして Cloud Storage バケットを作成する
次のコードを使用して、Eventarc に関連する権限を持つ Cloud Storage バケットを作成します。
4. ワークフローを作成してデプロイする
作成されたバケットでオブジェクトが更新されたときに実行されるワークフローを定義してデプロイします。
5. Eventarc トリガーを作成する
作成したバケットの直接イベントを Workflows に転送する Eventarc トリガーを作成します。google_eventarc_trigger
リソースを使用して、Eventarc トリガー リソースを定義します。
トリガーの作成時に指定する event-filters
のように機能する、Eventarc でサポートされている CloudEvents 属性を使用して、複数の matching_criteria
を定義できます。詳細については、特定のプロバイダ、イベントタイプ、Workflows の宛先にトリガーを作成するの手順をご覧ください。
すべてのフィルタに一致するイベントが宛先に送信されます。
6. 変更を適用する
Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。
Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を完了します。
Cloud Shell を準備する
- Cloud Shell を起動します。
-
Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。
このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Terraform 構成ファイルに明示的な値を設定すると、環境変数がオーバーライドされます。
ディレクトリを準備する
Terraform 構成ファイルには独自のディレクトリ(ルート モジュールとも呼ばれます)が必要です。
-
Cloud Shell で、ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。ファイルの拡張子は
.tf
にする必要があります(例:main.tf
)。このチュートリアルでは、このファイルをmain.tf
とします。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
チュートリアルを使用している場合は、各セクションまたはステップのサンプルコードをコピーできます。
新しく作成した
main.tf
にサンプルコードをコピーします。必要に応じて、GitHub からコードをコピーします。Terraform スニペットがエンドツーエンドのソリューションの一部である場合は、この方法をおすすめします。
- 環境に適用するサンプル パラメータを確認し、変更します。
- 変更を保存します。
-
Terraform を初期化します。これは、ディレクトリごとに 1 回だけ行います。
terraform init
最新バージョンの Google プロバイダを使用する場合は、
-upgrade
オプションを使用します。terraform init -upgrade
変更を適用する
-
構成を確認して、Terraform が作成または更新するリソースが想定どおりであることを確認します。
terraform plan
必要に応じて構成を修正します。
-
次のコマンドを実行します。プロンプトで「
yes
」と入力して、Terraform 構成を適用します。terraform apply
Terraform に「Apply complete!」というメッセージが表示されるまで待ちます。
- Google Cloud プロジェクトを開いて結果を表示します。Google Cloud コンソールの UI でリソースに移動して、Terraform によって作成または更新されたことを確認します。
7. ワークフローが作成されたことを確認する
ワークフローが作成されたことを確認するには、次のコマンドを実行します。
gcloud workflows list --location us-central1
8. Eventarc トリガーが作成されたことを確認する
Eventarc トリガーが作成されたことを確認するには、次のコマンドを実行します。
gcloud eventarc triggers list --location us-central1
出力例を以下に示します。
NAME: trigger-storage-workflows-tf
TYPE: google.cloud.storage.object.v1.finalized
DESTINATION: Workflows: storage-workflow-tf
ACTIVE: Yes
LOCATION: us-central1
イベントを生成して表示する
イベントを生成し、Eventarc トリガーが期待どおりに動作していることを確認します。
Cloud Run
イベントを生成するには:
Cloud Storage にテキスト ファイルをアップロードします。
echo "Hello World" > random.txt gcloud storage cp random.txt gs://trigger-cloudrun-PROJECT_ID/random.txt
アップロードによりイベントが生成され、Cloud Run サービスはイベントのメッセージをロギングします。
イベントが受信されたことを確認するには:
- サービスによって作成されたイベント関連ログエントリを表示します。
gcloud logging read "resource.type=cloud_run_revision \ AND resource.labels.service_name=hello-events"
または、Google Cloud コンソールを開き、Cloud Run リソースに移動してログを表示します。
- 次のようなログエントリを探します。
Received event of type google.cloud.storage.object.v1.finalized. Event data: { "kind": "storage#object", "id": "trigger-cloudrun-PROJECT_ID/random.txt", ...}
GKE
イベントを生成するには:
Cloud Storage にテキスト ファイルをアップロードします。
echo "Hello World" > random.txt gcloud storage cp random.txt gs://trigger-gke-PROJECT_ID/random.txt
アップロードによりイベントが生成され、Cloud Run サービスはイベントのメッセージをロギングします。
イベントが受信されたことを確認するには:
Pod ID を見つけます。
POD_NAME=$(kubectl get pods -o custom-columns=":metadata.name" --no-headers)
このコマンドは、
kubectl
のフォーマットされた出力を使用します。Pod のログを確認します。
kubectl logs $POD_NAME
次のようなログエントリを探します。
{"severity":"INFO","eventType":"google.cloud.pubsub.topic.v1.messagePublished", "message":"Received event of type google.cloud.pubsub.topic.v1.messagePublished.", [...]}
Workflows
イベントを生成するには:
Cloud Storage にテキスト ファイルをアップロードします。
echo "Hello World" > random.txt gcloud storage cp random.txt gs://trigger-workflows-PROJECT_ID/random.txt
アップロードによりイベントが生成され、Cloud Run サービスはイベントのメッセージをロギングします。
イベントが受信されたことを確認するには:
直近の 5 つの実行を一覧表示して、Workflows の実行がトリガーされたことを確認します。
gcloud workflows executions list storage-workflow-tf --limit=5
出力には、
NAME
、START_TIME
、END_TIME
、STATUS
の実行リストが含まれます。最新の実行の結果を取得します。
EXECUTION_NAME=$(gcloud workflows executions list storage-workflow-tf --limit=1 --format "value(name)") gcloud workflows executions describe $EXECUTION_NAME
出力は次のようになることを確認します。
... result: '"Received event google.cloud.storage.object.v1.finalized - trigger-workflows-PROJECT_ID, random.txt"' state: SUCCEEDED ...
Workflows の出力で
state: SUCCEEDED
とresult: "Received event"
を探します。
クリーンアップ
次のコマンドを実行しています。プロンプトで「yes
」と入力して、以前に Terraform 構成で適用されたリソースを削除します。
terraform destroy
Google Cloud プロジェクトを削除して、料金が発生しないようにすることもできます。Google Cloud プロジェクトを削除すると、そのプロジェクト内で使用されているすべてのリソースに対する課金が停止します。
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
次のステップ
- gcloud CLI またはコンソールを使用してイベントからワークフローをトリガーするには、イベントまたは Pub/Sub メッセージを使用してワークフローをトリガーするをご覧ください。