我将作为参数传递一个"子网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
可以是您的自定义资源的名称。