AWS Lambda を AWS CodePipeline で使用する - AWS Lambda

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 関数を呼び出す」を参照してください。

アクセス許可

関数を呼び出すには、CodePipeline パイプラインに以下の API オペレーションを使用するためのアクセス許可が必要です。

デフォルトのパイプラインサービスロールには、これらのアクセス許可が含まれています。

ジョブを完了するには、関数の実行ロールに以下のアクセス許可が必要です。

  • codepipeline:PutJobSuccessResult

  • codepipeline:PutJobFailureResult

これらのアクセス許可は、AWSCodePipelineCustomActionAccess 管理ポリシーに含まれています。