我正在尝试使用 AWS CloudFormation 通过 创建 NAT 实例,并且在通过使用AutoScalingGroup
创建实例期间尝试关联 EIP 时遇到问题。LaunchConfiguration
UserData
以下是我的UserData
(经过剪辑和编辑,CloudFormation 模板是通过 Ansible 创建的,因此是 Jinja2 样式的变量),
"UserData": {
"Fn::Base64": {
"Fn::Join": [
"",
[
"#!/bin/bash\n",
"\n",
"# Associate EIP address\n",
"aws ec2 associate-address --instance-id `curl http://169.254.169.254/latest/meta-data/instance-id` --allocation-id {{ nat_eip_allocation_id }} --region {{ aws_region }}\n"
]
]
}
}
真正奇怪的是上面的代码在实例上输出以下内容(我将输出传输到日志文件),
{
"AssociationId": "eipassoc-b33d5ad7",
"return": "true"
}
但是,当我进入我的 AWS 控制台时,我在任何地方都找不到这种关联,EIP 未被分配,并且 EC2 实例没有 EIP,或者任何公共 IP。
如果我手动关联它,它可以正常工作。
我是不是忽略了某些非常明显的东西?是不是因为我在 中AssociatePublicIpAddress
设置为了?我认为我需要这样做,因为我不想要自动分配 IP。false
LaunchConfiguration
谢谢
答案1
看起来设置AssociatePublicIpAddress
确实会阻止 EIP 在执行false
期间通过 CLI 关联。UserData
抓取一个公网 IP 来替换它似乎有点浪费,但解决方案是设置AssociatePublicIpAddress
为true
。