【问题标题】:SubnetIds in CloudFormationCloudFormation 中的子网 ID
【发布时间】:2020-11-23 19:58:56
【问题描述】:

在 CloudFormation 堆栈中,我正在创建一个接口类型 VPC 端点,它需要 SubnetIds 作为参数之一。我想在配置 VPC 和子网的同一 CloudFormation 堆栈中配置 VPC 端点。

问题是 - 如何为在同一堆栈中创建的子网引用 SubnetIds? Subnet 的内部函数 GetAtt 不支持检索子网 ID。

【问题讨论】:

  • 您可以将现有资源导入CF。见here

标签: amazon-web-services amazon-cloudformation amazon-vpc


【解决方案1】:

您可以在您的子网资源上使用Ref intrinsic function,如下例所示。

除了属性,每个 CloudFormation 资源还可以支持 Ref 值,对于子网,这是子网 ID。

Resources: 
  mySubnet:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId:
        Ref: myVPC
      CidrBlock: 10.0.0.0/24
      AvailabilityZone: "us-east-1a"
  Ec2Instance: 
    Type: AWS::EC2::Instance
    Properties:
      SubnetId:
        Ref: mySubnet

只需对附加资源使用模板中的Ref 函数,这还将创建依赖关系,防止资源在依赖子网时被创建。

【讨论】:

    【解决方案2】:

    需要 SubnetIds 作为参数之一。

    如果您将子网 ID 作为模板参数的一部分,您可以使用带有List<AWS::EC2::Subnet::Id> 类型的参数:

    Parameters:
    
      Subnets:
        Type: List<AWS::EC2::Subnet::Id>
    

    然后在其余代码中,可以引用整个列表或单个子网,如下所示:

    !Ref Subnets # entire list 
    
    !Select [0, !Ref Subnets] # first subnet provided in the list
    

    如果您在模板中创建子网

    Resources: 
       
       MySubnet1:
         Type: AWS::EC2::Subnet
         Properties:
           # properties 
    
       MySubnet2:
         Type: AWS::EC2::Subnet
         Properties:
           # properties other subnet
    

    然后要引用他们的id,可以使用Ref whichreturnssubnet id:

    !Ref MySubnet1
    
    !Ref MySubnet2
    

    但是,如果您想在模板中使用在 CloudFormation 之外定义的现有子网,则可以将现有子网导入堆栈:

    但这不是自动过程。您必须先手动修改模板才能使其正常工作。

    【讨论】:

      猜你喜欢
      • 2018-02-05
      • 2021-11-26
      • 2021-04-07
      • 2017-03-12
      • 1970-01-01
      • 2020-12-21
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      相关资源
      最近更新 更多