CloudForm Combine Sub - Import - Sub

问题描述 投票:0回答:1

我试图创建一个参数,并希望将 !Sub 和 !Import多次结合起来。

Parameters:
  Environment:
    Description: Stackname of Environment
    Type: String

Resources:

  IAMRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Statement:
        - Effect: Allow
          Principal:
            Service: '*'
          Action: ['sts:AssumeRole']
      Path: /
      Policies:
      - PolicyName: S3Files
        PolicyDocument:
          Statement:
          - Sid: 'S3Files'
            Effect: Allow
            Action:
              - 's3:DeleteObjectTagging'
              - 's3:GetObjectRetention'
              - 's3:ListMultipartUploadParts'
              - 's3:PutObject'
              - 's3:GetObjectAcl'
              - 's3:GetObject'
              - 's3:AbortMultipartUpload'
              - 's3:PutObjectRetention'
              - 's3:GetObjectVersionAcl'
              - 's3:GetObjectTagging'
              - 's3:PutObjectTagging'
              - 's3:DeleteObject'
              - 's3:PutObjectAcl'
              - 's3:GetObjectVersion'
            Resource: !Sub
                - '${ARN}/*'
                - ARN: 
                  Fn::ImportValue: !Sub ${Environment}:S3:Arn

根据文档,这应该是可能的,但不幸的是,我总是得到一个错误信息。Template contains errors.: [/Resources/IAMRole/Type/Policies/0/PolicyDocument/Statement/0/Resource/Fn::Sub/1/ARN] 'null' values are not allowed in templates

UseCase如何工作?

amazon-cloudformation
1个回答
3
投票

有一个空间问题,在 Resource 节。

Resource: !Sub
    - '${ARN}/*'
    - ARN: 
      Fn::ImportValue: !Sub ${Environment}:S3:Arn

它应该是

Resource: !Sub
    - '${ARN}/*'
    - ARN: 
        Fn::ImportValue: !Sub ${Environment}:S3:Arn

注意: Fn 开始于 NARN 而不是 A.

解释。缩进的第一行是 Fn::ImportValue 被认为是一个输入,用于 !Sub的值,第二个缩进后就变成了 ARN: 定义了它上面的行。

附注:在整个模板中统一使用2个空格或4个空格或制表符。

© www.soinside.com 2019 - 2024. All rights reserved.