📘
【Terraform】tfstateをS3に保存し共有を可能にする
はじめに
tfstateファイルをローカルで保存していると、共同開発者と共有ができません。
S3ではtfstateファイルを保存することが可能です。この結果、1つのtfstateファイルで複数人で管理でき、競合も防ぐことができます。
terraform管理対象とtfstateの保管先は別のアカウントにすることが推奨されています。
S3で保管用バケット作成
- マネジメントコンソールからS3バケット作成
-
ブロックパブリックアクセス
を一旦オフにする - terraformのユーザーから書き込みができるようにするため、バケットポリシーを編集する
- ポリシージェネレーターをクリック
- Select Type of Policy : S3 Bucket Policy,Effect : Arrow,Principal : terraformユーザーのIAM ARN,Amazon Resource Name (ARN) : S3バケットのARN
- 作成したポリシーをバケットポリシーにコピー(IDなどは削除しておく)
-
ブロックパブリックアクセス
をオンに戻す
terraformブロック
terraformブロックにbackend属性を追加することで、S3にtfstateファイルを保存する。
- backend : block : バックエンドを指定。
- S3の場合
- bucket
- key
- region
- profile
- S3の場合
main.tf,
terraform {
backend "s3" {
bucket = バケット名
key = tfstateファイル名
region = "ap-northeast-1"
profile = ユーザー名
}
}
terraform initでS3に保存される。
$ terraform init
ローカルのtsstateは空になっていること、マネジメントコンソールでS3に保存されていることを確認。
Discussion