访问CloudFormation模板中作为参数传递的子网的IPv4 CIDR



我将作为参数传递一个"子网ID">

VPCPrivateSubnet1:
Description: VPCPrivateSubnet1
Type: String
Default: 'subnet-83733e21'

然后,我正在创建一个"安全组">

SecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
VpcId: !Ref VPCid
GroupDescription: Security Group
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 10
ToPort: 10
CidrIp: ???

对于CidrIp,我想有一种方法来引用它,而不必键入它。类似于VPCPrivateSubnet1.CidrIp。我没有导出子网(所以我可以导入它(。我没有在模板中创建它,所以我不能使用Ref.

我会感谢你的帮助。

不幸的是,这并不容易实现。但是,即使您的子网定义在与安全组相同的模板中,或者从其他堆栈导出,AWS::EC2::subnet也无法返回其CIDR

但是,您可以在CloudFormation中设计自定义资源,它将为您提供所需子网的CIDR。

为此,您必须编写自己的自定义lambda函数,该函数将获取子网的id,并使用例如boto3 SDK将CIDR返回到CloudFormation中。

有了这个,您可以执行!GetAtt CustomGetSubnetInfoResource.CidrIp,其中CustomGetSubnetInfoResource可以是您的自定义资源的名称。

最新更新