AWS Lambda
Guia do desenvolvedor

Usar o AWS Lambda com o AWS CloudFormation

Em um modelo do AWS CloudFormation, você pode especificar uma função Lambda como o destino de um recurso personalizado. Use recursos personalizados para processar parâmetros, recuperar valores de configurações ou chamar outros serviços da AWS durante eventos de ciclo de vida da pilha.

O exemplo a seguir invoca uma função que foi definida em outro lugar do modelo.

exemplo Definição de recurso personalizado do –

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

O token do serviço é o nome de recurso da Amazon (ARN) da função que o AWS CloudFormation invoca quando você cria, atualiza ou exclui a pilha. Você também pode incluir propriedades, como FunctionName, que o AWS CloudFormationtransmite à sua função como está.

O AWS CloudFormation invoca a função Lambda de forma assíncrona com um evento que inclui um URL de retorno de chamada.

exemplo Evento de mensagem do –AWS CloudFormation

{ "RequestType": "Create", "ServiceToken": "arn:aws:lambda:us-east-2:123456789012:function:lambda-error-processor-primer-14ROR2T3JKU66", "ResponseURL": "https://cloudformation-custom-resource-response-useast2.s3-us-east-2.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-east-2%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-2: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-2:123456789012:function:lambda-error-processor-primer-14ROR2T3JKU66", "FunctionName": "lambda-error-processor-randomerror-ZWUC391MQAJK" } }

A função é responsável por retornar uma resposta ao URL de retorno que indica êxito ou falha. Para sintaxe de resposta completa, consulte Objetos de resposta de recursos personalizados.

exemplo –AWS CloudFormation Resposta de recursos personalizados

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

O AWS CloudFormation fornece uma biblioteca chamada cfn-response que lida com o envio da resposta. Se definir a função dentro de um modelo, você poderá exigir a biblioteca pelo nome. O AWS CloudFormation adiciona a biblioteca ao pacote de implantação que cria para a função.

O exemplo a seguir invoca uma segunda função. Se a chamada tiver êxito, a função enviará uma resposta de êxito ao AWS CloudFormation e a atualização da pilha continuará.

exemplo Função de recurso personalizado do –

Resources: primer: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs8.10 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 a função que o recurso personalizado invocar não estiver definida em um modelo, você poderá obter o código fonte para cfn-response nomódulo cfn-response, no Guia do usuário do AWS CloudFormation.

Para obter um aplicativo de exemplo que usa um recurso personalizado para garantir que o grupo de logs de uma função seja criado antes de outro recurso que dependa dele, consulte Aplicativo de amostra de processador de erros para o AWS Lambda.

Para obter mais informações sobre recursos personalizados, consulte Recursos personalizados no Guia do usuário do AWS CloudFormation.