繁体   English   中英

AWS Cloudformation - 安全组 ID 列表导出和导入 - SecurityGroupIds 无效

[英]AWS Cloudformation - security group ids list export and import - SecurityGroupIds not valid

我正在使用 2 个嵌套堆栈。 我需要在 NestedB 中使用从 NestedA 导出的安全组 ID。 导出的安全组 ID 将根据条件在 NestedB 的 SecurityGroupIds 属性中使用。

但是 cloudformation 返回错误:属性验证失败:[属性值 {/LaunchTemplateData/SecurityGroupIds/0} 与类型 {String} 不匹配]

以下是我尝试过的片段:

嵌套A出口

Outputs:
    SG1
    Value: !Join
    - ','
    - - !Ref securitygroup1
      - !Ref securitygroup2
    Export:
      Name: !Sub ${ExportVpcStackName}-SG1

    SG2
    Value: !Join
    - ','
    - - !Ref securitygroup3
      - !Ref securitygroup4
    Export:
      Name: !Sub ${ExportVpcStackName}-SG2

父堆栈

Resources:
  ...
  launchtemplate:
    Type: AWS::Cloudformation::Stack
    Properties:
      TemplateURL: https://s3/nestedB.yaml
      ...
      SG1:
        Fn::ImportValue: !Sub ${ExportVpcStackName}-SG1
      SG2:
        Fn::ImportValue: !Sub ${ExportVpcStackName}-SG2

嵌套导入

Parameters:
  SG1
    Type: List<AWS::EC2::SecurityGroup::Id>

  SG2
    Type: List<AWS::EC2::SecurityGroup::Id>

Resources:
  launchtemplate:
    Type: AWS::EC2::LaunchTemplate
    Properties:
      LaunchTemplateData:
      ...
        SecurityGroupIds: 
          !If
          - Condition1
          -
            - !Ref SG1
            - !Ref SG2
          - !If
            - Condition2
            - 
              - !Ref SG1
            - !Ref AWS::NoValue

我还尝试将每个安全组直接/单独导入 NestedB 但没有成功,即:

嵌套A出口

Outputs:
  securitygroup1:
    Value: !Ref securitygroup1
    Export:
      Name: !Sub ${ExportVpcStackName}-securitygroup1

  securitygroup2:
    Value: !Ref securitygroup2
    Export:
      Name: !Sub ${ExportVpcStackName}-securitygroup2

  securitygroup3:
    Value: !Ref securitygroup3
    Export:
      Name: !Sub ${ExportVpcStackName}-securitygroup3

  securitygroup4:
    Value: !Ref securitygroup4
    Export:
      Name: !Sub ${ExportVpcStackName}-securitygroup4

嵌套导入

Resources:
  launchtemplate:
    Type: AWS::EC2::LaunchTemplate
    Properties:
      LaunchTemplateData:
      ...
        SecurityGroupIds: 
          !If
          - Condition1
          -
            - Fn::ImportValue: !Sub ${ExportVpcStackName}-securitygroup1
            - Fn::ImportValue: !Sub ${ExportVpcStackName}-securitygroup2
            - Fn::ImportValue: !Sub ${ExportVpcStackName}-securitygroup3
            - Fn::ImportValue: !Sub ${ExportVpcStackName}-securitygroup4
          - !If
            - Condition2
            - 
             - Fn::ImportValue: !Sub ${ExportVpcStackName}-securitygroup1
             - Fn::ImportValue: !Sub ${ExportVpcStackName}-securitygroup2
            - !Ref AWS::NoValue
    

我犯了什么错误?

编辑:我已经尝试了@marcin 的建议,但仍然出现错误:

Property validation failure: [Value of property {/LaunchTemplateData/SecurityGroupIds/0} does not match type {String}]

请使用CommaDelimitedList而不是Type: List<AWS::EC2::SecurityGroup::Id>

您的SG1也是 SG 列表。 您必须使用Fn::Select从列表中获取单个 SG 值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM