我正在创建两个EKS模板和一个VPC模板。在VPC模板中,我创建了3个私有子网和3个公共子网,工作正常。因此,我希望一个EKS应该公开,一个EKS应该在私有子网中。那么怎样才能通过cloudformation做到这一点。
Type: List<AWS::EC2::Subnet::Id>
这给了我6个子网列表。
Ec2SubnetId:
!Select [0, !Ref SubnetIds]
这将从所有子网中选择第一个子网。但我不知道如何仅在cloudformation中选择3个特定的公共或私有子网。
如果我知道您需要创建VPC堆栈的私有和公共子网列表。您可以从VPC堆栈导出公共和私有子网,并在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]]
如果有效,请告诉我。
据我了解你的问题,你有一个表达式返回第一个子网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>
。