我有一个通过Zappa部署在AWS Lambda上的Django应用,我的应用需要与公共互联网通信,因此我需要使用NAT实例。我使用的是NAT实例,因为它比使用免费套餐的NAT网关便宜约10倍。缺点是,与NAT网关不同,NAT实例需要实际维护,我不确定它需要哪种维护。我想了解保持服务器正常运行所需要做的事情。
我可以做些什么来确保这一点?
这是我的AWS架构:
以下所有内容都在我的VPC中。我在ca-central-1a中有1个子网,在ca-central-1b中有1个子网。在路由表中,两个子网都指向我的NAT实例。我在ca-central-1b中有第三个子网,并且在路由表中它指向Internet网关。我的NAT实例位于ca-central-1b中。
我的NAT实例安全组NATSG在ca-central-1a和ca-central-1b中都有来自我两个子网的HTTP和HTTPS入站,出站到0.0.0.0/0。 我是否应该在ca-central-1a中创建另一个NAT实例,并使其仅从ca-central-1a中的子网入站,即每个子网1个NAT实例?会更健康/更安全吗?
其他信息:
我禁用了源/目标检查。这是个好主意吗?
对于我的AMI,我选择了最近的社区AMI amzn-ami-vpc-nat,并创建了一个具有我的NAT实例的自动缩放组。它只有1个实例,如果其中只有1个实例,
答案 0 :(得分:1)
维护NAT实例对于安全更新,安全组和实例故障是必需的。
不必在每个子网中都放置NAT实例。您可以通过单个NAT实例连接多个实例。另外,建议将NAT实例放置在公共子网中。
源/目的地检查,这表明该实例必须是其发送或接收的流量的源或目的地。因此,必须禁用NAT实例的源/目的地检查,因为NAT实例不是发送或接收流量的源或目的地。它
只是充当将流量发送到私有实例的中介。
下面的链接详细介绍了禁用源/目标检查
https://docs.aws.amazon.com/vpc/latest/userguide/VPC_NAT_Instance.html#EIP_Disable_SrcDestCheck
EC2_INSTANCE_ID=`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id` EC2_AVAIL_ZONE=`wget -q -O - http://169.254.169.254/latest/meta-data/placement/availability-zone` EC2_REGION=`echo \$EC2_AVAIL_ZONE\ | sed -r 's/.{2}$//'` echo "Region:" $EC2_REGION aws ec2 modify-instance-attribute --instance-id $EC2_INSTANCE_ID --source-dest-check "{\"Value\": false}" --region $EC2_REGION rc=$?; if [[ $rc != 0 ]]; then echo "Failure:" $rc; exit $rc; fi echo "Success"
答案 1 :(得分:1)
抱歉,@ Rony Azrak的回复延迟。由于您的关注点是在启动后配置实例详细信息,因此我们假设您正在考虑更新用户数据脚本,这样做的可能方法是通过外壳运行脚本。
只需将给定脚本保存在.sh文件中,例如a.sh,然后通过命令执行即可,即为
#sh a.sh
。
但是此更改仅特定于实例,不会反映到下一个即将到来的实例(如果您正在使用它,则可能会通过自动缩放启动)。
为此,由于无法编辑现有的启动配置,因此需要通过在“高级详细信息”部分添加脚本来创建具有所需修改的新启动配置。最终导致启动新实例。
关于自动缩放,我们建议您使用自动缩放,它将自动执行启动实例的任务。您只需为使用的资源付费就不会产生任何额外费用。