Verwenden von 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 von AWS Lambda mit AWS CloudFormation

In einer AWS CloudFormation-Vorlage können Sie eine Lambda-Funktion als Ziel einer benutzerdefinierten Ressource angeben. Mittels benutzerdefinierter Ressourcen können Sie Parameter verarbeiten, Konfigurationswerte abrufen oder während Stack-Lebenszyklusereignissen andere AWS-Services aufrufen.

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 von AWS CloudFormation aufgerufen wird, wenn Sie den Stack erstellen, aktualisieren oder löschen. Sie können auch zusätzliche Eigenschaften wie FunctionName einschließen, die von AWS CloudFormation unverändert an Ihre Funktion übergeben werden.

AWS CloudFormation ruft Ihre Lambda-Funktion asynchron mit einem Ereignis mit einer Callback-URL auf.

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 für die Rückgabe einer Antwort an die Rückruf-URL zuständig, die Erfolg oder Misserfolg bedeutet. 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 bietet eine Bibliothek mit dem Namen cfn-response, die das Senden der Antwort bearbeitet. Wenn Sie Ihre Funktion in einer Vorlage definieren, können Sie die Bibliothek nach Namen anfordern. AWS CloudFormation fügt die Bibliothek dann dem Bereitstellungspaket hinzu, das es für die Funktion erstellt.

Wenn Ihre Funktion, die eine benutzerdefinierte Ressource verwendet, mit einer Elastic Network Interface verbunden ist, fügen Sie die folgenden Ressourcen zur VPC-Richtlinie hinzu, wobei region die Region ist, in der sich die Funktion befindet, ohne Bindestriche angegeben ist. Zum Beispie, us-east-1 ist useast1. Dadurch kann die benutzerdefinierte Ressource auf die Callback-URL reagieren, die 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 entsprechende Antwort an AWS CloudFormation, und die Stack-Aktualisierung wird fortgesetzt. Die Vorlage verwendet den von bereitgestellten AWS::Serverless::Function RessourcentypAWS Serverless Application Model.

Beispiel error-processor/template.yml – 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 von der benutzerdefinierten Ressource aufgerufene Funktion in keiner Vorlage definiert ist, können Sie den Quellcode für cfn-response dem cfn-response-Modul im AWS CloudFormation-Benutzerhandbuch entnehmen.

Eine Beispielanwendung, die mittels einer benutzerdefinierten Ressource sicherstellt, dass die Protokollgruppe einer Funktion vor einer anderen von ihr abhängigen Ressource erstellt wird, finden Sie unter Fehlerverarbeitungs-Beispielanwendung für AWS Lambda.

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