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

で AWS Lambda を使用するAWS CodePipeline

AWS CodePipeline は、 で実行されるアプリケーション用に継続的な配信パイプラインを作成できるサービスです。AWSLambda アプリケーションをデプロイするパイプラインを作成できます。また、パイプラインの実行時にタスクを実行する 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 はメッセージをキューに入れ、エラーになった呼び出しを再試行します。関数を設定するには、送信先を使用して、関数が処理できなかったイベントを保持します。

Lambda 関数を呼び出すようにパイプラインを設定する方法のチュートリアルについては、AWS CodePipelineユーザーガイドInvoke an AWS Lambda function in a pipeline を参照してください。

AWS CodePipelineを使用すると、Lambda アプリケーションの継続的な配信パイプラインを作成できます。CodePipeline は、ソース管理、構築、デプロイメントの各リソースを組み合わせ、アプリケーションのソースコードが変更されるたびに実行されるパイプラインを作成します。

AWS Serverless Application Model および AWS CloudFormation を使用してパイプラインを作成する別の方法については、Amazon Web Services の YouTube チャンネル「サーバーレスアプリケーションのデプロイを自動化する」を参照してください。

Permissions

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

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

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

  • codepipeline:PutJobSuccessResult

  • codepipeline:PutJobFailureResult

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