Wie tätige ich einen AWS SDK-call (Aufruf) von einem CDK-Projekt aus mithilfe der Schnittstelle AwsSDKCall?
Ich möchte AWS-SDK-Aufrufe von meinem AWS Cloud Development Kit-Projekt (AWS CDK) aus über die AWSSdkCall-Schnittstelle tätigen.
Kurzbeschreibung
Sie können Aufrufe des AWS Software Development Kit (AWS SDK) für Stack-Bereitstellungsszenarien verwenden, wie zum Beispiel:
- Rufen Sie Konfigurationen ab, während ein Stack erstellt und dynamisch aktualisiert wird.
- Rufen Sie Attribute von Ressourcen ab, die in den Rückgabewerten der Ressourcen in AWS CloudFormation nicht unterstützt werden.
- Nehmen Sie kleine Patches oder Konfigurationsänderungen vor, die von AWS CloudFormation nicht unterstützt werden.
Sie können AWS-SDK-Aufrufe für verschiedene CloudFormation-Stack-Vorgangsereignisse wie Erstellen, Löschen oder Aktualisieren auslösen. Sie müssen keinen Zugriff und keine Tools für Ihre Bereitstellungspipeline einrichten, um AWS-SDK-Aufrufe tätigen zu können. Die AWS-SDK-Laufzeit wird vollständig vom AWS Cloud Development Kit (AWS CDK) eingerichtet. Außerdem können Sie den Zugriff für die AWS Lambda-Funktion hinter der benutzerdefinierten Ressource anpassen und einschränken.
Behebung
Hinweis: Die folgenden Beispiele in dieser Auflösung verwenden Python. Stellen Sie sicher, dass Sie Befehle verwenden, die für die von Ihnen verwendete Programmiersprache spezifisch sind.
Um einen AWS-SDK-Aufruf mit AwsSDKCall zu tätigen, müssen Sie drei grundlegende Parameter deklarieren:
- Service — Dies ist der AWS-Service, den Sie anrufen möchten. Bei Werten wird zwischen Groß- und Kleinschreibung unterschieden.
- Aktion - Dies ist der API-/Aktionsaufruf, den Sie tätigen möchten. Dies folgt normalerweise einem Kamelkastenmuster. Bei Werten wird zwischen Groß- und Kleinschreibung unterschieden.
- Parameter — Dies sind die optionalen Parameter, die Sie beim API-/Aktionsaufruf übergeben. Sie können Parameter als Variable deklarieren und sie dann an die Schnittstelle übergeben, die einem JSON-Objekt für die API-Nutzlast ähnelt. Weitere Informationen finden Sie unter AWS SDK für JavaScript.
1.Rufen Sie eine Amazon Machine Image-ID vom AWS Systems Manager Kundendienstmitarbeiter ab:
Hinweis: Im folgenden Beispiel importieren Sie custom_resources als cr und aws_cdk als cdk.
get_ami_id = cr.AwsCustomResource(self, "GetAMIId", on_create=cr.AwsSdkCall( service="SSM", action="getParameter", parameters={ "Name": "/aws/service/ami-amazon-linux-latest/amzn2-ami-kernel-5.10-hvm-x86_64-gp2" }, physical_resource_id=cr.PhysicalResourceId.of('get-ami-id')), policy=cr.AwsCustomResourcePolicy.from_sdk_calls( resources=cr.AwsCustomResourcePolicy.ANY_RESOURCE )) cdk.CfnOutput(self, 'ImageId', value=get_ami_id.get_response_field('Parameter.Value'))
Hinweis: Sie können die Antwort des API-Aufrufs mit dem Parameter get_response_field referenzieren.
2.Verschlüsseln Sie die Lambda-Protokollgruppe mit einem benutzerdefinierten KMS-Schlüssel:
Hinweis: Im folgenden Beispiel importieren Sie aus aws_cdk aws_lambda als **lambda_, ** custom_resources als cr, aws_kms als kms.
encryption_key = kms.Key(self, 'Key') encryption_key.grant_encrypt_decrypt( iam.ServicePrincipal('logs.amazonaws.com')) fn = lambda_.Function(self, "MyFunction", runtime=lambda_.Runtime.NODEJS_16_X, handler="index.handler", code=lambda_.Code.from_inline("hello world")) associate_kms_key = cr.AwsCustomResource(self, "AssociateKmsKey", on_create=cr.AwsSdkCall( service="CloudWatchLogs", action="associateKmsKey", parameters={ "kmsKeyId": encryption_key.key_arn, "logGroupName": fn.log_group.log_group_name }, physical_resource_id=cr.PhysicalResourceId.of("associate-kms-key")), policy=cr.AwsCustomResourcePolicy.from_sdk_calls( resources=cr.AwsCustomResourcePolicy.ANY_RESOURCE ) )
Hinweis: Sie können die Eigenschaftsrichtlinie verwenden, um der Lambda-Funktion hinter der benutzerdefinierten Ressource Berechtigungen für API-Aufrufe zu erteilen. Wenn Sie from_sdk_calls() verwenden, wird jeder API-Aufruf in die entsprechenden AWS Identity and Access Management (IAM) -Berechtigungen übersetzt. Wenn nach der Synthese nicht die richtigen Berechtigungen hinzugefügt wurden, können Sie die Berechtigungen manuell mit from_statements() hinzufügen.
Beispiel:
policy=cr.AwsCustomResourcePolicy.from_statements( statements=[iam.PolicyStatement(actions=[ 'dynamodb:DescribeTable', 'dynamodb:ListTables'], resources=['*'], )] )
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor einem Monat
- AWS OFFICIALAktualisiert vor 3 Jahren
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 2 Jahren