配合使用 AWS Lambda和 AWS CodePipeline - AWS Lambda

配合使用 AWS Lambda和 AWS CodePipeline

AWS CodePipeline 是一项使您能够为在 上运行的应用程序创建连续交付管道的服务。AWS您可以创建管道来部署 Lambda 应用程序。您还可以将管道配置为在管道运行时调用 Lambda 函数以执行任务。在 Lambda 控制台中创建 Lambda 应用程序时,Lambda 会创建包括源、构建和部署阶段的管道。

CodePipeline 使用包含任务详细信息的事件异步调用您的函数。以下示例显示了调用名为 my-function 的函数的管道中的事件。

例 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 } } } }

要完成任务,该函数必须调用 CodePipeline API 以发出成功或失败的信号。以下示例 Node.js 函数使用 PutJobSuccessResult 操作来指示成功。它从事件对象获取 API 调用的作业 ID。

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

对于异步调用,Lambda 会对消息排队并在函数返回错误时重试。通过 destination 配置函数,保留函数无法处理的事件。

有关如何配置管道以调用 Lambda 函数的教程,请参阅 AWS CodePipeline 用户指南中的在管道中调用 AWS Lambda 函数

您可以使用AWS CodePipeline为您的 Lambda 应用程序创建持续交付管道。 CodePipeline 将源代码管理、生成和部署资源结合起来,创建一个管道,每当你更改应用程序的源代码时,该管道就会运行。

有关使用AWS Serverless Application Model和创建管道的替代方法AWS CloudFormation,请在 Amazon Web Services YouTube 频道上观看自动部署无服务器应用程序

权限

要调用函数, CodePipeline 管道需要权限才能使用以下 API 操作:

默认管道服务角色包括这些权限。

要完成作业,函数需要在其执行角色中具有以下权限。

  • codepipeline:PutJobSuccessResult

  • codepipeline:PutJobFailureResult

这些权限包含在AWSCodePipelineCustomActionAccess托管策略中。