如何利用 CDK 逃生舱口从 L3 和 L2 构造检索较低级别的构造对象?

2 分钟阅读
0

我想使用 AWS Cloud Development Kit (AWS CDK) 逃生舱口来检索 L2 和 L3 构造的子对象。

简短描述

有三个 AWS CDK 抽象层:

  • L1 构造具有 1:1 关系,映射到相关的 AWS CloudFormation 资源类型。这是 AWS CDK 最基本的构造层。
  • L2 构造可以封装许多 L1 结构,其默认子对象是相关资源类型的 L1 构造。其他 L1 构造子对象将根据 L2 子对象的指定属性合成到 AWS CloudFormation 模板。
  • L3 构造是 AWS CDK 抽象层的最高级别,可以封装许多 L2 和 L1 构造。

有关详细信息,请参阅抽象和逃生舱口

解决方法

使用 AWS CDK 逃生舱口从具有 L3 构造的 Amazon Elastic Kubernetes Service (Amazon EKS) 集群中检索子对象。

**注意:**这些步骤使用 Python 编程语言。任何其他编程语言的步骤都类似。务必调整您在使用的编程语言的代码语法。

具有 L3 构造的 Amazon EKS 集群 Python 示例:

vpc = ec2.Vpc(self, "Vpc",
            ip_addresses=ec2.IpAddresses.cidr("192.168.0.0/25")
        )

eks_object = eks.Cluster(self, "HelloEKS",
            version=eks.KubernetesVersion.V1_25,
            vpc=vpc,
            vpc_subnets=[ec2.SubnetSelection(subnet_type=ec2.SubnetType.PRIVATE_WITH_EGRESS)]
        )

1.使用 node.find_all() 属性检索 Amazon EKS 集群中 L3 构造的所有子对象:

for child in eks_object.node.find_all():
            print(child.node.id)

使用上述命令后,将呈现 L3 构造的所有子 ID。

打印输出示例:

HelloEKS

...
NodegroupDefaultCapacity
NodeGroupRole
...

2.呈现 L3 构造的子 ID 后,请使用 node.find_child() 属性检索所需的子 ID:

**重要事项:**务必检查所有 AWS 命令行界面 (AWS CLI) 命令,并将所有  example 字符串实例替换为您的值。例如,请将 example_child_id 替换为您的目标子 ID。

l2_nodeGroup = eks_object.node.find_child(example_child_id)

使用此命令后,将呈现所需子 ID 的 L2 构造。

打印输出示例:

<aws_cdk.aws_eks.Nodegroup object at 0x7ffa9c7b2910>

**注意:**您可以使用变量 l2_nodeGroup 来调用 Nodegroup 属性、特性和方法来修改关联的资源。

3.使用 node.find_all() 属性检索 L2 构造的所有子对象:

for child in l2_nodeGroup.node.find_all():
         print(child.node.id)

使用上述命令后,将呈现 L2 构造的所有子 ID。

打印输出示例:

NodegroupDefaultCapacity
NodeGroupRole
ImportNodeGroupRole

4.呈现 L2 构造的子 ID 后,使用 node.find_child() 属性检索所需的子 ID:

l2_nodeGroup_role = l2_nodeGroup.node.find_child(example_child_id)
     print(l2_nodeGroup_role)

使用上述命令后,L2 层的对象将在 aws_iam.Role 级别返回。

5.当您处于 aws_iam.Role 级别时,请使用以下 node.default_child 属性访问 L1 CfnRole 构造对象:

l1_nodeGroup_role = l2_nodeGroup_role.node.default_child
        print(l1_nodeGroup_role)

使用上述命令后,L1 层的默认子项将返回。

**注意:**当使用 node.find_all() 或 node.default_child 检索子对象时,您可以使用该构造的功能来增强对 CloudFormation 模板的控制。

如果仍然无法检索子对象,请联系 AWS Support 或在 GitHub 网站上创建新问题,以解决 AWS CDK 问题

相关信息

当 CDK 更高级别的构造和 CloudFormation 资源之间存在差距时,如何自定义资源属性值?

AWS 官方
AWS 官方已更新 1 年前