カピバラ好きなエンジニアブログ

興味ある技術とか検証した内容を赴くままに書いていきます。カピバラの可愛さこそ至高。

AWS Lambdaの予約済み環境変数を見る

AWS Lambdaではユーザが環境変数を設定することができますが、Lambdaの初期化中に設定されるランタイム環境変数というものもあります。
ランタイム環境変数は予約済み環境変数と予約されていないが関数設定で拡張可能な環境変数があります。

今回は予約済み環境変数について実際にLambdaから見てみたので、備忘として残しておきます。

docs.aws.amazon.com

尚、LambdaのランタイムはPyhton3.7を使っています。


実施作業

関数作成

細かな作成手順は省略しますが、シンプルに以下のような関数を作成しました。
取得対象は、本記事冒頭に貼ったAWS公式リンクの中にあります。

import os

def lambda_handler(event, context):
    env_list=[]
    env_list.append(os.getenv("_HANDLER"))
    env_list.append(os.getenv("_X_AMZN_TRACE_ID"))
    env_list.append(os.getenv("AWS_REGION"))
    env_list.append(os.getenv("AWS_EXECUTION_ENV"))
    env_list.append(os.getenv("AWS_LAMBDA_FUNCTION_NAME"))
    env_list.append(os.getenv("AWS_LAMBDA_FUNCTION_MEMORY_SIZE"))
    env_list.append(os.getenv("AWS_LAMBDA_FUNCTION_VERSION "))
    env_list.append(os.getenv("AWS_LAMBDA_INITIALIZATION_TYPE"))
    env_list.append(os.getenv("AWS_LAMBDA_LOG_GROUP_NAME"))
    env_list.append(os.getenv("AWS_LAMBDA_LOG_STREAM_NAME"))
    env_list.append(os.getenv("AWS_ACCESS_KEY_ID"))
    env_list.append(os.getenv("AWS_SECRET_ACCESS_KEY"))
    env_list.append(os.getenv("AWS_SESSION_TOKEN"))
    env_list.append(os.getenv("LAMBDA_TASK_ROOT"))
    env_list.append(os.getenv("LAMBDA_RUNTIME_DIR"))
    env_list.append(os.getenv("TZ"))
    for env in env_list: 
      print(env)


関数実行

実行した結果は以下のようになりました。

lambda_function.lambda_handler
Root=1-6045bb70-03dca...[長いので省略]...c3d228;Parent=21aa75f03f8d24af;Sampled=0
ap-northeast-1
AWS_Lambda_python3.7
lambda-test
128
None
on-demand
/aws/lambda/lambda-test
2021/03/08/[$LATEST]40b13d2a1e354901a43870960926072c
ASIA5WU...[長いので省略]...JZ3WUGA63
yhPI...[長いので省略]...XkA==
/var/task
/var/runtime
:UTC



表にするとこんな感じです

環境変数 出力値
_HANDLER lambda_function.lambda_handler
_X_AMZN_TRACE_ID Root=1-6045bb70-03dca...[長いので省略]...c3d228;Parent=21aa75f03f8d24af;Sampled=0
AWS_REGION ap-northeast-1
AWS_EXECUTION_ENV AWS_Lambda_python3.7
AWS_LAMBDA_FUNCTION_NAME lambda-test
AWS_LAMBDA_FUNCTION_MEMORY_SIZE 128
AWS_LAMBDA_FUNCTION_VERSION None
AWS_LAMBDA_INITIALIZATION_TYPE on-demand
AWS_LAMBDA_LOG_GROUP_NAME /aws/lambda/lambda-test
AWS_LAMBDA_LOG_STREAM_NAME 2021/03/08/[$LATEST]40b13d2a1e354901a43870960926072c
AWS_ACCESS_KEY_ID ASIA5WU...[長いので省略]...JZ3WUGA63
AWS_SECRET_ACCESS_KEY yhPIMDgfk...[長いので省略]...//Ar4c
AWS_SESSION_TOKEN IQoJb...[長いので省略]...XkA==
LAMBDA_TASK_ROOT /var/task
LAMBDA_RUNTIME_DIR /var/runtime
TZ :UTC



各予約済みランタイム環境変数についての説明は以下です。(公式リンクに書いてます)

_HANDLER 関数に設定されているハンドラーの場所。
_X_AMZN_TRACE_ID X-Ray トレースヘッダー。
AWS_REGION Lambda 関数を実行する AWS リージョン。
AWS_EXECUTION_ENV AWS_Lambda_ のプレフィックスが付いたランタイム識別子 (例: AWS_Lambda_java8)。
AWS_LAMBDA_FUNCTION_NAME 関数の名前。
AWS_LAMBDA_FUNCTION_MEMORY_SIZE 関数で使用できるメモリの量 (MB 単位)。
AWS_LAMBDA_FUNCTION_VERSION 実行される関数のバージョン。
AWS_LAMBDA_INITIALIZATION_TYPE on-demand または provisioned-concurrency のいずれかがで指定される。
AWS_LAMBDA_LOG_GROUP_NAME、AWS_LAMBDA_LOG_STREAM_NAME Amazon CloudWatch Logs グループの名前と関数のストリーム。
AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_SESSION_TOKEN 関数の実行ロールから取得したアクセスキー。
AWS_LAMBDA_RUNTIME_API (カスタムランタイム) ランタイム API のホストおよびポート。
LAMBDA_TASK_ROOT Lambda 関数コードへのパス。
LAMBDA_RUNTIME_DIR ランタイムライブラリへのパス。
TZ 環境のタイムゾーン (UTC)。実行環境は、システムクロックを同期するために NTP を使用します。

感想及び所感

AWS_REGIONが環境変数から取れることを知ったので、ついでに他の環境変数も確認してみました。