コンマ

メモ代わりにアウトプットしています。何か不備がありましたら、お気軽にコメント頂けると有り難いです。

【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に保存してきます。

やってみます

  1. まずS3のバケット作成

  2. 次に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を確認してみます。 f:id:koooosuke:20190426224410p:plain

正常にS3にtfstateがアップロードされています。