Lambda 環境変数の操作
環境変数を使用すると、コードを更新せずに関数の動作を調整できます。環境変数は、関数のバージョン固有の設定に保存される文字列のペアです。Lambda ランタイムは、環境変数をコードで使用できるようにし、関数と呼び出しリクエストに関する情報を含む追加の環境変数を設定します。
注記
セキュリティを強化するには、データベースの認証情報や API キーや認可トークンなどその他の機密情報を保存するために、環境変数の代わりに AWS Secrets Manager を使用することをお勧めします。詳細については、「Lambda 関数で Secrets Manager シークレットを使用する」を参照してください。
環境変数は、関数を呼び出す前には評価されません。定義した値はリテラル文字列とみなされ、展開されません。関数コードで変数の評価を実行します。
Lambda 環境変数の作成
Lambda コンソール、AWS Command Line Interface (AWS CLI)、AWS Serverless Application Model (AWS SAM)、または AWS SDK を使用して、Lambda で環境変数を設定できます。
環境変数のシナリオ例
環境変数を使用して、テスト環境および本番環境における関数の動作をカスタマイズできます。例えば、同じコードでも設定が異なる 2 つの関数を作成できます。1 つの関数はテストデータベースに接続し、もう 1 つはプロダクションデータベースに接続します。この状況では、環境変数を使用して、データベースのホスト名とその他の接続に関する詳細を関数に渡します。
次の例は、データベースホストとデータベース名を環境変数として定義する方法を示しています。
テスト環境で本番環境よりも多くのデバッグ情報を生成する場合は、環境変数を設定して、より詳細なログ記録またはトレースを使用するようにテスト環境を設定できます。
例えばテスト環境では、LOG_LEVEL キーと、デバッグまたはトレースのログレベルを示す値を使用して環境変数を設定できます。Lambda 関数のコードで、この環境変数を使用してログレベルを設定できます。
Python と Node.js の次のコード例は、これを実現する方法を示しています。これらの例では、環境変数の値が Python の場合は DEBUG、Node.js の場合は debug であることを前提としています。
Lambda 環境変数の取得
関数コード内の環境変数を取得するには、プログラミング言語の標準メソッドを使用します。
Lambda は、環境変数を保管時に暗号化して安全に保存します。別の暗号化キーを使用したり、クライアント側で環境変数値を暗号化したり、AWS CloudFormation テンプレートで AWS Secrets Manager を使用して環境変数を設定したりするように Lambda を設定できます。
定義されたランタイム環境変数
Lambda ランタイムは、初期化中にいくつかの環境変数を設定します。ほとんどの環境変数は、関数またはランタイムに関する情報を提供します。これらの環境変数のキーは予約済みであるため、関数設定では設定できません。
予約済み環境変数
-
_HANDLER- 関数に設定されているハンドラの場所。 -
_X_AMZN_TRACE_ID- X-Ray トレースヘッダー。この環境変数は呼び出しごとに変化します。-
この環境変数は OS 専用ランタイム (
providedランタイムファミリー) には定義されていません。カスタムランタイムには 次の呼び出し からのLambda-Runtime-Trace-Idレスポンスのヘッダーに_X_AMZN_TRACE_IDを設定できます。 -
Java ランタイムバージョン 17 以降では、この環境変数は使用されません。代わりに、Lambda はトレース情報を
com.amazonaws.xray.traceHeaderシステムプロパティに保存します。
-
-
AWS_DEFAULT_REGION- Lambda 関数が実行されるデフォルトの AWS リージョン。 -
AWS_REGION- Lambda 関数が実行される AWS リージョン。定義されている場合、この値はAWS_DEFAULT_REGIONを上書きします。-
AWS SDK での AWS リージョン 環境変数を使用する方法の詳細については、「AWS SDK とツールリファレンスガイド」の「AWSリージョン」を参照してください。
-
-
AWS_EXECUTION_ENV–AWS_Lambda_(例:AWS_Lambda_java8) のプレフィックスが付いたランタイム識別子。この環境変数は OS 専用ランタイム (providedランタイムファミリー) には定義されていません。 -
AWS_LAMBDA_FUNCTION_NAME- 関数の名前。 -
AWS_LAMBDA_FUNCTION_MEMORY_SIZE- 関数で使用できるメモリの量 (MB 単位)。 -
AWS_LAMBDA_FUNCTION_VERSION- 実行される関数のバージョン。 -
AWS_LAMBDA_INITIALIZATION_TYPE- 関数の初期化タイプ。これは、on-demand、provisioned-concurrency、またはsnap-startになります。詳細については、「プロビジョニングされた同時実行の設定」または「Lambda SnapStart による起動パフォーマンスの向上」を参照してください。 -
AWS_LAMBDA_LOG_GROUP_NAME、AWS_LAMBDA_LOG_STREAM_NAME- Amazon CloudWatch Logs グループの名前と関数のストリーム。AWS_LAMBDA_LOG_GROUP_NAMEおよびAWS_LAMBDA_LOG_STREAM_NAMEの環境変数は Lambda SnapStart 関数では使用できません。 -
AWS_ACCESS_KEY、AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_SESSION_TOKEN– 関数の実行ロールから取得したアクセスキー。 -
LAMBDA_TASK_ROOT- Lambda 関数コードへのパス。 -
LAMBDA_RUNTIME_DIR- ランタイムライブラリへのパス。
以下の追加の環境変数は予約されていないため、関数設定で拡張できます。
予約されていない環境変数
-
LANG- ランタイムのロケール (en_US.UTF-8)。 -
PATH- 実行パス (/usr/local/bin:/usr/bin/:/bin:/opt/bin)。 -
LD_LIBRARY_PATH- システムライブラリのパス (/var/lang/lib:/lib64:/usr/lib64:$LAMBDA_RUNTIME_DIR:$LAMBDA_RUNTIME_DIR/lib:$LAMBDA_TASK_ROOT:$LAMBDA_TASK_ROOT/lib:/opt/lib)。 -
NODE_PATH- (Node.js) Node.js ライブラリのパス (/opt/nodejs/node12/node_modules/:/opt/nodejs/node_modules:$LAMBDA_RUNTIME_DIR/node_modules)。 -
NODE_OPTIONS– (Node.js) Node.js ランタイムの場合、NODE_OPTIONSを使用して、Lambda がデフォルトで無効にする実験的機能を再度有効にできます。 -
PYTHONPATH– (Python) Python ライブラリパス ($LAMBDA_RUNTIME_DIR)。 -
GEM_PATH- (Ruby) Ruby ライブラリのパス ($LAMBDA_TASK_ROOT/vendor/bundle/ruby/3.3.0:/opt/ruby/gems/3.3.0)。 -
AWS_XRAY_CONTEXT_MISSING- X-Ray トレースの場合、Lambda は X-Ray SDK からランタイムエラーがスローされないように、これをLOG_ERRORに設定します。 -
AWS_XRAY_DAEMON_ADDRESS- X-Ray トレーシングの場合、X-Ray デーモンの IP アドレスとポート。 -
AWS_LAMBDA_DOTNET_PREJIT– (.NET) この変数を設定して、.NET 固有のランタイムの最適化を有効または無効にします。値にはalways、never、およびprovisioned-concurrencyがあります。詳細については、「関数に対するプロビジョニングされた同時実行数の設定」を参照してください。 -
TZ- 環境のタイムゾーン (:UTC)。実行環境は、システムクロックを同期するために NTP を使用します。
表示されるサンプル値は、最新のランタイムを反映しています。特定の変数やその値の有無は、以前のランタイムでは異なる場合があります。