Terraformを使うメリット
基本的にGCPのコンソールでインフラの作成を行っていたが、Terraformを使うことでも作成できるようになる。
コードでインフラを作成できるので、管理がしやすい!
やること
未認証を許可
したCloud Run
を作成する
Homebrewでtfenvをインストール
brew install tfenv
tfenvのコマンドが使えるようになったので、バージョンを指定してインストール
tfenv install X.X.X
最新をインストール
tfenv install latest
リスト
tfenv list
実行後、下記のようなリストが出てくる
1.1.6
1.1.0
1.0.11
0.14.4
terraformで使いたいバージョン
例:echo 1.0.11 > .terraform-version
これでterraformコマンドが使える!
terraform --version
を実行して確認
バージョンの切り替えの時
tfenv use X.X.X
※vscodeのプラグインは下記を入れました。
HashiCorp Terraform
サービスアカウントの作成
どうしてもGCPのコンソールで作成しないといけないもの = サービスアカウント
- サービスアカウント名を入力
- 作成して続行をクリック
- ロールを選択(今回はRunを使うので、
編集者
とCloud Run管理者
を選択) - 続行をクリック
完了
keyの作成
上記手順で作成したアカウントがあることを確認
- そのアカウントのリンクをクリック
- 「キー」を選択
- 鍵を追加、「新しい鍵を作成」をクリック
- 「JSON」 で作成
JSON
credential
というフォルダを作成し、上記でダウンロードした「JSON」をcredentials.json
として保存
一番最初に必要なもの
terraform.tfvars
variables.tf
provider.tf
terraform.tfvars
credential = "./credential/credentials.json"
default_location = "asia-northeast1"
project_id = "クレデンシャルで作成したproject_id"
variables.tf
variable "credential" {
type = string
}
variable "default_location" {
type = string
}
variable "project_id" {
type = string
}
provider.tf
provider "google" {
credentials = var.credential
region = var.default_location
project = var.project_id
}
※Cloud Run以外を動かす際にも上記の3つは必要
Cloud Runの作成
cloud_run.tf
resource "google_cloud_run_service" "test" {
name = "test"
location = "asia-northeast1"
template {
spec {
containers {
image = "us-docker.pkg.dev/cloudrun/container/hello"
}
}
}
traffic {
percent = 100
latest_revision = true
}
}
※今回は必要最低限のコード(細かい設定もできるので公式等を見て記載していく必要あり)
未認証許可
iam.tf
//cloud run未認証許可
resource "google_cloud_run_service_iam_member" "member" {
location = google_cloud_run_service.test.location
project = google_cloud_run_service.test.project
service = google_cloud_run_service.test.name
role = "roles/run.invoker"
member = "allUsers"
}
Makefileの作成
Makefile
# プロジェクトをセット
project-set:
gcloud config set project プロジェクト名
# プロジェクトなどの一覧
project-show:
gcloud config list
# 作成した差分
plan:
@make project-set
terraform plan -var-file ./env/terraform.tfvars
# デプロイ
apply:
@make project-set
terraform apply -var-file ./env/terraform.tfvars
# 履歴などの削除
destroy:
@make project-set
terraform destroy -var-file ./env/terraform.tfvars
Makefile:make〇〇
で実行できるようにする(JS
ではpackage.json
のscript
!)
Cloud Runにあげる
-
terraform init
:初期化 -
make apply
を実行 -
Enter a value:
にyes
と入れる
GCPのCloud Runを開いて、名前:test
、認証:未認証許可
、最終デプロイ日:数秒前
になっていればOK!
エラーから解決策
Error: Error applying IAM policy for cloudrun service
私は、最初に作成するサービスアカウントでロールを編集者
だけで行なってました。
そしてターミナルでmake apply
を実行後に上記のエラーが...
解決策
たどり着いた解決策がCloud Run 管理者
を追加!
最後に
Cloud Runにあげることはできましたが、ほぼデフォルトです...
また、知識のアップデートがあれば、更新します。
参考文献