重要的
我正在动态构建 TemplateURL。
"TemplateURL" : { "Fn::Join" : ["", [ { "Ref" : "TemplateURL"}, "substack.template" ]] }
我正在 AWS 控制台中运行 CloudFormation 模板。
直接运行 Stack
我从使用 IAM 资源的模板开始,控制台提示我在直接运行堆栈时确认 IAM 功能。
小时候玩 Stack
然后我尝试从父堆栈调用相同的堆栈,但没有收到相同的提示。
然后堆栈失败并显示以下消息:
需要功能:[CAPABILITY_IAM]
研究
文档表明我可以通过多种方式运行 CF 脚本。有很多关于 CLI/API 和提供功能参数的文档,但似乎没有关于如何确保在通过控制台运行时应用它的信息。
http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html
AWS CloudFormation 模板中的 IAM 资源
- CF 控制台
- 命令行界面
- API
我做过的事/我的想法
我目前已通过论坛提出了一个问题,但尚未得到回复: https://forums.aws.amazon.com/thread.jspa?threadID=139160
我怀疑这是控制台中的一个错误,因为似乎没有任何关于如何通过控制台改变行为的文档,而且据我所知,这应该可以工作。
有人遇到过同样的问题吗,或者可以报告说它对他们来说运行良好?
答案1
答案2
如果您使用的是 CLI 或 boto,则可以包含“capabilities”参数。这将接受一个列表,但目前唯一接受的条目是“CAPABILITY_IAM”。
cf.update_stack(..., capabilities=['CAPABILITY_IAM'])
或者
cf.create_stack(..., capabilities=['CAPABILITY_IAM'])
这授予整个堆栈树 IAM 创建权限。
答案3
在动态构建 TemplateURL 时,验证检查器无法提前查看是否存在 IAM 资源,这就是它不会要求 IAM_CAPABILITIES 的原因。
解决此问题的最佳方法(目前)是在主模板中创建一个虚拟 IAM 资源来获取提示。