我使用了cloudformation模板来创建ec2实例。除了标记之外,还有什么方法可以通过命令行获取 cloudformation 模板的名称吗?
最佳答案
方法一:标记
标记将是获取该数据的最干净、最简单的方法。您确实需要做一些预先工作,这不适用于现有实例,但它将快速且可靠。
方法2:交叉引用
如果您有实例 ID,您可以要求 Cloudformation 搜索其同级堆栈资源,从中您可以推断出堆栈名称、ID 等。
c = boto.cloudformation.connect_to_region('us-east-1')
c.describe_stack_resources(physical_resource_id='i-830e2869')[0].stack_name
如果实例不是堆栈的一部分,您将收到Stack for i-830e2869 does not exit
400 错误。
方法3:用户数据
我承认 - 这非常有创意,所以对你的想法表示赞赏。
curl http://169.254.169.254/latest/user-data | grep 'cfn-init -s' | awk '{print $3}'
这样做的原因是 Cloudformation 创建的实例需要运行 /opt/aws/bin/cfn-init
来安装软件包和 /opt/aws/bin/cfn-signal
以报告其成功创建,参数之一是堆栈名称。
如果有人编辑用户数据,它就会失败,但尽管感觉有点hacky,但它看起来相当可靠。我仍然不建议在产品中使用它,因为它对脚本参数的依赖很脆弱。
关于amazon-web-services - 需要使用 aws cli 或 api 从命令行获取用于部署 ec2 的 cloudformation 模板的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22516595/