CodePipeline から Lambda(Python)を実行した際に、「実行中」 からステータスが変わらない

最近 CI/CD環境の構築をしており、CodePipelineからLambdaを実行した際にハマったのでメモを残します。

問題

問題

CodePipelineからLambdaを実行。 実行したLambdaは正常終了しているのに関わらず、CodePipeline上のステータスが 実行中 のまま変化しない。20分くらい?するとタイムアウトでエラーとなった。

環境

  • Lambda(Pyhton 3.8)
  • boto3

原因と解決方法

原因

CodePipelineから実行したLambdaから、実行完了のシグナルをCodePipelineに送る必要があった。
エラーが発生したCodePipelineでは実行したLambda側でシグナルを送るようになっていなかったため、CodePipelineは待ち状態となり最終的にタイムアウトとなりました。

解決方法

LambdaからCodePipelineに実行結果のシグナルを送信する。
Boto3では以下のメソッドを使用します。

◆ 成功 put_job_success_result
CodePipeline — Boto3 Docs 1.14.33 documentation

◆ 失敗 put_job_failure_result
CodePipeline — Boto3 Docs 1.14.33 documentation
失敗の場合は、失敗の理由を message で渡す必要があります。

サンプルコード

シグナル送付に必要となる job_id は、 event['CodePipeline.job']['id'] より取得できます。

github.com