最近 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.16.6 documentation
◆ 失敗
put_job_failure_result
CodePipeline — Boto3 Docs 1.16.6 documentation
失敗の場合は、失敗の理由を message で渡す必要があります。
サンプルコード
シグナル送付に必要となる job_id は、 event['CodePipeline.job']['id'] より取得できます。