Usar o AWS Lambda com o AWS CodePipeline - AWS Lambda

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usar o AWS Lambda com o AWS CodePipeline

O AWS CodePipeline é um serviço que permite criar pipelines de entrega contínua para aplicações que são executadas na AWS. Você pode criar um pipeline para implantar sua aplicação do Lambda. Também pode configurar um pipeline para invocar uma função do Lambda para executar uma tarefa quando o pipeline é executado. Quando você cria uma aplicação do Lambda no console do Lambda, o Lambda cria um pipeline que inclui estágios de origem, compilação e implantação.

CodePipeline invoca sua função de forma assíncrona com um evento que contém detalhes sobre o trabalho. O exemplo a seguir mostra um evento de um pipeline que invocou uma função chamada my-function.

exemplo CodePipeline evento
{ "CodePipeline.job": { "id": "c0d76431-b0e7-xmpl-97e3-e8ee786eb6f6", "accountId": "123456789012", "data": { "actionConfiguration": { "configuration": { "FunctionName": "my-function", "UserParameters": "{\"KEY\": \"VALUE\"}" } }, "inputArtifacts": [ { "name": "my-pipeline-SourceArtifact", "revision": "e0c7xmpl2308ca3071aa7bab414de234ab52eea", "location": { "type": "S3", "s3Location": { "bucketName": "us-west-2-123456789012-my-pipeline", "objectKey": "my-pipeline/test-api-2/TdOSFRV" } } } ], "outputArtifacts": [ { "name": "invokeOutput", "revision": null, "location": { "type": "S3", "s3Location": { "bucketName": "us-west-2-123456789012-my-pipeline", "objectKey": "my-pipeline/invokeOutp/D0YHsJn" } } } ], "artifactCredentials": { "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "secretAccessKey": "6CGtmAa3lzWtV7a...", "sessionToken": "IQoJb3JpZ2luX2VjEA...", "expirationTime": 1575493418000 } } } }

Para concluir o trabalho, a função deve chamar a CodePipeline API para sinalizar sucesso ou falha. O exemplo de função Node.js a seguir usa a operação PutJobSuccessResult para sinalizar êxito. Ela obtém o ID de trabalho para a chamada de API do objeto de evento.

exemplo index.js
var AWS = require('aws-sdk') var codepipeline = new AWS.CodePipeline() exports.handler = async (event) => { console.log(JSON.stringify(event, null, 2)) var jobId = event["CodePipeline.job"].id var params = { jobId: jobId } return codepipeline.putJobSuccessResult(params).promise() }

Para a invocação assíncrona, o Lambda coloca em fila a mensagem e tenta novamente caso a sua função retorne um erro. Configure sua função com um destino para manter os eventos que a função não puder processar.

Para obter um tutorial sobre como configurar um pipeline para invocar uma função do Lambda, consulte Invocar uma função do AWS Lambda em um pipeline no Manual do usuário do AWS CodePipeline.

Você pode usar AWS CodePipeline para criar um pipeline de entrega contínua para seu aplicativo Lambda. CodePipeline combina recursos de controle de origem, construção e implantação para criar um pipeline que é executado sempre que você faz uma alteração no código-fonte do seu aplicativo.

Para um método alternativo de criar um pipeline com AWS Serverless Application Model eAWS CloudFormation, assista Automatize suas implantações de aplicativos sem servidor no canal Amazon Web Services. YouTube

Permissões

Para invocar uma função, um CodePipeline pipeline precisa de permissão para usar as seguintes operações de API:

A função de serviço de pipeline padrão inclui essas permissões.

Para concluir um trabalho, a função precisa das seguintes permissões em sua função de execução.

  • codepipeline:PutJobSuccessResult

  • codepipeline:PutJobFailureResult

Essas permissões estão incluídas na política AWSCodePipelineCustomActionAccessgerenciada.