NAT实例维护
NAT Instance maintenance
我通过 Zappa 在 AWS Lambda 上部署了一个 Django 应用程序,我的应用程序需要与 public 互联网通信,因此我需要使用 NAT 实例。我正在使用 NAT 实例,因为它比使用免费套餐的 NAT 网关便宜大约 10 倍。缺点是与 NAT 网关不同,NAT 实例需要实际维护,我不确定它需要什么类型的维护。我想了解我需要做些什么来保持我的服务器 运行 健康。
我可以做些什么来确保这一点?
这是我的 AWS 架构:
以下都在我的VPC中。我在 ca-central-1a 中有 1 个子网,在 ca-central-1b 中有 1 个子网。在路由 table 中,两个子网都指向我的 NAT 实例。我在 ca-central-1b 中有第三个子网,在路由 table 中它指向一个互联网网关。我的 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 实例?那会是healthier/safer吗?
补充信息:
我禁用了 Source/dest 检查。这是个好主意吗?
对于我的 AMI,我选择了最近的社区 AMI amzn-ami-vpc-nat,并创建了一个包含我的 NAT 实例的自动缩放组。它只有 1 个实例,如果其中只有 1 个实例,Auto Scale Group 有什么意义吗?我不确定我是否正确使用了 Auto Scale Group,我只是创建了它但还没有配置任何东西。
安全更新、安全组和实例故障需要维护 NAT 实例。
没有必要在每个子网中都放置 NAT 实例。您可以通过单个 NAT 实例连接多个实例。此外,建议将 NAT 实例放置在 public 子网中。
source/destination 默认情况下为每个 EC2 实例启用检查,这表明该实例必须是它发送或接收的流量的来源或目的地。因此,必须为 NAT 实例禁用 source/destination 检查,因为 NAT 实例不是发送或接收流量的源或目标。它
只是充当将流量发送到私有实例的中间人。
下面link给出了禁用Source/Destination检查的详细说明
https://docs.aws.amazon.com/vpc/latest/userguide/VPC_NAT_Instance.html#EIP_Disable_SrcDestCheck
- 将所需容量设置为 1 将始终保留您的 1 个 NAT 实例
向上。但问题是当 NAT 实例终止时,自动缩放
组将启动相应的 NAT 实例,该实例具有
默认为 Source/destination 'enable'。我们必须让它禁用
手动,还有在路线 table 中由
选择目标作为 nat-instance-id 不会得到改变和路由
Table 将指向已终止的实例。要得到
为新启动的 NAT 实例禁用了 SourceDestCheck 属性
可以从实例的用户数据启动它。
这是一个示例 shell 脚本。
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"
抱歉,@Rony Azrak 的延迟回复。由于您关心的是在启动后配置实例详细信息,我们假设您正在考虑更新用户数据脚本,这样做的可能方法是通过 运行 脚本 shell。
只需要将给定的脚本保存在 .sh 文件中说一些 a.sh 并通过命令 as
#sh a.sh
执行它。
但此更改仅特定于实例,它不会反映下一个即将到来的实例,如果您正在使用它,它可能会通过自动缩放启动。
为此,您需要通过在“高级详细信息”部分添加脚本来创建一个需要修改的新启动配置,因为无法编辑现有的启动配置。这最终会导致启动一个新实例。
关于 Auto scaling,我们建议您使用 auto scaling,它将自动执行启动实例的任务。它不会产生任何额外费用,您只需为您使用的资源支付费用。
我通过 Zappa 在 AWS Lambda 上部署了一个 Django 应用程序,我的应用程序需要与 public 互联网通信,因此我需要使用 NAT 实例。我正在使用 NAT 实例,因为它比使用免费套餐的 NAT 网关便宜大约 10 倍。缺点是与 NAT 网关不同,NAT 实例需要实际维护,我不确定它需要什么类型的维护。我想了解我需要做些什么来保持我的服务器 运行 健康。
我可以做些什么来确保这一点?
这是我的 AWS 架构:
以下都在我的VPC中。我在 ca-central-1a 中有 1 个子网,在 ca-central-1b 中有 1 个子网。在路由 table 中,两个子网都指向我的 NAT 实例。我在 ca-central-1b 中有第三个子网,在路由 table 中它指向一个互联网网关。我的 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 实例?那会是healthier/safer吗?
补充信息:
我禁用了 Source/dest 检查。这是个好主意吗?
对于我的 AMI,我选择了最近的社区 AMI amzn-ami-vpc-nat,并创建了一个包含我的 NAT 实例的自动缩放组。它只有 1 个实例,如果其中只有 1 个实例,Auto Scale Group 有什么意义吗?我不确定我是否正确使用了 Auto Scale Group,我只是创建了它但还没有配置任何东西。
安全更新、安全组和实例故障需要维护 NAT 实例。
没有必要在每个子网中都放置 NAT 实例。您可以通过单个 NAT 实例连接多个实例。此外,建议将 NAT 实例放置在 public 子网中。
source/destination 默认情况下为每个 EC2 实例启用检查,这表明该实例必须是它发送或接收的流量的来源或目的地。因此,必须为 NAT 实例禁用 source/destination 检查,因为 NAT 实例不是发送或接收流量的源或目标。它 只是充当将流量发送到私有实例的中间人。
下面link给出了禁用Source/Destination检查的详细说明
https://docs.aws.amazon.com/vpc/latest/userguide/VPC_NAT_Instance.html#EIP_Disable_SrcDestCheck
- 将所需容量设置为 1 将始终保留您的 1 个 NAT 实例
向上。但问题是当 NAT 实例终止时,自动缩放
组将启动相应的 NAT 实例,该实例具有
默认为 Source/destination 'enable'。我们必须让它禁用
手动,还有在路线 table 中由
选择目标作为 nat-instance-id 不会得到改变和路由
Table 将指向已终止的实例。要得到
为新启动的 NAT 实例禁用了 SourceDestCheck 属性
可以从实例的用户数据启动它。
这是一个示例 shell 脚本。
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"
抱歉,@Rony Azrak 的延迟回复。由于您关心的是在启动后配置实例详细信息,我们假设您正在考虑更新用户数据脚本,这样做的可能方法是通过 运行 脚本 shell。
只需要将给定的脚本保存在 .sh 文件中说一些 a.sh 并通过命令 as
#sh a.sh
执行它。
但此更改仅特定于实例,它不会反映下一个即将到来的实例,如果您正在使用它,它可能会通过自动缩放启动。
为此,您需要通过在“高级详细信息”部分添加脚本来创建一个需要修改的新启动配置,因为无法编辑现有的启动配置。这最终会导致启动一个新实例。
关于 Auto scaling,我们建议您使用 auto scaling,它将自动执行启动实例的任务。它不会产生任何额外费用,您只需为您使用的资源支付费用。