在 UserData 与 Auto Scaling Group 结合使用时,“aws ec2 associate-address”不起作用

在 UserData 与 Auto Scaling Group 结合使用时,“aws ec2 associate-address”不起作用

我正在尝试使用 AWS CloudFormation 通过 创建 NAT 实例,并且在通过使用AutoScalingGroup创建实例期间尝试关联 EIP 时遇到问题。LaunchConfigurationUserData

以下是我的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。falseLaunchConfiguration

谢谢

答案1

看起来设置AssociatePublicIpAddress确实会阻止 EIP 在执行false期间通过 CLI 关联。UserData

抓取一个公网 IP 来替换它似乎有点浪费,但解决方案是设置AssociatePublicIpAddresstrue

相关内容