ログってなんぼ

エンジニアのメモです

terraform:backendにS3を使って環境ごとに状態ファイルを管理する

www.terraform.io

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だけですので、これにprdstgを追加

$ terraform workspace new prd
$ terraform workspace new stg


$ terraform workspace list
  default
* prd
  stg

tfvarsを分ける

terraform.tfvarsを各環境ごとに分けます。具体的にはもともとあったterraform.tfvarsterraform-prd.tfvarsterraform-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

こんな感じです