Terraformは、IaC(Infrastructure as Code)を実現するツールの 1 つです。
この記事ではTerraformを使ってGoogle CloudのIaC環境構築についてご紹介します。
Terraform の入門については以下の記事をご参照ください。
サービスアカウントの作成
Terraform 実行時の権限を与えるサービスアカウントを作成する。
権限は editor ロールで、 terraform
という名称とする。
Google Cloud コンソールへログインし Cloud Shell にて以下を実行する。
なお、権限管理は Owner ロールにしか実施できないので下記コマンド実行時のユーザに注意は必要。
$ gcloud config set project <project_id>
$ gcloud iam service-accounts create terraform --display-name "Used by Terraform"
$ gcloud projects add-iam-policy-binding <project_id> \
--member serviceAccount:terraform@<project_id>.iam.gserviceaccount.com \
--role roles/editor
Terraform で IAM 関係の操作を行う場合は権限が不足して実行できないので、追加で以下のような権限を付与してやる必要がある。
$ gcloud projects add-iam-policy-binding <project_id> \
--member=serviceAccount:terraform@<project_id>.iam.gserviceaccount.com \
--role=roles/resourcemanager.projectIamAdmin
tfstate ファイル保存用の Cloud Storage バケットの作成
Google Cloud コンソールにて Terraform の tfstate ファイル配置用 Cloud Storage バケットを公開アクセス禁止で作成する。
ローカル環境の設定
Google Cloud コンソールにて「サービスアカウントの作成」にて作成したサービスアカウントから JSON 形式で秘密鍵を作成しファイルをダウンロードする。
ダウンロードしたファイルをローカルマシンの任意の場所に配置し、 以下のように環境変数 GOOGLE_APPLICATION_CREDENTIALS
の設定を行う。
$ export GOOGLE_APPLICATION_CREDENTIALS=<path to downloaded json file>
.tf ファイルの作成
.tf ファイルの分割については好みではあるが、ここでは以下を作成する。
なお、ここでは Modules などは使用せずにフラットにファイルを配置する前提で記載する。
backend.tf
- tfstate ファイルの保存に関する設定
provider.tf
- Google Cloud の Provider に関する設定
versions.tf
- Terraform のバージョンに関する設定
variables.tf
- Terraform の変数定義(ファイル内容例については省略)
- その他 .tf ファイル
- 作成したいリソース定義など(ファイル内容例については省略)
backend.tf
terraform {
backend "gcs" {
bucket = "<tfstate ファイル保存用の Cloud Storage バケット名>"
prefix = "<任意のプレフィックス、環境名などがいいかも>"
}
}
provider.tf
provider "google" {
project = "<project_id>"
region = "<region_id>"
zone = "<zone_id>"
}
versions.tf
terraform {
required_version = "~> 1.1.0"
}
おすすめ書籍
リンク