AWS CodePipelineのパイプラインレベルの変数をLambdaに渡す

AWS CodePipelineのパイプラインレベルの変数をLambdaに渡す

Clock Icon2025.02.10

はじめに

AWS CodePipelineのパイプラインタイプV2から、パイプラインレベルの変数を使えるようになりました。パイプラインレベルの変数は、パイプライン内のすべてのステージで利用できるため、パイプライン全体で共通の情報を扱う際に便利な機能です。

以下の記事も合わせてご参照ください。

https://dev.classmethod.jp/articles/codepipeline-pipelinetype/

この記事では、パイプラインレベルの変数をLambda関数に渡す方法について説明します。

Lambda関数にパイプラインレベルの変数を渡す

今回はパイプラインに以下のような変数を設定してみました。

codepipline-variables

変数を設定しただけではLambda関数には渡されません。 ユーザーパラメーター として明示的に指定する必要があります。

Lambdaに渡す文字列ですが、パイプラインレベルの変数は variables というような名前空間でアクセスできます。渡す変数が1つだけであれば、直接 #{variables.url} といったように指定すれば良いのですが、複数ある場合は以下のようにJSON形式にしてあげると受け取った側で処理しやすくなります。

{
    "url": "#{variables.url}",
    "my_path": "#{variables.path}"
}

キーはもちろんですが、変数を指定しているバリューもそれぞれダブルクォートで囲むことを忘れないようにしてください。

この文字列を、Lambdaアクションの ユーザーパラメーター に設定します。

LambdaAction

これでパイプラインを実行すると、Lambda関数へパイプラインレベルの変数が渡されます。

変数を受け取るLambda関数のコード

変数を渡す側の準備ができたので、次は受け取る側のLambda関数のコードを書いていきます。

ユーザーパラメータは、eventオブジェクトの CodePipeline.job に格納されています。以下のようにして取得できます。

user_params = json.loads(event["CodePipeline.job"]["data"]["actionConfiguration"]["configuration"]["UserParameters"])

print("url: " + user_params["url"])
print("path: " + user_params["my_path"])

CodePipeline.job には、インプットアーティファクトなどの情報も格納されていますが、今回は説明を省きます。詳しくは公式ドキュメントもご参照ください。

https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/actions-invoke-lambda-function.html#actions-invoke-lambda-function-json-event-example

関数の実行ログを見てみますと、以下のように変数が取得できていることが確認できます。

Lambda-logs

おわりに

CodePipelineからLambdaを呼び出す場合、パイプラインレベルの変数を用いればLambda関数をより汎用的に使うことができるようになります。

ただし、パイプラインレベルの変数は暗号化されていないため、機密情報を扱う際は十分注意が必要です。代わりに、CodeBuildやLambda関数内の環境変数を使うことで、より安全に機密情報を扱うことができます。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.