2022/05/13
Terraform で Cloud Functions をデプロイしてみた
Terraformって何?
Terraformはインフラの構成管理ツールです。Terraformはインフラのリソースをコードとして定義して、その定義の状態になるようにリソースを作成・操作してくれます。いわゆるIaC(Infrastructure as Code)ツールです。今回はTerraform で Cloud Functions をデプロイしてみました。
デプロイする前提条件
- サービスアカウントのjsonファイル
Terraformというユーザーに、GCPのプロジェクトにリソースを作成するための権限を付与する必要があります。それを実現するのがサービスアカウントというものです。
ざっくり説明すると、GCPのプロジェクトにリソースを作成するためのサービスアカウントを発行し、その権限情報(イメージとしては鍵)をTerraformに持たせなければ、Terraformはリソースを作れません。実際にはサービスアカウントの情報をjsonファイルにまとめた物をTerraformに渡します。
作成の方法は公式のドキュメントを参考してください
https://cloud.google.com/docs/authentication/production?hl=ja#create_service_account
main.tf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | terraform { required_providers { google = { source = "hashicorp/google" version = "4.16.0" } } # jsonファイルのパスをcredentialsに設定する provider "google" { credentials = "${file("<your-credential-file-path>")}" project = ${project_id} region = ${project_region} zone = ${project_zone} } # Cloud Functionsにアップロードするファイルをzipに固める。 data "archive_file" "function_archive" { type = "zip" source_dir = "./src" output_path = "./src.zip" } # zipファイルをアップロードするためのbucketを作成 resource "google_storage_bucket" "bucket" { name = bucket_name location = ${project_region} storage_class = "STANDARD" } # zipファイルをアップロードする resource "google_storage_bucket_object" "packages" { name = "packages/functions.${data.archive_file.function_archive.output_md5}.zip" bucket = google_storage_bucket.bucket.name source = data.archive_file.function_archive.output_path } #Cloud Functions本体 resource "google_cloudfunctions_function" "function" { name = "sample-function" runtime = "nodejs16" source_archive_bucket = google_storage_bucket.bucket.name source_archive_object = google_storage_bucket_object.packages.name trigger_http = true available_memory_mb = 512 timeout = 120 entry_point = run } |
デプロイ方法
1.ワークスペースを初期化する
Terraform を実行するためには、1番初めに terraform init でワークスペースを初期化することが必須となっています。
1 | terraform init |
2.実行計画を参照する
Terraformファイルに記載された情報を元に、どのようなリソースが 作成/修正/削除 されるかを参照することが可能になります。
1 | terraform plan |
cloud functionsにデプロイ
1 | terraform apply |
Terraform applyを実行すると、 TerraformがCloud Storageへファイルをアップロード -> Functionsへデプロイまで自動で実行してくれます。
Author Profile
スターフィールド編集部
SHARE