事前準備
- Docker が入っていて、
docker-compose
コマンドが使えること - Google アカウントを持っていて、GCP のコンソールが表示できること
- GCP の決済アカウントが用意されていること
手順
docker-compose.yml を用意する
version: "3.7"
services:
tf:
image: hashicorp/terraform:1.0.0
container_name: "terraform"
working_dir: /workspace
environment:
- TF_VAR_billing_id=$TF_VAR_billing_id
- TF_VAR_gcp_project=$TF_VAR_gcp_project
volumes:
- ./terraform:/workspace:cached
- gcloud-config:/root/.config
gcloud:
entrypoint: "gcloud"
image: google/cloud-sdk:alpine
container_name: "gcloud"
working_dir: /workspace
volumes:
- ./terraform:/workspace:cached
- gcloud-config:/root/.config
volumes:
gcloud-config:
環境変数の設定
TF_VAR_{}
をつけておくと、 terraform から {}
の変数として呼び出せるようになる
export TF_VAR_billing_id=xxxxxxxxxxx
export TF_VAR_gcp_project=xxxxxxxxxxxx
TF_VAR_billing_id の取得
使いたい請求アカウントの 請求先アカウントID
を取得して使う。
TF_VAR_gcp_project の取得
プロジェクト名は一度設定すると変更できないので、慎重に、かつユニークになるように決める。
ここでユニークでない値を設定すると、あとでエラーが起きるので、そうなったらもう一度ここで設定し直すようにする。
terraform の定義ファイル作成
versions.tf
ここで下記のことを定義する
- terraform のバージョン
- GCP を使うこと
- そのバーション
terraform {
required_version = "1.0.0"
required_providers {
google = {
source = "hashicorp/google"
version = "3.72.0"
}
}
}
main.tf
ここで、プロジェクトの作成と、リソースの作成を行う。
この通りに書くと、Cloud TTS (https://cloud.google.com/text-to-speech/?hl=ja) が作成される(有効になる)ので、別リソースを作成したい場合は適宜読み替えて適用させる。
variable "gcp_project" {}
variable "billing_id" {}
# GCP 使いますよ
provider "google" {
project = var.gcp_project
}
# プロジェクトの作成
resource "google_project" "gcp_project" {
name = var.gcp_project
project_id = var.gcp_project
billing_account = var.billing_id
auto_create_network = false
}
# Cloud TTS の有効化
resource "google_project_service" "tts" {
project = google_project.gcp_project.project_id
service = "texttospeech.googleapis.com"
}
コマンドを実行してリソース作成
# gcp のリソースを作成するためにログイン
$ docker-compose run --rm gcloud auth application-default login
# terraform 環境の初期化
$ docker-compose run --rm tf init
# .tf ファイルの見た目を整える
$ docker-compose run --rm tf fmt
# terraform の定義に変なところがないかチェックする
$ docker-compose run --rm tf validate
# 実行によって起こる変更を確認する
$ docker-compose run --rm tf plan
# 環境に変更を適応する
$ docker-compose run --rm tf apply
Error 409: Requested entity already exists, alreadyExists
error creating project {project_id} ({project_id}): googleapi: Error 409: Requested entity already exists, alreadyExists. If you received a 403 error, make sure you have the `roles/resourcemanager.projectCreator` permission
上記のようなエラーが出たら、おそらく、プロジェクト名がユニークになっていないのが問題なので、下記トラブルシュートで解決する。
https://qiita.com/tktcorporation/items/b9ca7334e415bb13ffc2
参考
https://yomon.hatenablog.com/entry/2020/07/14/234753
https://registry.terraform.io/providers/hashicorp/google/latest/docs