1

我正在开发使用 CloudFormation 配置的新基础架构。我需要为安全组获取子网 cidrblock。

我尝试了一些获取子网 Cidr 块的方法,但出现以下错误:

YAML not well-formed

我的模板是:

 SubnetList:
    Description: 'Gateway Subnet Id'
    Type: List<AWS::EC2::Subnet::Id>

.....
..
....

ElastiCacheSecurityGroupIngressGateway: ##SubnetLists
  Type: AWS::EC2::SecurityGroupIngress
  Properties:
    GroupId: !GetAtt SecGroup.GroupId
    IpProtocol: tcp
    FromPort: '6379'
    ToPort: '6379'
    CidrIp: Fn::GetAtt: [ Fn::Select: [ 0, !Ref SubnetList ], CidrBlock ]

我需要从 SubnetList 获取 cidr 块。

我该如何处理?

4

1 回答 1

2

除非您在同一模板中创建子网,否则我认为您无法做到这一点。使用 GetAtt 时,您需要在 CloudFormation 模板中提供资源的名称。您只需提供子网 ID 的参数列表 - 这些是字符串,而不是 CloudFormation 管理的资源。

您可以简单地将子网 CIDR 作为参数传递,或者更好的是,将它们作为首先使用Fn::ImportValue创建 VPC 和子网的堆栈的输出引用。

另请参阅此针对相同问题的建议解决方案。警告:这不是微不足道的。

于 2019-03-25T01:00:56.707 回答