Usar o AWS Lambda com o AWS CodePipeline - AWS Lambda

Usar o AWS Lambda com o AWS CodePipeline

O AWS CodePipeline é um serviço que permite criar pipelines de entrega contínua para aplicativos que são executados na AWS. Você pode criar um pipeline para implantar seu aplicativo 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 um aplicativo do Lambda no console do Lambda, o Lambda cria um pipeline que inclui estágios de origem, compilação e implantação.

O CodePipeline invoca a 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 Evento CodePipeline

{ "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 API do CodePipeline para sinalizar êxito 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 d Lambda, consulte Invocar uma função do AWS Lambda em um pipeline no Guia do usuário do AWS CodePipeline.

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

Para obter um método alternativo de criação de um pipeline com o Modelo de aplicativo sem servidor da AWS e o AWS CloudFormation, assista a Automate your serverless application deployments no canal do YouTube da Amazon Web Services.

Permissões

Para invocar uma função, um pipeline do CodePipeline 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 gerenciada AWSCodePipelineCustomActionAccess.