実行されている環境が AWS Lambda かどうか判定する方法

Published: 2022/10/23


背景

AWS Lambda はコンテナでの実行が可能になったので、例えば Rails など、任意のアプリケーションをデプロイできるようになった。

ただそうすると、あるバックエンドのウェブアプリケーションがあったときに、それが自身が今 Lambda で起動しているのかどうかを知りたくなる。

ウェブアプリケーションのプロセスが、それを知るにはどうしたら良いのかを調べた際の記録。

答え: AWS_LAMBDA_RUNTIME_API を利用する

AWS Lambda は、登録された関数の実行の際に、いくつかの環境変数を定義する。 その中でも、コンテナベースの Lambda である場合に、コンテナが外部 Lambda 環境と通信するために特別に設定される環境変数として、 AWS_LAMBDA_RUNTIME_API がある。 これは、その目的上 Lambda をコンテナ上で動かすという文脈においてのみに影響がある環境変数なので、例えば AWS_REGION などといった他の AWS 上の文脈でも関係してくるような環境変数たちと比較して、影響範囲が必要十分的であって今回の目的に対して都合が良い。

実際、こちらの公式資料においては、 Lambda 環境だったら Lambda 用のプロセスを立ち上げ、そうでなかったら AWS Lambda Runtime Interface Emulator (通称 RIE) を起動するイメージの作成にあたって、この環境変数を用いて分岐する方法が案内されている。 以下そのコードを抜粋して、

#!/bin/sh
if [ -z "${AWS_LAMBDA_RUNTIME_API}" ]; then
  exec /usr/local/bin/aws-lambda-rie /usr/local/bin/npx aws-lambda-ric $@
else
  exec /usr/local/bin/npx aws-lambda-ric $@
fi

なので、例えば Rails アプリケーションを開発していて、それを Fargate と Lambda に乗っけるような場合において、動いているプラットフォームがどこなのかをアプリケーション(docker image)自身に判断させたいような場合には、この環境変数を使えば良い。


Tags: aws-lambdaaws

関連記事