【Terraform】tfstateをS3バケットに保存する方法
TL;DR
terraform.tfstateをS3バケットに保存する方法を記載しています。
前提条件
【Terraform】TerraformでVPC/Subnet/EC2インスタンスを作ってみる - コンマで
コンテナ時代のWebサービスの作り方 - 楽描商店 - BOOTHを参考にterraformでEC2を作成しました。
terraform apply
すると、カレントディレクトリにtfstate
というファイルが生成されました。
$ cd ~/terraform_ec2/ $ ls sample.tf terraform.tfstate
tfstateには、terraform apply
し反映したインフラ情報が入っています。
コンテナ時代のWebサービスの作り方 - 楽描商店 - BOOTHによると
暗号化されていないためリポジトリにpushするのはためらわれます。またもしもチームで開発を行う場合はtfstateがそれぞれの開発者のローカルに存在すると何が正しいのか分からなくなるため問題があります。なのでtfstateは特にこだわりがない場合はS3などのクラウドストレージに保存すると良いでしょう。
とのことなので、S3に保存してきます。
やってみます
まずS3のバケット作成
次に
tfstate
をs3にuploadする設定を記述
$ cat sample.tf # ~/terraform_ec2/sample.tf provider "aws" { region = "ap-northeast-1" } resource "aws_instance" "sandbox" { ami = "ami-785c491f" instance_type = "t2.micro" subnet_id = "${aws_subnet.public_subnet.id}" } resource "aws_vpc" "vpc" { cidr_block = "10.0.0.0/16" instance_tenancy = "default" } resource "aws_subnet" "public_subnet" { vpc_id = "${aws_vpc.vpc.id}" cidr_block = "10.0.16.0/20" availability_zone = "ap-northeast-1a" } terraform { backend "s3" { bucket = "<S3のバケット名>" key = "test/terraform.tfstate" region = "ap-northeast-1" } }
3.terraform apply
をしてみる。
$ terraform apply
4.S3を確認してみます。
正常にS3にtfstate
がアップロードされています。