AWS CDK:标记现有子网

时间:2019-10-07 14:42:19

标签: kubernetes amazon-eks aws-cdk eks

我正在尝试使用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中的任何新标签

任何帮助将不胜感激。

2 个答案:

答案 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模块仍处于实验/开发预览阶段,因此您现在有三个选择:

  1. 等待发布完整版本,其中可能包括自动子网标记。
  2. 通过CDK创建自己的VPC,这使您可以标记自己的子网。
  3. 通过AWS控制台中的VPC服务界面手动编辑现有子网

一个好主意可能是在AWS CDK Github上创建一个问题,并请求将现有子网(以及一般其他现有结构)标记为功能。我在他们的Github上找不到与此有关的其他问题。