我正在尝试使用Java中的AWS cdk构建一个AWS EKS集群。
我们有一个现有的VPC和子网,需要获取一些Kubernetes标签,例如 kubernetes.io/role/internal-elb=1 等。
我可以通过使用以下方式获取vpc来获取ISubnet:
IVpc vpc = Vpc.fromVpcAttributes(this, "my-vpc", vpcAttributes);
List<ISubnet> subnets = vpc.getPrivateSubnets();
subnets.forEach(iSubnet -> Tag.add(iSubnet, "kubernetes.io/role/internal-elb", "1"));
但是awscdk.core.Tag.add()
期待一个构造器,因为子网已经存在,所以我没有创建它。
也在此处尝试了示例:https://docs.aws.amazon.com/de_de/cdk/latest/guide/tagging.html
private void addTagToAllVPCSubnets(Tag tag) {
TagProps includeOnlySubnets = TagProps.builder()
.includeResourceTypes(singletonList("AWS::EC2::Subnet"))
.build();
Tag.add(this, tag.getKey(), tag.getValue(), includeOnlySubnets);
}
...但是我仍然看不到cdk synth
的CF yaml中的任何新标签
任何帮助将不胜感激。
答案 0 :(得分:1)
您可以使用支持 lambda 的自定义资源自动执行此操作。
答案 1 :(得分:0)
目前,这似乎是CDK中的一个限制。这是CDK中的EKS构造应处理的事情,但目前无法实现,如CDK部署期间的警告所示:
[Warning at /stack/some-project-EKS-cluster] Could not auto-tag private subnets with "kubernetes.io/role/internal-elb=1", please remember to do this manually
由于无法自动完成此操作的原因相同,因此无法使用Tag.add()
。
由于CDK中的EKS模块仍处于实验/开发预览阶段,因此您现在有三个选择:
一个好主意可能是在AWS CDK Github上创建一个问题,并请求将现有子网(以及一般其他现有结构)标记为功能。我在他们的Github上找不到与此有关的其他问题。