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

问题描述 投票:0回答:1

我把一个 "子网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. 我没有导出子网(所以我可以导入它)。我没有在模板中创建它,所以我不能使用参考。

我将感谢帮助。

amazon-web-services amazon-cloudformation
1个回答
1
投票

不幸的是,这是不容易实现的。但是,即使你在同一个模板中定义了你的子网,作为你的安全组,或从其他堆栈导出。AWS::EC2::子网 不能返回其CIDR.

然而,你可以设计 自定义资源 中的CIDR,这将为您提供您想要的子网的CIDR。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.