Amazon cloudformation NAT实例的AWS CloudFormation-在LaunchConfig中禁用SourceDestinationCheck
尝试使用CF模板部署环境。目前,我们有一个NAT GW用于出境交通,运行良好。交通量很低,而且是零星的。我正在考虑使用NAT实例(更具成本效益)Amazon cloudformation NAT实例的AWS CloudFormation-在LaunchConfig中禁用SourceDestinationCheck,amazon-cloudformation,Amazon Cloudformation,尝试使用CF模板部署环境。目前,我们有一个NAT GW用于出境交通,运行良好。交通量很低,而且是零星的。我正在考虑使用NAT实例(更具成本效益) 部署NAT实例本身不是问题,但我正在尝试将其放入一个自动调整组中以实现恢复能力(如果一个实例失败,则应重新启动/重新创建该实例)。但是,我找不到任何选项来禁用NAT实例所需的源/目标检查。甚至可能吗?SourceDestCheck是实例的属性或实例。遗憾的是,两者都不允许设置 然而,由于您将NAT实例放在ASG中,因此您必须以某种方式管理自动更新路由表
部署NAT实例本身不是问题,但我正在尝试将其放入一个自动调整组中以实现恢复能力(如果一个实例失败,则应重新启动/重新创建该实例)。但是,我找不到任何选项来禁用NAT实例所需的源/目标检查。甚至可能吗?SourceDestCheck是实例的属性或实例。遗憾的是,两者都不允许设置 然而,由于您将NAT实例放在ASG中,因此您必须以某种方式管理自动更新路由表以使其工作。因此,无论您在启动、替换或重新定位NAT实例时使用什么进程(例如lambda)来更新路由表,您都可以使用此进程使用AWS SDK以编程方式禁用
SourceDestCheck
另一种选择是在LC或LT中使用
UserData
。SourceDestCheck
是一个实例的属性,在该解决方案中,NAT实例启动时将在其UserData中使用AWS CLI禁用自己的SourceDestCheck
。遗憾的是,两者都不允许设置
然而,由于您将NAT实例放在ASG中,因此您必须以某种方式管理自动更新路由表以使其工作。因此,无论您在启动、替换或重新定位NAT实例时使用什么进程(例如lambda)来更新路由表,您都可以使用此进程使用AWS SDK以编程方式禁用SourceDestCheck
另一种选择是在LC或LT中使用UserData
。在这个解决方案中,NAT实例在启动时将在其UserData中使用AWS CLI禁用自己的SourceDestCheck
,自发布正在工作的用户数据,我希望有人觉得它有用
UserData:
Fn::Base64: !Sub
- |
#!/bin/bash -xe
yum update -y aws-cfn-bootstrap
yum install -y jq
export EC2_INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id)
export ENI=$(aws ec2 --region ${AWS::Region} describe-network-interfaces \
| jq -Mr ".NetworkInterfaces[] | select(.Attachment.InstanceId==\"${!EC2_INSTANCE_ID}\") | .NetworkInterfaceId")
aws ec2 modify-network-interface-attribute --region ${AWS::Region} --network-interface-id ${!ENI} --no-source-dest-check
aws ec2 replace-route --region ${AWS::Region} --route-table-id ${PrivateRouteRef} \
--destination-cidr-block "0.0.0.0/0" --network-interface-id ${!ENI}
- PublicRouteRef: !Ref PublicRouteTable
PrivateRouteRef: !Ref PrivateRouteTable
自我发布的用户数据,这是工作,我希望有人觉得它有用
UserData:
Fn::Base64: !Sub
- |
#!/bin/bash -xe
yum update -y aws-cfn-bootstrap
yum install -y jq
export EC2_INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id)
export ENI=$(aws ec2 --region ${AWS::Region} describe-network-interfaces \
| jq -Mr ".NetworkInterfaces[] | select(.Attachment.InstanceId==\"${!EC2_INSTANCE_ID}\") | .NetworkInterfaceId")
aws ec2 modify-network-interface-attribute --region ${AWS::Region} --network-interface-id ${!ENI} --no-source-dest-check
aws ec2 replace-route --region ${AWS::Region} --route-table-id ${PrivateRouteRef} \
--destination-cidr-block "0.0.0.0/0" --network-interface-id ${!ENI}
- PublicRouteRef: !Ref PublicRouteTable
PrivateRouteRef: !Ref PrivateRouteTable
实际上,假设nat实例将获得适当的权限,那么使用UserData
禁用源/目的地检查并更新路由表似乎是合理的。谢谢,没问题。很高兴我能提供帮助。事实上,假设nat实例将获得适当的权限,使用UserData
禁用源/目的地检查并更新路由表似乎是合理的。谢谢,没问题。很高兴我能帮忙。