Utilizzo AWS Lambda con AWS CloudFormation - AWS Lambda

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo AWS Lambda con AWS CloudFormation

In un AWS CloudFormation modello, puoi specificare una funzione Lambda come destinazione di una risorsa personalizzata. Utilizza risorse personalizzate per elaborare parametri, recuperare valori di configurazione o chiamare altri AWS servizi durante gli eventi del ciclo di vita dello stack.

L'esempio seguente invoca una funzione definita in un altro punto del modello.

Esempio – Definizione di risorse personalizzate
Resources: primerinvoke: Type: AWS::CloudFormation::CustomResource Version: "1.0" Properties: ServiceToken: !GetAtt primer.Arn FunctionName: !Ref randomerror

Il token di servizio è l'Amazon Resource Name (ARN) della funzione che AWS CloudFormation richiama quando crei, aggiorni o elimini lo stack. Puoi anche includere proprietà aggiuntive comeFunctionName, che vengono AWS CloudFormation passate alla funzione così com'è.

AWS CloudFormation richiama la funzione Lambda in modo asincrono con un evento che include un callback. URL

Esempio — AWS CloudFormation evento relativo al messaggio
{ "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" } }

La funzione è responsabile della restituzione di una risposta al callback URL che indichi l'esito positivo o negativo. Per la sintassi di risposta completa, consulta Oggetti di risposta delle risorse personalizzate.

Esempio — risposta AWS CloudFormation personalizzata delle risorse
{ "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 fornisce una libreria chiamata cfn-response che gestisce l'invio della risposta. Se definisci la tua funzione all'interno di un modello, puoi richiedere la libreria per nome. AWS CloudFormation quindi aggiunge la libreria al pacchetto di distribuzione creato per la funzione.

Se alla funzione utilizzata da una risorsa personalizzata è associata un'interfaccia di rete elastica, aggiungi le seguenti risorse alla VPC politica in cui si region trova la regione in cui si trova la funzione senza i trattini. Ad esempio, us-east-1 è useast1. Ciò consentirà alla Custom Resource di rispondere al callback URL che rimanda un segnale allo AWS CloudFormation stack.

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

La seguente funzione di esempio invoca una seconda funzione. Se la chiamata ha esito positivo, la funzione invia una risposta positiva a AWS CloudFormation e l'aggiornamento dello stack continua. Il modello utilizza il tipo di risorsa AWS: :Serverless: :Function fornito da. AWS Serverless Application Model

Esempio — Funzione di risorse personalizzata
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

Se la funzione richiamata dalla risorsa personalizzata non è definita in un modello, è possibile ottenere il codice sorgente cfn-response dal modulo cfn-response nella Guida per l'utente. AWS CloudFormation

Per ulteriori informazioni sulle risorse personalizzate, consulta Risorse personalizzate nella Guida per l’utente di AWS CloudFormation .