微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 aws cloudformation 中,当我尝试一起使用 !sub 和 !join 函数时出错

如何解决在 aws cloudformation 中,当我尝试一起使用 !sub 和 !join 函数时出错

嗨,我正在 cfn 模板中尝试以下操作:

ManagedPolicyArns:
        - !Ref kinesiss3logpolicy
      PermissionsBoundary: !Sub 
          - !Join [ '',[ 'arn:aws:iam::${AWS::AccountId}:policy/',!Ref AdminPolicy ] ]

其中 AdminPolicy 是一个参数。

我收到以下错误

*[error]ValidationError: Template error: One or more Fn::Sub intrinsic functions don't specify expected arguments. Specify a string as first argument,and an optional second argument to specify a mapping of values to replace in the string*

有人可以帮我解决这个问题吗?

解决方法

根据 docs 有多种使用 Sub 的方法。

您必须提供到 Sub 的值映射,除非您仅使用可直接替换的参数。

您已将 !Sub 的参数定义为列表,因为您使用的是 -

PermissionsBoundary: !Sub 
    - !Join [ '',[ 'arn:aws:iam::${AWS::AccountId}:policy/',!Ref AdminPolicy ] ]

这不起作用。如果您使用 Sub 的列表,则必须提供值映射。

那么您应该在一行中使用 !Sub,因为您只使用伪参数和您自己的参数。

那你就得这样用了,但是这个有语法错误。但想法是一样的。

PermissionsBoundary: !Sub !Join [ '',!Ref AdminPolicy ] ]

然后您可以使用 Fn 表示法,而不是速记表示法。

PermissionsBoundary: { Fn::Sub: {Fn::Join: [ '',!Ref AdminPolicy ] ] } }

正如评论中提到的,您可以删除 !Join 并仅使用 !Sub

PermissionsBoundary: !Sub "arn:aws:iam::${AWS::AccountId}:policy/${AdminPolicy}"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。