やりたいこと
terraform workspaceを使って、複数AWS環境にterraformを実行したい
前提
この記事ではhogeプロジェクトに対して、dev/stg/prdそれぞれの環境を別AWSアカウントに作りたいという前提にします。
また各アカウントでリソースを作成する権限をもったaccess_key / secret_keyはすでに払い出してもらっており、それをterraformを実行するマシンの$HOME/.aws/credentialsに保存しているものとします。
実装
最終的な実装は以下の様な形になりました。
~/.aws/credentials
[dev-hoge]
aws_access_key_id=AKIAXXXXXXXXXXXXXX
aws_secret_access_key=eD1vNSXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[stg-hoge]
aws_access_key_id=AKIAXXXXXXXXXXXXXX
aws_secret_access_key=eD1vNSXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[prd-hoge]
aws_access_key_id=AKIAXXXXXXXXXXXXXX
aws_secret_access_key=eD1vNSXXXXXXXXXXXXXXXXXXXXXXXXXXXX
provider.tf
terraform {
backend "s3" {
bucket = "<bucket_name>"
key = "terraform.tfstate"
region = "ap-northeast-1"
dynamodb_table = "<dynamo_db_table_name>"
shared_credentials_file = "$HOME/.aws/credentials"
profile = "dev-hoge"
}
required_providers {
aws = ">= 2.43.0"
}
}
provider "aws" {
shared_credentials_file = "$HOME/.aws/credentials"
profile = "${terraform.workspace}-hoge"
region = "ap-northeast-1"
}
2つの権限が必要になります。
- terraform stateの保存先であるS3を参照する権限
- terraform実行時に対象になるアカウントに対してリソースを作成する権限
1は上のコードのterraform {} に対応し、2はprovider "aws"の部分に対応します。
ポイントとしては、terraformは${terraform.workspace}
にそれぞれworkspaceの環境名を埋め込んでくれるので、ここで読むべきprofileを切り替えています。
実行
## 開発環境への適用
terraform workspace select dev
terraform plan
terraform apply
## 検証環境への適用
terraform workspace select stg
terraform plan
terraform apply
## 本番環境への適用
terraform workspace select prd
terraform plan
terraform apply
以上です。
もっと違うやり方だったり、自分はこうしているなどありましたら教えて下さい。