Verwenden AWS Lambda mit AWS CloudFormation - AWS Lambda

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden AWS Lambda mit AWS CloudFormation

In einer AWS CloudFormation Vorlage können Sie eine Lambda-Funktion als Ziel einer benutzerdefinierten Ressource angeben. Verwenden Sie benutzerdefinierte Ressourcen, um während Ereignissen im Stack-Lebenszyklus Parameter zu verarbeiten, Konfigurationswerte abzurufen oder andere AWS Dienste aufzurufen.

Das folgende Beispiel ruft eine Funktion auf, die an anderer Stelle in der Vorlage definiert ist.

Beispiel – benutzerdefinierte Ressourcendefinition
Resources: primerinvoke: Type: AWS::CloudFormation::CustomResource Version: "1.0" Properties: ServiceToken: !GetAtt primer.Arn FunctionName: !Ref randomerror

Das Service-Token ist der Amazon-Ressourcenname (ARN) der Funktion, die AWS CloudFormation aufgerufen wird, wenn Sie den Stack erstellen, aktualisieren oder löschen. Sie können auch zusätzliche Eigenschaften hinzufügenFunctionName, wie z. B., was AWS CloudFormation unverändert an Ihre Funktion übergeben wird.

AWS CloudFormation ruft Ihre Lambda-Funktion asynchron mit einem Ereignis auf, das einen Callback beinhaltet. URL

Beispiel AWS CloudFormation — Nachrichtenereignis
{ "RequestType": "Create", "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:lambda-error-processor-primer-14ROR2T3JKU66", "ResponseURL": "https://cloudformation-custom-resource-response-useast1.s3-us-east-1.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-east-1%3A123456789012%3Astack/lambda-error-processor/1134083a-2608-1e91-9897-022501a2c456%7Cprimerinvoke%7C5d478078-13e9-baf0-464a-7ef285ecc786?AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Expires=1555451971&Signature=28UijZePE5I4dvukKQqM%2F9Rf1o4%3D", "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/lambda-error-processor/1134083a-2608-1e91-9897-022501a2c456", "RequestId": "5d478078-13e9-baf0-464a-7ef285ecc786", "LogicalResourceId": "primerinvoke", "ResourceType": "AWS::CloudFormation::CustomResource", "ResourceProperties": { "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:lambda-error-processor-primer-14ROR2T3JKU66", "FunctionName": "lambda-error-processor-randomerror-ZWUC391MQAJK" } }

Die Funktion ist dafür verantwortlich, eine Antwort auf den Callback zurückzugebenURL, die auf Erfolg oder Misserfolg hinweist. Die vollständige Antwortsyntax finden Sie unter Benutzerdefinierte Ressourcenantwortobjekte.

Beispiel — AWS CloudFormation benutzerdefinierte Ressourcenantwort
{ "Status": "SUCCESS", "PhysicalResourceId": "2019/04/18/[$LATEST]b3d1bfc65f19ec610654e4d9b9de47a0", "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/lambda-error-processor/1134083a-2608-1e91-9897-022501a2c456", "RequestId": "5d478078-13e9-baf0-464a-7ef285ecc786", "LogicalResourceId": "primerinvoke" }

AWS CloudFormation stellt eine aufgerufene Bibliothek bereitcfn-response, die das Senden der Antwort übernimmt. Wenn Sie Ihre Funktion innerhalb einer Vorlage definieren, können Sie die Bibliothek anhand des Namens angeben. AWS CloudFormation fügt dann die Bibliothek dem Bereitstellungspaket hinzu, das sie für die Funktion erstellt.

Wenn an Ihre Funktion, die eine benutzerdefinierte Ressource verwendet, eine Elastic Network-Schnittstelle angehängt ist, fügen Sie der VPC Richtlinie die folgenden Ressourcen hinzu, wobei es sich um die Region region handelt, in der sich die Funktion befindet, ohne Bindestriche. Zum Beispie, us-east-1 ist useast1. Dadurch kann die benutzerdefinierte Ressource auf den Callback antwortenURL, der ein Signal zurück an den AWS CloudFormation Stack sendet.

arn:aws:s3:::cloudformation-custom-resource-response-region", "arn:aws:s3:::cloudformation-custom-resource-response-region/*",

Die folgende Beispielfunktion ruft eine zweite Funktion auf. Wenn der Aufruf erfolgreich ist, sendet die Funktion eine Erfolgsantwort an AWS CloudFormation, und das Stack-Update wird fortgesetzt. Die Vorlage verwendet den Ressourcentyp AWS: :Serverless: :Function, der von bereitgestellt wird. AWS Serverless Application Model

Beispiel — Benutzerdefinierte Ressourcenfunktion
Transform: 'AWS::Serverless-2016-10-31' Resources: primer: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs16.x InlineCode: | var aws = require('aws-sdk'); var response = require('cfn-response'); exports.handler = function(event, context) { // For Delete requests, immediately send a SUCCESS response. if (event.RequestType == "Delete") { response.send(event, context, "SUCCESS"); return; } var responseStatus = "FAILED"; var responseData = {}; var functionName = event.ResourceProperties.FunctionName var lambda = new aws.Lambda(); lambda.invoke({ FunctionName: functionName }, function(err, invokeResult) { if (err) { responseData = {Error: "Invoke call failed"}; console.log(responseData.Error + ":\n", err); } else responseStatus = "SUCCESS"; response.send(event, context, responseStatus, responseData); }); }; Description: Invoke a function to create a log stream. MemorySize: 128 Timeout: 8 Role: !GetAtt role.Arn Tracing: Active

Wenn die Funktion, die die benutzerdefinierte Ressource aufruft, nicht in einer Vorlage definiert ist, können Sie den Quellcode für cfn-response das Modul cfn-response im AWS CloudFormation Benutzerhandbuch abrufen.

Weitere Informationen zu benutzerdefinierten Ressourcen finden Sie unter Benutzerdefinierte Ressourcen im AWS CloudFormation -Benutzerhandbuch.