複数環境に対応する terraform のディレクトリ構成と tfstate の管理

terraform はディレクトリ内のすべての tf ファイルを実行対象とするので、環境ごとに変数を変えるなどの際には module という機能を使うと良い。このときのディレクトリ構成は terraform が公式でこれというものは定めていないので各々やっていく必要があるが、よさそうな構成は以下の2つの記事の内容だった。

後者のほうがよりシンプルで個人的には好き。さて、これらのディレクトリ構成をとった場合、 tfstate はそれぞれの環境ごとに作成される。この管理をどうするかという問題が発生する。

基本的には単純に terraform remote config コマンドをそれぞれのディレクトリに入った瞬間叩くという運用になるかと思いますが、ちとダルいので以下のようなシェルスクリプトを書くと良さげ。

readonly BUCKET=  #BUCKET_NAME
readonly ENV=`pwd | rev | awk -F \/ '{print $1}' | rev`
readonly REMOTE_STATE=${ENV}/terraform.tfstate

terraform remote config -backend=S3 \
  -backend-config="bucket=${BUCKET}" \
  -backend-config="region=ap-northeast-1" \
  -backend-config="key=$ENV/terraform.tfstate" \
  -backend-config="access_key=${TF_VAR_aws_iam_access_key}" \
  -backend-config="secret_key=${TF_VAR_aws_iam_secret_key}"

それぞれ dev から実行すれば dev/terraform.tfstate を、 prod から実行すれば prod/terraform.tfstate を remote state として取り扱えるようになる。

その他

multiple provider 機能も使わねばならんかったのでリンクだけ貼っておく

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です