配合使用 Amazon Lambda和 Amazon CodePipeline - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

配合使用 Amazon Lambda和 Amazon CodePipeline

Amazon CodePipeline 是一项使您能够为在 上运行的应用程序创建连续交付管道的服务。Amazon您可以创建管道来部署 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 函数的教程,请参阅 Amazon CodePipeline 用户指南中的在管道中调用 Amazon Lambda 函数

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

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

权限

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

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

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

  • codepipeline:PutJobSuccessResult

  • codepipeline:PutJobFailureResult

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