我想使用 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 资源之间存在差距时,如何自定义资源属性值?