雲のメモ帳

猫とクラウドと旅行が好きなインフラエンジニアです。 日々の調べたことや興味が持ったことをこのブログにアウトプットします。

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.16.6 documentation

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

サンプルコード

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

github.com