如何利用 CDK 逸出出口從 L3 和 L2 建構模組擷取較低層級的建構模組物件?

2 分的閱讀內容
0

我想使用 AWS Cloud Development Kit (AWS CDK) 逸出出口擷取 L2 和 L3 建構模組的子物件。

簡短說明

AWS CDK 抽象層有三個:

  • L1 建構模組具有映射到相關 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 程式設計語言。任何其他程式設計語言的步驟都是類似步驟。請務必針對您使用的程式設計語言調整程式碼語法。

在 Python 中具有 L3 建構模組的範例 Amazon EKS 叢集:

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 Command Line Interface (AWS CLI) 命令,然後使用您的值取代範例字串的所有執行個體。例如,使用您的目標子 ID 取代 example_child_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 或在 AWS CDK 問題的 GitHub 網站上建立新問題以尋求協助

相關資訊

當 CDK 較高層級的建構模組和 CloudFormation 資源之間有差距,如何自訂資源屬性值?

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