Wie verwende ich CDK-Escape-Hatches, um Konstruktobjekte niedrigerer Ebenen aus L3- und L2-Konstrukten abzurufen?

Lesedauer: 3 Minute
0

Ich möchte die Escape-Hatches des AWS Cloud Development Kit (AWS CDK) verwenden, um untergeordnete Objekte von L2- und L3-Konstrukten abzurufen.

Kurzbeschreibung

Es gibt drei AWS CDK-Abstraktionsebenen:

  • L1-Konstrukte verfügen über 1:1-Beziehungen, die den zugehörigen AWS CloudFormation-Ressourcentypen zugeordnet sind. Dies ist die grundlegendste Konstruktebene für AWS CDK.
  • L2-Konstrukte können eine Reihe von L1-Konstrukten umschließen, und ihr untergeordnetes Standardobjekt ist das L1-Konstrukt des entsprechenden Ressourcentyps. Andere untergeordnete L1-Konstrukt-Objekte werden auf der Grundlage der angegebenen Eigenschaften des L2-Child-Objekts zu AWS CloudFormation-Vorlagen synthetisiert.
  • L3-Konstrukte stellen die höchste Ebene der AWS CDK-Abstraktionsebenen dar und können eine Reihe von L2- und L1-Konstrukten umschließen.

Weitere Informationen finden Sie unter Abstraktionen und Fluchtluken.

Behebung

Verwenden Sie AWS CDK Escape Hatches, um untergeordnete Objekte aus einem Amazon Elastic Kubernetes Service (Amazon EKS)-Cluster mit einem L3-Konstrukt abzurufen.

**Hinweis:**Diese Schritte verwenden die Programmiersprache Python. Die Schritte sind für alle anderen Programmiersprachen ähnlich. Stellen Sie sicher, dass Sie die Codesyntax für die von Ihnen verwendete Programmiersprache anpassen.

Ein Beispiel für einen Amazon EKS-Cluster mit einem L3-Konstrukt in 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.Rufen Sie alle untergeordneten Objekte eines L3-Konstrukts in einem Amazon EKS-Cluster ab, indem Sie das Attribut node.find_all() verwenden:

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

Nachdem Sie den vorherigen Befehl verwendet haben, werden alle untergeordneten IDs des L3-Konstrukts gedruckt.

Beispiel für einen Ausdruck:

HelloEKS

...
NodegroupDefaultCapacity
NodeGroupRole
...

2.Rufen Sie nach dem Drucken der untergeordneten IDs des L3-Konstrukts die gewünschte untergeordnete ID ab, indem Sie das Attribut node.find_child() verwenden:

Wichtig:Stellen Sie sicher, dass Sie alle Befehle des AWS Command Line Interface (AWS CLI) überprüfen und alle Instanzen von Beispielzeichenfolgen durch Ihre Werte ersetzen. Ersetzen Sie beispielsweise example_child_id durch Ihre Ziel-Child-ID.

l2_nodeGroup = eks_object.node.find_child(example_child_id)

Nach der Verwendung dieses Befehls wird das L2-Konstrukt der gewünschten untergeordneten ID gedruckt.

Beispiel für einen Ausdruck:

<aws_cdk.aws_eks.Nodegroup object at 0x7ffa9c7b2910>

Hinweis:Sie können die Variablen l2_nodeGroup verwenden, um dieNodegroup-Eigenschaften, -Attribute und -Methoden aufzurufen, um die zugehörigen Ressourcen zu ändern.

3.Rufen Sie alle untergeordneten Objekte des L2-Konstrukts ab, indem Sie das Attribut node.find_all() verwenden:

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

Nachdem Sie den vorherigen Befehl verwendet haben, werden alle untergeordneten IDs des L2-Konstrukts gedruckt.

Beispiel für einen Ausdruck:

NodegroupDefaultCapacity
NodeGroupRole
ImportNodeGroupRole

4.Rufen Sie nach dem Drucken der untergeordneten IDs des L2-Konstrukts die gewünschte untergeordnete ID ab, indem Sie das Attribut **node.find_child()**verwenden:

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

Nachdem Sie den vorherigen Befehl verwendet haben, kehrt ein Objekt auf der L2-Ebene auf die Ebene aws_iam.Role zurück.

5.Wenn Sie sich auf der Ebene aws_iam.Role befinden, verwenden Sie das folgende node.default_child-Attribut, um das L1 CfnRole-Konstruktobjekt zu erreichen:

l1_nodeGroup_role = l2_nodeGroup_role.node.default_child
        print(l1_nodeGroup_role)

Nachdem Sie den vorherigen Befehl verwendet haben, kehrt das standardmäßige untergeordnete Objekt auf der L1-Ebene zurück.

**Hinweis:**Wenn Sie node.find_all() oder node.default_child verwenden, um untergeordnete Objekte abzurufen, können Sie die Funktionen dieses Konstrukts verwenden, um eine CloudFormation-Vorlage besser zu steuern.

Wenn Sie untergeordnete Objekte immer noch nicht abrufen können, wenden Sie sich an den AWS-Support oder erstellen Sie auf der GitHub-Website ein neues Problem für AWS CDK-Probleme.

Weitere Informationen

Wie passe ich einen Ressourceneigenschaftswert an, wenn zwischen CDK-Konstrukten auf höherer Ebene und einer CloudFormation-Ressource eine Lücke besteht?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr