Uso de AWS Lambda con AWS CodePipeline - AWS Lambda

Uso de AWS Lambda con AWS CodePipeline

AWS CodePipeline es un servicio que le permite crear canalizaciones de entrega continua para aplicaciones que se ejecutan en AWS. Puede crear una canalización para implementar la aplicación Lambda. También puede configurar una canalización para invocar una función Lambda que realice una tarea cuando se ejecute la canalización. Cuando crea una aplicación Lambda en la consola de Lambda, Lambda crea una canalización que incluye las etapas de origen, creación e implementación.

CodePipeline invoca la función de forma asincrónica con un evento que contiene detalles sobre el trabajo. En el ejemplo siguiente se muestra un evento de una canalización que ha invocado una función denominada my-function.

ejemplo CodePipeline event

{ "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 completar el trabajo, la función debe llamar a la API de CodePipeline para señalizar si se ha realizado correcta o incorrectamente. En el ejemplo siguiente de función de Node.js se utiliza la operación PutJobSuccessResult para señalizar que se ha realizado correctamente. Obtiene el ID de trabajo para la llamada a la API desde el objeto de evento.

ejemplo 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() }

En la invocación asincrónica, Lambda pone en cola el mensaje y, si la función devuelve un error, lo intenta de nuevo. Configure la función con un destino para conservar los eventos que la función no puede procesar.

Para ver un tutorial sobre cómo configurar una canalización para invocar una función de Lambda, consulte Invocar una función de AWS Lambda en una canalización en la Guía del usuario de AWS CodePipeline.

Puede utilizar AWS CodePipeline para crear una canalización de entrega continua para una aplicación de Lambda. CodePipeline combina recursos de control de código fuente, compilación e implementación para crear una canalización que se ejecuta cada vez que se realiza un cambio en el código fuente de la aplicación.

Para conocer otra forma de crear una canalización con Modelo de aplicación sin servidor de AWS y AWS CloudFormation, vea Automate Your Serverless Application Deployments en el canal de YouTube de Amazon Web Services.

Permisos

Para invocar una función, una canalización CodePipeline necesita permiso para utilizar las siguientes operaciones de la API:

El rol de servicio de canalizaciones predeterminado incluye estos permisos.

Para completar un trabajo, el rol necesita los siguientes permisos en su rol de ejecución.

  • codepipeline:PutJobSuccessResult

  • codepipeline:PutJobFailureResult

Estos permisos se incluyen en la política administrada AWSCodePipelineCustomActionAccess.