【发布时间】:2017-05-05 21:25:59
【问题描述】:
使用 CloudFormation 创建堆栈时,我收到此错误:
堆栈更新错误:需要功能:[CAPABILITY_IAM]
我找不到用于将 CAPABILITIES_IAM 添加到 CloudFormation 配置的模板。
解决CAPABILITIES_IAM 错误的选项有哪些?
【问题讨论】:
标签: amazon-web-services amazon-cloudformation amazon-iam
使用 CloudFormation 创建堆栈时,我收到此错误:
堆栈更新错误:需要功能:[CAPABILITY_IAM]
我找不到用于将 CAPABILITIES_IAM 添加到 CloudFormation 配置的模板。
解决CAPABILITIES_IAM 错误的选项有哪些?
【问题讨论】:
标签: amazon-web-services amazon-cloudformation amazon-iam
事实证明,您需要在堆栈创建的最后一个屏幕上选中一个框。如果您使用控制台,则在“创建堆栈”按钮上方有一个框,要求您确认您希望允许 Cloudformation 修改 IAM 内容。当然,您可以在没有确认的情况下创建堆栈,这将导致堆栈失败并出现 CAPABILITY_IAM 错误(或另一个错误,如果需要不同的功能)。
在 CodePipeline CloudFormation 中,您可以像这样添加它以允许在部署操作中执行创建的 change_set:
Configuration:
StackName: !Ref GitHubRepository
ActionMode: CHANGE_SET_REPLACE
Capabilities: CAPABILITY_NAMED_IAM
RoleArn: arn:aws:iam::818272543125:role/events-list-codepiplinerole
ChangeSetName: !Join ["",[!Ref GitHubRepository, "-changeset"]]
TemplatePath: MyAppBuild::sam_post.yaml
在 aws cli 中追加
--capabilities CAPABILITY_IAM
或
--capabilities CAPABILITY_NAMED_IAM
你的命令是这样的:
aws cloudformation create-stack --stack-name message-store --template-body file://bucket_with_keys.yaml --parameters file://cfg_bucket_with_keys.json --capabilities CAPABILITY_NAMED_IAM
这不适用于 cloudformation --validate-template,因为它实际上并未创建资源。
【讨论】:
如果您使用的是 AWS CLI,则可以向 aws cloudformation create-stack 命令添加一个额外参数,明确声明您希望提供这些功能。
(这是在此处的另一个答案中勾选复选框的 CLI 等效项)。
参数是--capabilities CAPABILITY_IAM,所以你的命令看起来像:
aws cloudformation create-stack --stack-name $STACK_NAME --capabilities CAPABILITY_IAM
希望有帮助
【讨论】:
validate-template??我的完整命令:aws cloudformation validate-template --template-body file://sqs-template.yml --capabilities CAPABILITY_IAM
"CapabilitiesReason": "The following resource(s) require capabilities: [AWS::IAM::Role]",则表示您的模板有效,您必须在创建堆栈时指定返回功能。 Source