diff --git a/devops-aws b/devops-aws new file mode 160000 index 0000000..1b9ae8e --- /dev/null +++ b/devops-aws @@ -0,0 +1 @@ +Subproject commit 1b9ae8e2e9ccb3de4d2d1bc163ef1df288ec5fad diff --git a/terraform/bootstrap/main.tf b/terraform/bootstrap/main.tf index 33844a6..dcae931 100644 --- a/terraform/bootstrap/main.tf +++ b/terraform/bootstrap/main.tf @@ -1,15 +1,8 @@ -############################################################################### -# bootstrap/main.tf -# Run ONCE before the main Terraform to create the S3 backend + DynamoDB lock -# Usage: cd terraform/bootstrap && terraform init && terraform apply -############################################################################### - terraform { - required_version = ">= 1.6.0" required_providers { aws = { source = "hashicorp/aws" - version = "~> 5.0" + version = "~> 5.100.0" } } } @@ -21,22 +14,25 @@ provider "aws" { variable "aws_region" { default = "us-east-1" } variable "project_name" { default = "serene-stay" } -# ── S3 bucket for Terraform state ──────────────────────────────────────────── - +# --- 1. S3 Bucket for Terraform state (Unique Name) --- resource "aws_s3_bucket" "tfstate" { - bucket = "${var.project_name}-tfstate" + bucket = "serene-stay-tfstate-ramesh-98" tags = { - Name = "${var.project_name}-tfstate" + Name = "serene-stay-tfstate-ramesh-98" ManagedBy = "Terraform Bootstrap" } } +# --- 2. Bucket Versioning --- resource "aws_s3_bucket_versioning" "tfstate" { bucket = aws_s3_bucket.tfstate.id - versioning_configuration { status = "Enabled" } + versioning_configuration { + status = "Enabled" + } } +# --- 3. Bucket Server Side Encryption --- resource "aws_s3_bucket_server_side_encryption_configuration" "tfstate" { bucket = aws_s3_bucket.tfstate.id rule { @@ -46,6 +42,7 @@ resource "aws_s3_bucket_server_side_encryption_configuration" "tfstate" { } } +# --- 4. Public Access Block --- resource "aws_s3_bucket_public_access_block" "tfstate" { bucket = aws_s3_bucket.tfstate.id block_public_acls = true @@ -54,8 +51,7 @@ resource "aws_s3_bucket_public_access_block" "tfstate" { restrict_public_buckets = true } -# ── DynamoDB table for state locking ───────────────────────────────────────── - +# --- 5. DynamoDB Table for State Locking --- resource "aws_dynamodb_table" "tfstate_lock" { name = "${var.project_name}-tfstate-lock" billing_mode = "PAY_PER_REQUEST" @@ -72,5 +68,11 @@ resource "aws_dynamodb_table" "tfstate_lock" { } } -output "tfstate_bucket" { value = aws_s3_bucket.tfstate.bucket } -output "tfstate_lock_table" { value = aws_dynamodb_table.tfstate_lock.name } +# --- Outputs --- +output "tfstate_bucket" { + value = aws_s3_bucket.tfstate.bucket +} + +output "tfstate_lock_table" { + value = aws_dynamodb_table.tfstate_lock.name +} \ No newline at end of file diff --git a/terraform/main.tf b/terraform/main.tf index 63b5114..813e313 100644 --- a/terraform/main.tf +++ b/terraform/main.tf @@ -20,10 +20,9 @@ terraform { # Remote state — S3 backend (run bootstrap first) backend "s3" { - bucket = "serene-stay-tfstate" - key = "demo/terraform.tfstate" + bucket = "serene-stay-tfstate-ramesh-98" # <- මෙන්න මේ නම විතරක් වෙනස් කරන්න + key = "dev/terraform.tfstate" region = "us-east-1" - encrypt = true dynamodb_table = "serene-stay-tfstate-lock" } } diff --git a/terraform/modules/database/main.tf b/terraform/modules/database/main.tf index 5cce46f..9aaf685 100644 --- a/terraform/modules/database/main.tf +++ b/terraform/modules/database/main.tf @@ -75,7 +75,7 @@ resource "aws_db_instance" "main" { multi_az = false # Backups - backup_retention_period = 3 + backup_retention_period = 1 backup_window = "03:00-04:00" maintenance_window = "Mon:04:00-Mon:05:00" copy_tags_to_snapshot = true diff --git a/terraform/modules/storage/main.tf b/terraform/modules/storage/main.tf index c552198..095e447 100644 --- a/terraform/modules/storage/main.tf +++ b/terraform/modules/storage/main.tf @@ -6,16 +6,15 @@ locals { name_prefix = "${var.project_name}-${var.environment}" - bucket_name = "${var.project_name}-uploads-${var.environment}" } -# ── S3 Bucket ───────────────────────────────────────────────────────────────── +# ── S3 Bucket (Uploads) ─────────────────────────────────────────────────────── resource "aws_s3_bucket" "uploads" { - bucket = local.bucket_name + bucket = "serene-stay-uploads-demo-ramesh-98" tags = { - Name = local.bucket_name + Name = "serene-stay-uploads-demo-ramesh-98" } } @@ -98,10 +97,10 @@ resource "aws_s3_bucket_cors_configuration" "uploads" { # ── Access Logging Bucket ───────────────────────────────────────────────────── resource "aws_s3_bucket" "access_logs" { - bucket = "${local.bucket_name}-access-logs" + bucket = "serene-stay-uploads-demo-access-logs-ramesh-98" tags = { - Name = "${local.bucket_name}-access-logs" + Name = "serene-stay-uploads-demo-access-logs-ramesh-98" } } @@ -143,4 +142,4 @@ resource "aws_s3_bucket_logging" "uploads" { bucket = aws_s3_bucket.uploads.id target_bucket = aws_s3_bucket.access_logs.id target_prefix = "s3-access-logs/" -} +} \ No newline at end of file