移除Terraform中NAT网关与弹性IP后Django应用无法启动
移除AWS NAT网关后Fargate Django应用部署异常问题
我正在尝试降低通过Terraform部署在AWS上的Django应用的基础设施成本。当前环境包含2个公有子网和2个私有子网,部署了NAT网关(NAT Gateways)和弹性IP(Elastic IPs),功能正常但成本较高。由于目前不需要私有网络的出站连接,我考虑移除NAT网关和弹性IP,对网络模块做了如下修改(注释掉NAT网关与弹性IP相关资源):
resource "aws_vpc" "main" { cidr_block = "10.1.0.0/16" enable_dns_support = true enable_dns_hostnames = true tags = merge( var.common_tags, tomap({ "Name" = "${var.prefix}-vpc" }) ) } resource "aws_internet_gateway" "main" { vpc_id = aws_vpc.main.id tags = merge( var.common_tags, tomap({ "Name" = "${var.prefix}-main" }) ) } ##################################################### # Public Subnets - Inbound/Outbound Internet Access # ##################################################### resource "aws_subnet" "public_a" { cidr_block = "10.1.1.0/24" map_public_ip_on_launch = true vpc_id = aws_vpc.main.id availability_zone = "${var.region}a" tags = merge( var.common_tags, tomap({ "Name" = "${var.prefix}-public-a" }) ) } resource "aws_route_table" "public_a" { vpc_id = aws_vpc.main.id tags = merge( var.common_tags, tomap({ "Name" = "${var.prefix}-public-a" }) ) } resource "aws_route_table_association" "public_a" { subnet_id = aws_subnet.public_a.id route_table_id = aws_route_table.public_a.id } resource "aws_route" "public_internet_access_a" { route_table_id = aws_route_table.public_a.id destination_cidr_block = "0.0.0.0/0" gateway_id = aws_internet_gateway.main.id } # resource "aws_eip" "public_a" { # vpc = true # tags = merge( # var.common_tags, # tomap({ "Name" = "${var.prefix}-public-a" }) # ) # } # resource "aws_nat_gateway" "public_a" { # allocation_id = aws_eip.public_a.id # subnet_id = aws_subnet.public_a.id # tags = merge( # var.common_tags, # tomap({ "Name" = "${var.prefix}-public-a" }) # ) # } resource "aws_subnet" "public_b" { cidr_block = "10.1.2.0/24" map_public_ip_on_launch = true vpc_id = aws_vpc.main.id availability_zone = "${var.region}b" tags = merge( var.common_tags, tomap({ "Name" = "${var.prefix}-public-b" }) ) } resource "aws_route_table" "public_b" { vpc_id = aws_vpc.main.id tags = merge( var.common_tags, tomap({ "Name" = "${var.prefix}-public-b" }) ) } resource "aws_route_table_association" "public_b" { subnet_id = aws_subnet.public_b.id route_table_id = aws_route_table.public_b.id } resource "aws_route" "public_internet_access_b" { route_table_id = aws_route_table.public_b.id destination_cidr_block = "0.0.0.0/0" gateway_id = aws_internet_gateway.main.id } # resource "aws_eip" "public_b" { # vpc = true # tags = merge( # var.common_tags, # tomap({ "Name" = "${var.prefix}-public-b" }) # ) # } # resource "aws_nat_gateway" "public_b" { # allocation_id = aws_eip.public_b.id # subnet_id = aws_subnet.public_b.id # tags = merge( # var.common_tags, # tomap({ "Name" = "${var.prefix}-public-b" }) # ) # } ################################################## # Private Subnets - Outbound internt access only # ################################################## resource "aws_subnet" "private_a" { cidr_block = "10.1.10.0/24" vpc_id = aws_vpc.main.id availability_zone = "${var.region}a" tags = merge( var.common_tags, tomap({ "Name" = "${var.prefix}-private-a" }) ) } resource "aws_route_table" "private_a" { vpc_id = aws_vpc.main.id tags = merge( var.common_tags, tomap({ "Name" = "${var.prefix}-private-a" }) ) } resource "aws_route_table_association" "private_a" { subnet_id = aws_subnet.private_a.id route_table_id = aws_route_table.private_a.id } # resource "aws_route" "private_a_internet_out" { # route_table_id = aws_route_table.private_a.id # nat_gateway_id = aws_nat_gateway.public_a.id # destination_cidr_block = "0.0.0.0/0" # } resource "aws_subnet" "private_b" { cidr_block = "10.1.11.0/24" vpc_id = aws_vpc.main.id availability_zone = "${var.region}b" tags = merge( var.common_tags, tomap({ "Name" = "${var.prefix}-private-b" }) ) } resource "aws_route_table" "private_b" { vpc_id = aws_vpc.main.id tags = merge( var.common_tags, tomap({ "Name" = "${var.prefix}-private-b" }) ) } resource "aws_route_table_association" "private_b" { subnet_id = aws_subnet.private_b.id route_table_id = aws_route_table.private_b.id } # resource "aws_route" "private_b_internet_out" { # route_table_id = aws_route_table.private_b.id # nat_gateway_id = aws_nat_gateway.public_b.id # destination_cidr_block = "0.0.0.0/0" # }
直接部署该配置时,访问端点/DNS会出现503错误,且CloudWatch中无容器日志;取消注释相关部分重新部署则一切正常。奇怪的是,若先部署带NAT的配置,再注释NAT相关部分并执行terraform plan和apply,服务却能正常运行。
内容的提问来源于stack exchange,提问作者bruvio
相关产品推荐
相关产品推荐

