【问题标题】:In aws cloudformation, it giving error when I try to use !sub and !join function together在 aws cloudformation 中,当我尝试同时使用 !sub 和 !join 函数时出现错误
【发布时间】:2021-07-13 18:32:19
【问题描述】:

您好,我正在尝试关注 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*

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

【问题讨论】:

  • YAML 策略缩进很奇怪。
  • 你不能只使用 !Sub 而不使用 !Join(参见最后一个示例 here)吗?

标签: amazon-web-services amazon-cloudformation


【解决方案1】:

根据docs,Sub 有多种使用方式。

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

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

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

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

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

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

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

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

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

正如 cmets 中所述,您可以删除 !Join 并仅使用 !Sub

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

【讨论】:

    猜你喜欢
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-30
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    相关资源
    最近更新 更多