我把一个 "子网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
. 我没有导出子网(所以我可以导入它)。我没有在模板中创建它,所以我不能使用参考。
我将感谢帮助。
不幸的是,这是不容易实现的。但是,即使你在同一个模板中定义了你的子网,作为你的安全组,或从其他堆栈导出。AWS::EC2::子网 不能返回其CIDR.
然而,你可以设计 自定义资源 中的CIDR,这将为您提供您想要的子网的CIDR。
为此,您必须编写自己的自定义lambda函数,该函数将获取子网的id,并使用(例如)boto3 SDK将CIDR返回到CloudFormation中。
有了这个函数,您可以做 !GetAtt CustomGetSubnetInfoResource.CidrIp
,其中 CustomGetSubnetInfoResource
可以是您自定义资源的名称。