terraform:backendにS3を使って環境ごとに状態ファイルを管理する
prd環境とstg環境で設定ファイルとstateファイルを分けて管理するメモです
terraform0.9あたりからの機能を使っているっぽいのと、そのあたりちゃんと調べきれていないので一応v11.0以上推奨のメモということにしておきます
backendにs3を設定
main.tf
terraform { required_version = ">= 0.11.0" backend "s3" { bucket = "SERVICE_NAME.terraform.tfstate" key = "terraform.tfstate" region = "ap-northeast-1" profile = "MY_AWS_CREDENTIAL_PROFILE_NAME" encrypt = true } }
profile
で操作できるbucket
を予め作っておきます
workspaceを分ける
$ terraform workspace list default
最初はdefault
だけですので、これにprd
とstg
を追加
$ terraform workspace new prd $ terraform workspace new stg $ terraform workspace list default * prd stg
tfvarsを分ける
terraform.tfvars
を各環境ごとに分けます。具体的にはもともとあったterraform.tfvars
をterraform-prd.tfvars
とterraform-stg.tfvars
に分けて、実行時に明示的に指定して使います
initする
workspaceを切り替えて、initするとlocalにあるterraform.stateファイルがS3に移動します
$ terraform workspace select stg $ terraform init
実際の操作
$ terraform workspace list $ terraform workspace select prd $ terraform plan -var-file "terraform-prd.tfvars" $ terraform apply -var-file "terraform-prd.tfvars"
現在のworkspaceを確認して、切り替えて、設定ファイルを明示して実行
S3の状態
環境ごとに:env/
で勝手に仕分けしてくれている模様です
$ aws s3 ls --recursive SERVICE_NAME.terraform.tfstate 2018-03-12 13:27:11 80990 env:/prd/terraform.tfstate 2018-03-12 11:34:04 74183 env:/stg/terraform.tfstate
こんな感じです