# Terraform Backend Bootstrap # Creates S3 bucket and DynamoDB table for terraform state terraform { required_version = ">= 1.5.0" required_providers { aws = { source = "hashicorp/aws" version = "~> 5.30" } } } provider "aws" { region = "us-east-1" profile = "hearth" default_tags { tags = { Project = "hearth" ManagedBy = "terraform" Environment = "production" } } } # S3 Bucket for Terraform State resource "aws_s3_bucket" "terraform_state" { bucket = "hearth-terraform-state-${data.aws_caller_identity.current.account_id}" lifecycle { prevent_destroy = true } } resource "aws_s3_bucket_versioning" "terraform_state" { bucket = aws_s3_bucket.terraform_state.id versioning_configuration { status = "Enabled" } } resource "aws_s3_bucket_server_side_encryption_configuration" "terraform_state" { bucket = aws_s3_bucket.terraform_state.id rule { apply_server_side_encryption_by_default { sse_algorithm = "aws:kms" } bucket_key_enabled = true } } resource "aws_s3_bucket_public_access_block" "terraform_state" { bucket = aws_s3_bucket.terraform_state.id block_public_acls = true block_public_policy = true ignore_public_acls = true restrict_public_buckets = true } # DynamoDB Table for State Locking resource "aws_dynamodb_table" "terraform_locks" { name = "hearth-terraform-locks" billing_mode = "PAY_PER_REQUEST" hash_key = "LockID" attribute { name = "LockID" type = "S" } } data "aws_caller_identity" "current" {} output "state_bucket" { value = aws_s3_bucket.terraform_state.id } output "state_bucket_arn" { value = aws_s3_bucket.terraform_state.arn } output "lock_table" { value = aws_dynamodb_table.terraform_locks.id } output "account_id" { value = data.aws_caller_identity.current.account_id }