Amazon S3 (Simple Storage Service) fulfills the above requirements. S3 is a cloud file storage service; basically the AWS version of Dropbox.
Setup:
Create an AWS S3 bucket with terraform to store terraform.tfstate1.) Create terraform main.tf for AWS S3 bucket.
See https://github.com/juttayaya/devops/blob/master/hashicorp/terraform/s3-tfstate-example/s3/main.tf
provider "aws" { region = "us-east-1" } resource "aws_s3_bucket" "s3-tfstate-example" { bucket = "terraform-s3-tfstate-example" acl = "private" versioning { enabled = true } lifecycle { prevent_destroy = true } tags { Name = "Terraform S3 tfstate Example" Org = "JavaJirawat" } }
The above configuration turns on S3 versioning so you can query for the history of infrastructure changes. The prevent_destroy = true guards against accidental deletion.
2.) Execute main.tf to create the S3 bucket on AWS
Run the command
terraform apply
The AWS account that executes terraform needs AmazonS3FullAccess permission in the region you are creating the S3 bucket
https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/arn:aws:iam::aws:policy/AmazonS3FullAccess
Usage:
Here is an example of using the S3 bucket we just created to store a terraform.tfstate for a AWS EC2 resource.
1.) Create terraform main.tf for AWS EC2 server with a S3 backend to store the terraform.tfstate file.
1.) Create terraform main.tf for AWS EC2 server with a S3 backend to store the terraform.tfstate file.
See https://github.com/juttayaya/devops/blob/master/hashicorp/terraform/s3-tfstate-example/ec2/main.tf
terraform { backend "s3" { bucket = "terraform-s3-tfstate-example" region = "us-east-1" key = "example/ec2/terraform.tfstate" encrypt = true } } provider "aws" { region = "us-east-1" } # Amazon Linux AMI resource "aws_instance" "ec2-example" { count = 1 ami = "ami-a4c7edb2" instance_type = "t2.micro" lifecycle { create_before_destroy = true } tags { Name = "Example for S3 tfstate" Org = "JavaJirawat" } }
The terraform backend bucket name and region must match the S3 bucket name and region we created. The key is the full folder path and filename to store the terraform.tfstate file
2.) Initialize the terraform S3 backend
Run the command
terraform init
Type in "yes" for any prompt.
3.) Execute main.tf to create the EC2 server on AWS
Run the command
terraform apply
The AWS account that executes terraform needs AmazonEC2FullAccess permission in the region you are creating the EC2 server
https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/arn:aws:iam::aws:policy/AmazonEC2FullAccess
Excellent Post , I am able to replicate my state to S3 with your example
ReplyDelete