将 AWS Lambda 与 AWS CodePipeline 结合使用 - AWS Lambda
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

将 AWS Lambda 与 AWS CodePipeline 结合使用

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

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

例 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": "aws-us-west-2-123456789012-my-pipeline", "objectKey": "my-pipeline/test-api-2/TdOSFRV" } } } ], "outputArtifacts": [ { "name": "invokeOutput", "revision": null, "location": { "type": "S3", "s3Location": { "bucketName": "aws-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 将消息排队,并在函数返回错误时重试。将函数配置为带有目标,以保留函数无法处理的事件。

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

您可以使用 AWS CodePipeline 为 Lambda 应用程序创建持续交付管道。CodePipeline 结合了源代码控制、构建和部署资源,以创建一个在您更改应用程序源代码时运行的管道。

对于使用 AWS 无服务器应用程序模型 和 AWS CloudFormation 创建管道的替代方法,请观看 Amazon Web Services YouTube 频道上的自动执行您的无服务器应用程序部署

权限

要调用函数,CodePipeline 管道需要具有使用以下 API 操作的权限:

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

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

  • codepipeline:PutJobSuccessResult

  • codepipeline:PutJobFailureResult

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