我正在开发一个使用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的fetch cidr块。
我怎么能处理这个?
除非您在同一模板中创建了子网,否则我认为您无法做到这一点。使用GetAtt时,您需要在CloudFormation模板中提供资源的名称。您只是提供子网ID的参数列表 - 这些是字符串,而不是CloudFormation管理的资源。
您可以简单地将子网CIDR作为参数传入,或者更好的是,使用Fn::ImportValue将它们作为创建VPC和子网的堆栈的输出引用。
另请参阅this proposed solution到同样的问题。警告:这不是微不足道的。