Amazon web services 需要使用aws cli或api从命令行获取用于部署ec2的cloudformation模板的名称

Amazon web services 需要使用aws cli或api从命令行获取用于部署ec2的cloudformation模板的名称,amazon-web-services,amazon-ec2,command-line-interface,amazon-cloudformation,Amazon Web Services,Amazon Ec2,Command Line Interface,Amazon Cloudformation,我使用cloudformation模板创建了一个ec2实例。除了标记之外,还有什么方法可以通过命令行获得cloudformation模板的名称吗 方法1:标记 标记将是获取数据的最干净、最简单的方法。您确实需要做一些预先的工作,这对现有实例不起作用,但它将是快速和可靠的 方法2:交叉引用 如果您有实例id,可以要求Cloudformation搜索其同级堆栈资源,从中可以推断堆栈名称、id等 c = boto.cloudformation.connect_to_region('us-east-1'

我使用cloudformation模板创建了一个ec2实例。除了标记之外,还有什么方法可以通过命令行获得cloudformation模板的名称吗

方法1:标记

标记将是获取数据的最干净、最简单的方法。您确实需要做一些预先的工作,这对现有实例不起作用,但它将是快速和可靠的

方法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
如果实例不是堆栈的一部分,您将得到i-830e2869不存在的
堆栈
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
,以报告它们的成功创建,其中一个参数是堆栈名


如果有人编辑用户数据,它将失败,但尽管感觉有点黑客,它似乎相当可靠。我仍然不建议在prod中使用它,因为它对脚本参数的依赖很脆弱。

找到了这个解决方案,没有经过彻底的测试-但在大多数情况下都有效:命令行命令:GET | grep'cfn init-s'| awk'{print$3}