Select 从 cloudformation 创建的 VPC

Select VPC created from cloudformation

我正在创建两个 EKS 模板和一个 VPC 模板。在 VPC 模板中,我创建了 3 个私有子网和 3 个 public 子网,它们运行良好。所以,我希望一个 EKS 应该在 public 中,一个 EKS 应该在私有子网中。那么如何通过cloudformation做到这一点。

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

这给了我 6 个子网列表。

Ec2SubnetId: 
     !Select [0, !Ref SubnetIds]

这select是所有子网中的第一个子网。 但我不确定如何 select 3 个特定的 public 或仅在 cloudformation 中的私有子网。

据我了解你的问题,你有一个表达式 returns 第一个子网 ID,即:

!Select [0, !Ref SubnetIds]

如果您想要所有三个子网,您可以写:

[!Select [0, !Ref SubnetIds], !Select [1, !Ref SubnetIds], !Select [2, !Ref SubnetIds]]

但是这个表达式和写是一样的:

!Ref SubnetIds

因为SubnetIds已经是List<AWS::EC2::Subnet::Id>.

据我所知,您想要一个您创建的 VPC 堆栈的私有和 public 子网列表。您可以从 VPC 堆栈中导出您的 public 和私有子网,并在您的 EKS 堆栈中使用它们。

Outputs:
  PublicSubnets:
    Description: Public Subnets
    Value: !Join [",", [!Ref PublicSubnet1, !Ref PublicSubnet2, !Ref PublicSubnet3]]
    Export:
      Name: PublicSubnets  
  PrivateSubnets:
    Description: Private Subnets
    Value: !Join [",", [!Ref PrivateSubnet1, !Ref PrivateSubnet2, !Ref PrivateSubnet3]]
    Export:
      Name: PrivateSubnets

我认为您现在应该能够在 EKS 堆栈中将它们引用为

Ec2SubnetId: 
 !Select [0, !ImportValue PrivateSubnets]

或者 Split 函数

Ec2SubnetId:
  !Select [0, !Split [",", !ImportValue PrivateSubnets]]

如果可行,请告诉我。