Skip to content

Instantly share code, notes, and snippets.

@fionn
Last active September 18, 2021 15:44
Show Gist options
  • Save fionn/06fabf15c1632b72237587bd67a48b16 to your computer and use it in GitHub Desktop.
Save fionn/06fabf15c1632b72237587bd67a48b16 to your computer and use it in GitHub Desktop.
Store remote state on S3
locals {
project = "eng-sandbox"
region = "us-west1"
state_bucket_name = "test-terraform-state-2487523"
labels = {
env = "non-prod"
usage = "infra"
owned-by = "eng"
team = "test"
}
}
terraform {
required_providers {
google = {
source = "hashicorp/google"
version = "~> 3.81"
}
}
required_version = "~> 1.0"
backend "gcs" {
bucket = "test-terraform-state-2487523"
prefix = "terraform/state"
}
}
provider "google" {
project = local.project
region = local.region
}
resource "google_storage_bucket" "state-bucket" {
name = local.state_bucket_name
location = local.region
force_destroy = true
uniform_bucket_level_access = true
#storage_class = "NEARLINE"
versioning {
enabled = true
}
lifecycle_rule {
condition {
num_newer_versions = 5
}
action {
type = "Delete"
}
}
labels = local.labels
}
resource "aws_s3_bucket" "terraform_state" {
bucket = "terraform-state"
lifecycle {
prevent_destroy = true
}
versioning {
enabled = true
}
server_side_encryption_configuration {
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
}
resource "aws_dynamodb_table" "terraform_state_locks" {
name = "terraform-state-locks"
billing_mode = "PAY_PER_REQUEST"
hash_key = "LockID"
attribute {
name = "LockID"
type = "S"
}
}
terraform {
backend "s3" {
bucket = "terraform-state"
key = "global/terraform.tfstate"
region = "ap-northeast-1"
encrypt = true
dynamodb_table = "terraform-state-locks"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment