feat(terraform): agregar lifecycle prevent_destroy a recursos críticos
- VPC: prevent_destroy = true - EC2: prevent_destroy + ignore_changes ami - RDS: prevent_destroy = true - S3 frontend/artifacts: prevent_destroy = true - Prevenir destrucción accidental de infraestructura PROD
This commit is contained in:
+103
-10
@@ -18,6 +18,11 @@ resource "aws_vpc" "main" {
|
|||||||
tags = {
|
tags = {
|
||||||
Name = "${var.project_name}-vpc-${var.environment}"
|
Name = "${var.project_name}-vpc-${var.environment}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lifecycle {
|
||||||
|
prevent_destroy = true
|
||||||
|
ignore_changes = [tags]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
resource "aws_internet_gateway" "main" {
|
resource "aws_internet_gateway" "main" {
|
||||||
@@ -81,12 +86,21 @@ resource "aws_route_table" "public" {
|
|||||||
tags = {
|
tags = {
|
||||||
Name = "${var.project_name}-public-rt-${var.environment}"
|
Name = "${var.project_name}-public-rt-${var.environment}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lifecycle {
|
||||||
|
prevent_destroy = true
|
||||||
|
ignore_changes = [tags]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
resource "aws_route_table_association" "public" {
|
resource "aws_route_table_association" "public" {
|
||||||
count = length(aws_subnet.public)
|
count = length(aws_subnet.public)
|
||||||
subnet_id = aws_subnet.public[count.index].id
|
subnet_id = aws_subnet.public[count.index].id
|
||||||
route_table_id = aws_route_table.public.id
|
route_table_id = aws_route_table.public.id
|
||||||
|
|
||||||
|
lifecycle {
|
||||||
|
prevent_destroy = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
resource "aws_route_table" "private" {
|
resource "aws_route_table" "private" {
|
||||||
@@ -100,12 +114,21 @@ resource "aws_route_table" "private" {
|
|||||||
tags = {
|
tags = {
|
||||||
Name = "${var.project_name}-private-rt-${var.environment}"
|
Name = "${var.project_name}-private-rt-${var.environment}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lifecycle {
|
||||||
|
prevent_destroy = true
|
||||||
|
ignore_changes = [tags]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
resource "aws_route_table_association" "private" {
|
resource "aws_route_table_association" "private" {
|
||||||
count = length(aws_subnet.private)
|
count = length(aws_subnet.private)
|
||||||
subnet_id = aws_subnet.private[count.index].id
|
subnet_id = aws_subnet.private[count.index].id
|
||||||
route_table_id = aws_route_table.private.id
|
route_table_id = aws_route_table.private.id
|
||||||
|
|
||||||
|
lifecycle {
|
||||||
|
prevent_destroy = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# -------------------------------------------------------------------------------
|
# -------------------------------------------------------------------------------
|
||||||
@@ -196,6 +219,8 @@ resource "aws_security_group" "ec2_api" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
lifecycle {
|
lifecycle {
|
||||||
|
prevent_destroy = true
|
||||||
|
ignore_changes = [tags]
|
||||||
create_before_destroy = true
|
create_before_destroy = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -226,6 +251,8 @@ resource "aws_security_group" "rds" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
lifecycle {
|
lifecycle {
|
||||||
|
prevent_destroy = true
|
||||||
|
ignore_changes = [tags]
|
||||||
create_before_destroy = true
|
create_before_destroy = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -250,12 +277,21 @@ resource "aws_iam_role" "ec2_role" {
|
|||||||
tags = {
|
tags = {
|
||||||
Name = "${var.project_name}-ec2-role"
|
Name = "${var.project_name}-ec2-role"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lifecycle {
|
||||||
|
prevent_destroy = true
|
||||||
|
ignore_changes = [tags]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
resource "aws_iam_role_policy" "ec2_policy" {
|
resource "aws_iam_role_policy" "ec2_policy" {
|
||||||
name = "${var.project_name}-ec2-policy-${var.environment}"
|
name = "${var.project_name}-ec2-policy-${var.environment}"
|
||||||
role = aws_iam_role.ec2_role.id
|
role = aws_iam_role.ec2_role.id
|
||||||
|
|
||||||
|
lifecycle {
|
||||||
|
prevent_destroy = true
|
||||||
|
}
|
||||||
|
|
||||||
policy = jsonencode({
|
policy = jsonencode({
|
||||||
Version = "2012-10-17"
|
Version = "2012-10-17"
|
||||||
Statement = [
|
Statement = [
|
||||||
@@ -314,6 +350,11 @@ resource "aws_iam_instance_profile" "ec2_profile" {
|
|||||||
tags = {
|
tags = {
|
||||||
Name = "${var.project_name}-ec2-profile"
|
Name = "${var.project_name}-ec2-profile"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lifecycle {
|
||||||
|
prevent_destroy = true
|
||||||
|
ignore_changes = [tags]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# -------------------------------------------------------------------------------
|
# -------------------------------------------------------------------------------
|
||||||
@@ -344,14 +385,12 @@ resource "aws_instance" "api" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
lifecycle {
|
lifecycle {
|
||||||
|
prevent_destroy = true
|
||||||
ignore_changes = [
|
ignore_changes = [
|
||||||
|
ami,
|
||||||
iam_instance_profile,
|
iam_instance_profile,
|
||||||
user_data,
|
user_data,
|
||||||
tags["AutoStart"],
|
tags,
|
||||||
tags["AutoStop"],
|
|
||||||
tags["Schedule"],
|
|
||||||
tags["ScheduleHours"],
|
|
||||||
tags["ScheduleTimezone"],
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -366,6 +405,11 @@ resource "aws_db_subnet_group" "rds" {
|
|||||||
tags = {
|
tags = {
|
||||||
Name = "${var.project_name}-rds-subnet-group"
|
Name = "${var.project_name}-rds-subnet-group"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lifecycle {
|
||||||
|
prevent_destroy = true
|
||||||
|
ignore_changes = [tags]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
resource "aws_db_instance" "main" {
|
resource "aws_db_instance" "main" {
|
||||||
@@ -396,12 +440,9 @@ resource "aws_db_instance" "main" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
lifecycle {
|
lifecycle {
|
||||||
|
prevent_destroy = true
|
||||||
ignore_changes = [
|
ignore_changes = [
|
||||||
tags["AutoStart"],
|
tags,
|
||||||
tags["AutoStop"],
|
|
||||||
tags["Schedule"],
|
|
||||||
tags["ScheduleHours"],
|
|
||||||
tags["ScheduleTimezone"],
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -415,6 +456,11 @@ resource "aws_s3_bucket" "frontend" {
|
|||||||
tags = {
|
tags = {
|
||||||
Name = "${var.project_name}-frontend"
|
Name = "${var.project_name}-frontend"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lifecycle {
|
||||||
|
prevent_destroy = true
|
||||||
|
ignore_changes = [tags]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
resource "aws_s3_bucket_versioning" "frontend" {
|
resource "aws_s3_bucket_versioning" "frontend" {
|
||||||
@@ -423,6 +469,10 @@ resource "aws_s3_bucket_versioning" "frontend" {
|
|||||||
versioning_configuration {
|
versioning_configuration {
|
||||||
status = "Enabled"
|
status = "Enabled"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lifecycle {
|
||||||
|
prevent_destroy = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
resource "aws_s3_bucket_public_access_block" "frontend" {
|
resource "aws_s3_bucket_public_access_block" "frontend" {
|
||||||
@@ -432,6 +482,10 @@ resource "aws_s3_bucket_public_access_block" "frontend" {
|
|||||||
block_public_policy = true
|
block_public_policy = true
|
||||||
ignore_public_acls = true
|
ignore_public_acls = true
|
||||||
restrict_public_buckets = true
|
restrict_public_buckets = true
|
||||||
|
|
||||||
|
lifecycle {
|
||||||
|
prevent_destroy = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
resource "aws_s3_bucket_website_configuration" "frontend" {
|
resource "aws_s3_bucket_website_configuration" "frontend" {
|
||||||
@@ -444,6 +498,10 @@ resource "aws_s3_bucket_website_configuration" "frontend" {
|
|||||||
error_document {
|
error_document {
|
||||||
key = "index.html"
|
key = "index.html"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lifecycle {
|
||||||
|
prevent_destroy = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
resource "aws_s3_bucket" "artifacts" {
|
resource "aws_s3_bucket" "artifacts" {
|
||||||
@@ -452,6 +510,10 @@ resource "aws_s3_bucket" "artifacts" {
|
|||||||
tags = {
|
tags = {
|
||||||
Name = "${var.project_name}-artifacts"
|
Name = "${var.project_name}-artifacts"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lifecycle {
|
||||||
|
prevent_destroy = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
resource "aws_s3_bucket_versioning" "artifacts" {
|
resource "aws_s3_bucket_versioning" "artifacts" {
|
||||||
@@ -460,6 +522,10 @@ resource "aws_s3_bucket_versioning" "artifacts" {
|
|||||||
versioning_configuration {
|
versioning_configuration {
|
||||||
status = "Enabled"
|
status = "Enabled"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lifecycle {
|
||||||
|
prevent_destroy = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
resource "aws_s3_bucket_public_access_block" "artifacts" {
|
resource "aws_s3_bucket_public_access_block" "artifacts" {
|
||||||
@@ -469,6 +535,10 @@ resource "aws_s3_bucket_public_access_block" "artifacts" {
|
|||||||
block_public_policy = true
|
block_public_policy = true
|
||||||
ignore_public_acls = true
|
ignore_public_acls = true
|
||||||
restrict_public_buckets = true
|
restrict_public_buckets = true
|
||||||
|
|
||||||
|
lifecycle {
|
||||||
|
prevent_destroy = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# -------------------------------------------------------------------------------
|
# -------------------------------------------------------------------------------
|
||||||
@@ -480,6 +550,10 @@ resource "aws_cloudfront_origin_access_control" "frontend" {
|
|||||||
origin_access_control_origin_type = "s3"
|
origin_access_control_origin_type = "s3"
|
||||||
signing_behavior = "always"
|
signing_behavior = "always"
|
||||||
signing_protocol = "sigv4"
|
signing_protocol = "sigv4"
|
||||||
|
|
||||||
|
lifecycle {
|
||||||
|
prevent_destroy = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
resource "aws_s3_bucket_policy" "frontend" {
|
resource "aws_s3_bucket_policy" "frontend" {
|
||||||
@@ -504,6 +578,10 @@ resource "aws_s3_bucket_policy" "frontend" {
|
|||||||
})
|
})
|
||||||
|
|
||||||
depends_on = [aws_s3_bucket_public_access_block.frontend]
|
depends_on = [aws_s3_bucket_public_access_block.frontend]
|
||||||
|
|
||||||
|
lifecycle {
|
||||||
|
prevent_destroy = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# -------------------------------------------------------------------------------
|
# -------------------------------------------------------------------------------
|
||||||
@@ -519,6 +597,8 @@ resource "aws_acm_certificate" "main" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
lifecycle {
|
lifecycle {
|
||||||
|
prevent_destroy = true
|
||||||
|
ignore_changes = [tags]
|
||||||
create_before_destroy = true
|
create_before_destroy = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -536,6 +616,10 @@ resource "aws_acm_certificate_validation" "main" {
|
|||||||
provider = aws.us_east_1
|
provider = aws.us_east_1
|
||||||
certificate_arn = aws_acm_certificate.main.arn
|
certificate_arn = aws_acm_certificate.main.arn
|
||||||
validation_record_fqdns = [aws_route53_record.cert_validation.fqdn]
|
validation_record_fqdns = [aws_route53_record.cert_validation.fqdn]
|
||||||
|
|
||||||
|
lifecycle {
|
||||||
|
prevent_destroy = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# -------------------------------------------------------------------------------
|
# -------------------------------------------------------------------------------
|
||||||
@@ -555,6 +639,10 @@ resource "aws_route53_record" "main" {
|
|||||||
name = var.domain_name
|
name = var.domain_name
|
||||||
type = "A"
|
type = "A"
|
||||||
|
|
||||||
|
lifecycle {
|
||||||
|
prevent_destroy = true
|
||||||
|
}
|
||||||
|
|
||||||
alias {
|
alias {
|
||||||
name = aws_cloudfront_distribution.main.domain_name
|
name = aws_cloudfront_distribution.main.domain_name
|
||||||
zone_id = aws_cloudfront_distribution.main.hosted_zone_id
|
zone_id = aws_cloudfront_distribution.main.hosted_zone_id
|
||||||
@@ -648,4 +736,9 @@ resource "aws_cloudfront_distribution" "main" {
|
|||||||
tags = {
|
tags = {
|
||||||
Name = "${var.project_name}-cdn"
|
Name = "${var.project_name}-cdn"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lifecycle {
|
||||||
|
prevent_destroy = true
|
||||||
|
ignore_changes = [tags]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user