このチュートリアルでは、関数のソースコードの zip ファイルを Cloud Storage バケットにアップロードし、Terraform を使用してリソースをプロビジョニングして、Pub/Sub 関数をデプロイする方法について説明します。オープンソース ツールの Terraform では、宣言型の構成ファイルを使用して、Google Cloud リソースをプロビジョニングできます。
このチュートリアルでは例として Node.js 関数を使用していますが、Python、Go、Java の関数にも対応しています。使用しているランタイムがどれであっても、手順は同じです。
目標
- Terraform を使用して Pub/Sub 関数をデプロイする方法を学習します。
費用
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
For details, see Cloud Run functions pricing.
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
- 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.
-
Enable the Cloud Functions, Cloud Build, Artifact Registry, and Cloud Storage APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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 Cloud Functions, Cloud Build, Artifact Registry, and Cloud Storage APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
開発環境を準備します。
gcloud CLI がすでにインストールされている場合は、次のコマンドを実行して更新します。
gcloud components update
環境設定
このチュートリアルでは、Cloud Shell でコマンドを実行します。Cloud Shell は、Google Cloud CLI がすでにインストールされているシェル環境で、現在のプロジェクトの値もすでに設定されています。Cloud Shell の初期化には数分かかることがあります。
アプリケーションの準備
Cloud Shell で次の操作を行います。
Cloud Shell インスタンスにサンプルアプリ リポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Cloud Run 関数のサンプルコードが含まれているディレクトリに移動します。
cd nodejs-docs-samples/functions/v2/helloPubSub/
このチュートリアルで使用する Node.js サンプルは、基本的な「Hello World」Pub/Sub 関数です。
関数のソースコードを含む zip ファイルを作成します。このファイルは、Terraform を使用して Cloud Storage バケットにアップロードします。
zip -r function-source.zip .
zip ファイルのルートは、関数のソースコードのルート ディレクトリにする必要があります。したがって、上記のコマンドに
helloworld
ディレクトリ内のファイルは含まれますが、ディレクトリ自体は含まれません。
main.tf
ファイルを作成する
nodejs-docs-samples/functions/
ディレクトリに、Terraform 構成用のmain.tf
ファイルを作成します。touch main.tf
この Terraform 構成を
main.tf
ファイルにコピーします。main.tf
ファイルを編集して、次の項目に正しい値が設定されていることを確認します。構成が変更される場合は(別のランタイムを使用する場合や、別の関数をデプロイする場合など)、このファイルを編集する必要があります。- ランタイム: この例のランタイムは
nodejs16
です。 - 関数のエントリ ポイント: この例の関数のエントリ ポイントは
helloPubSub
です。 - zip ファイルのパス: 上記の例では、
main.tf
ファイルをnodejs-docs-samples/functions/
ディレクトリに配置した場合、パスは./v2/helloPubSub/function-source.zip
です。
- ランタイム: この例のランタイムは
Terraform を初期化する
Cloud Shell で次のコマンドを実行して、Terraform を初期化します。
docker run -v $(pwd):/app -w /app hashicorp/terraform:0.12.0 init
公開の Terraform Docker イメージを使用します。Docker は Cloud Shell にインストールされています。現在の作業ディレクトリはボリュームとしてマウントされるため、Docker コンテナは Terraform 構成ファイルを読み取ることができます。
次のコマンドを実行して、必要なプラグインを追加し、
.terraform
ディレクトリをビルドします。terraform init
Terraform 構成を検証する
Terraform 構成をプレビューします。このステップは省略可能ですが、main.tf
の構文が正しいかどうかを確認できます。このコマンドにより、作成されるリソースのプレビューが表示されます。
terraform plan
Terraform 構成を適用する
構成を適用して関数をデプロイします。プロンプトが表示されたら、「yes
」と入力します。
terraform apply
関数のトリガー
Pub/Sub 関数をテストするには:
トピックにメッセージをパブリッシュします(この例のトピック名は
functions2-topic
です)。gcloud pubsub topics publish TOPIC_NAME --message="Friend"
関数のログで結果を確認します。ここで、
FUNCTION_NAME
は関数の名前です(この例の関数名はfunction
です)。gcloud beta functions logs read FUNCTION_NAME --gen2
ログの出力に、新しい「Friend」メッセージが含まれているはずです。
クリーンアップ
チュートリアルの完了後は、それ以上の費用が発生しないように、作成したものをすべて削除できます。
Terraform では、terraform destroy
コマンドを実行して、構成ファイルで定義されているすべてのリソースを削除できます。
terraform destroy
Terraform でリソースを削除できるようにするには、「yes
」と入力します。