AWS Lambda 環境変数の使用
環境変数を使用すると、コードを更新せずに関数の動作を調整できます。環境変数は、関数のバージョン固有の設定に保存される文字列のペアです。Lambda ランタイムは、環境変数をコードで使用できるようにし、関数と呼び出しリクエストに関する情報を含む追加の環境変数を設定します。
データベースのセキュリティを強化するには、環境変数の代わりに AWS Secrets Manager を使用してデータベースの認証情報を保存することをお勧めします。詳細については、「Lambda 関数のデータベースアクセスの設定」を参照してください。
キーと値を指定して、非公開バージョンの関数に環境変数を設定します。バージョンを公開するとき、他のバージョン固有の設定とともに、そのバージョンの環境変数がロックされます。
Lambda コンソールで環境変数を設定するには
-
Lambda コンソールの [Functions (関数)
] ページを開きます。 -
関数を選択します。
-
選択がまだの場合は、[コード] をクリックします。
-
下にスクロールします。[環境変数] で、[編集] を選択します。
-
[環境変数の追加] を選択します
-
キーと値を入力します。
要件
-
キーは文字で始まり、少なくとも 2 文字です。
-
キーには、文字、数字、およびアンダースコア (
_
) のみを含める。 -
キーは Lambda によって予約されていない。
-
すべての環境変数の合計サイズは 4 KB を超えない。
-
-
[Save] を選択します。
環境変数を使用して、環境固有の設定をコードに渡します。たとえば、同じコードでも設定が異なる 2 つの関数を持つことができます。1 つの関数はテストデータベースに接続し、もう 1 つはプロダクションデータベースに接続します。この状況では、環境変数を使用して、データベースのホスト名とその他の接続の詳細を関数に伝えます。
次の例は、データベースホストとデータベース名を環境変数として定義する方法を示しています。

テスト環境で本番環境よりも多くのデバッグ情報を生成する場合は、環境変数を設定して、より詳細なログ記録またはトレースを使用するようにテスト環境を設定できます。
環境変数は、関数呼び出しの前には評価されません。定義した値はリテラル文字列とみなされ、展開されません。関数コードで変数の評価を実行します。
関数コード内の環境変数を取得するには、プログラミング言語の標準メソッドを使用します。
Lambda は、環境変数を保管時に暗号化して安全に保存します。別の暗号化キーを使用したり、クライアント側で環境変数値を暗号化したり、AWS Secrets Manager で AWS CloudFormation テンプレートを使用して環境変数を設定したりするように Lambda を設定できます。
ランタイム環境変数
Lambda ランタイムは、初期化中にいくつかの環境変数を設定します。ほとんどの環境変数は、関数またはランタイムに関する情報を提供します。これらの環境変数のキーは予約済みであるため、関数設定では設定できません。
予約済み環境変数
-
_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
– 関数の実行ロールから取得したアクセスキー。 -
LAMBDA_TASK_ROOT
– Lambda 関数コードへのパス。 -
LAMBDA_RUNTIME_DIR
– ランタイムライブラリへのパス。 -
TZ
– 環境のタイムゾーン (UTC
)。実行環境は、システムクロックを同期するために NTP を使用します。
以下の追加の環境変数は予約されていないため、関数設定で拡張できます。
予約されていない環境変数
-
LANG
– ランタイムのロケール (en_US.UTF-8
)。 -
PATH
– 実行パス (/usr/local/bin:/usr/bin/:/bin:/opt/bin
)。 -
LD_LIBRARY_PATH
– システムライブラリのパス (/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
)。 -
PYTHONPATH
– (Python 2.7、3.6、3.8) Python ライブラリのパス ($LAMBDA_RUNTIME_DIR
)。 -
GEM_PATH
– (Ruby) Ruby ライブラリのパス ($LAMBDA_TASK_ROOT/vendor/bundle/ruby/2.5.0:/opt/ruby/gems/2.5.0
)。 -
AWS_XRAY_CONTEXT_MISSING
– X-Ray トレースで、X-Ray SDK からランタイムエラーがスローされないように、Lambda は、これをLOG_ERROR
に設定します。 -
AWS_XRAY_DAEMON_ADDRESS
– X-Ray トレース用の X-Ray デーモンの IP アドレスとポート。 -
AWS_LAMBDA_DOTNET_PREJIT
– .NET 3.1 ランタイムの場合、この変数を設定して、.NET 3.1 固有のランタイムの最適化を有効または無効にします。値にはalways
、never
、およびprovisioned-concurrency
があります。詳細については、「プロビジョニングされた同時実行数の設定」を参照してください。
表示されるサンプル値は、最新のランタイムを反映しています。特定の変数やその値の有無は、以前のランタイムでは異なる場合があります。
環境変数の保護
Lambda は、アカウントで作成したキー (AWS 管理のカスタマーマスターキー (CMK)) を使用して環境変数を暗号化します。このキーの使用は無料です。デフォルトのキーの代わりに、Lambda で使用する独自のキーを指定することもできます。
キーを指定すると、そのキーへのアクセス権を持つアカウントのユーザーのみが、関数の環境変数を表示または管理できます。組織には、暗号化に使用するキーを管理したり、キーの更新時期を制御したりするための内外の要件が存在する場合もあります。
カスタマー管理の CMK を使用するには
-
Lambda コンソールの [Functions (関数)
] ページを開きます。 -
関数を選択します。
-
選択がまだの場合は、[コード] をクリックします。
-
下にスクロールします。[環境変数] で、[編集] を選択します。
-
[暗号化設定] を展開します。
-
[カスタマーマスターキーの使用] を選択します。
-
カスタマー管理の CMK を選択します。
-
[Save] を選択します。
カスタマー管理の CMK には、標準の AWS KMS 料金
ユーザーや関数の実行ロールには、デフォルトの暗号化キーを使用するための AWS KMS アクセス許可が不要です。カスタマー管理の CMK を使用するには、キーを使用するためのアクセス許可が必要です。Lambda はこれらのアクセス許可を使用してキーに対する付与を作成します。Lambda は、このキーを暗号化に使用できます。
-
kms:ListAliases
– Lambda コンソールでキーを表示します。 -
kms:CreateGrant
kms:Encrypt
– 関数でカスタマー管理の CMK を設定します。 -
kms:Decrypt
– カスタマー管理の CMK で暗号化された環境変数を表示および管理します。
これらのアクセス許可は、ユーザーアカウントまたはキーのリソースベースのアクセス許可ポリシーから取得できます。ListAliases
は Lambda の管理ポリシーから提供されます。キーポリシーは、キーユーザーグループのユーザーに対して残りのアクセス許可を付与します。
Decrypt
アクセス許可を持たないユーザーは、引き続き関数を管理できますが、Lambda コンソールで環境変数を表示または管理することはできません。ユーザーが環境変数を表示できないようにするには、デフォルトキー、カスタマー管理キー、またはすべてのキーへのアクセスを拒否するステートメントをユーザーのアクセス許可に追加します。
例 IAM ポリシー – キー ARN によるアクセスの拒否
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Deny", "Action": [ "kms:Decrypt" ], "Resource": "arn:aws:kms:us-east-2:123456789012:key/3be10e2d-xmpl-4be4-bc9d-0405a71945cc" } ] }

キーのアクセス許可の管理の詳細については、「AWS KMS でのキーポリシーの使用」を参照してください。
また、環境変数値を Lambda に送信する前にクライアント側で暗号化し、関数コードで復号することもできます。これにより、キーを使用するアクセス許可を持つユーザーであっても、Lambda コンソールと API 出力でシークレットの値が隠されます。コードでは、暗号化された値を環境から取得し、AWS KMS API を使用して復号します。
クライアント側で環境変数を暗号化するには
-
Lambda コンソールの [Functions (関数)
] ページを開きます。 -
関数を選択します。
-
選択がまだの場合は、[コード] をクリックします。
-
下にスクロールします。[環境変数] で、[編集] を選択します。
-
[暗号化設定] を展開します。
-
[Enable helpers for encryption in transit (転送中の暗号化のためにヘルパーを有効にする)] を選択します。
-
変数の横にある [暗号化] を選択して、値を暗号化します。
-
[Save] (保存) をクリックします。
コンソール暗号化ヘルパーを使用する場合、関数に実行ロールで kms:Decrypt
API オペレーションを呼び出すアクセス許可が必要です。
関数の言語のサンプルコードを表示するには、環境変数の横にある [コード] を選択します。サンプルコードは、関数の環境変数を取得してその値を復号する方法を示しています。
もう 1 つのオプションは、パスワードを AWS Secrets Manager シークレットに保存することです。AWS CloudFormation テンプレート内のシークレットを参照して、データベースにパスワードを設定できます。また、Lambda 関数に環境変数の値を設定することもできます。例については、次のセクションを参照ください。
Lambda API を使用した環境変数の設定
AWS CLI または AWS SDK で環境変数を管理するには、以下の API オペレーションを使用します。
次の例では、my-function
という名前の関数に 2 つの環境変数を設定します。
$
aws lambda update-function-configuration --function-name my-function \ --environment "Variables={BUCKET=my-bucket,KEY=file.txt}"
update-function-configuration
コマンドを使用して環境変数を適用すると、Variables
構造体の内容全体が置き換えられます。新しい環境変数を追加するときに既存の環境変数を保持するには、リクエストに既存の値をすべて含めます。
現在の設定を取得するには、get-function-configuration
コマンドを使用します。
$
aws lambda get-function-configuration --function-name my-function
{ "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs12.x", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Environment": { "Variables": { "BUCKET": "my-bucket", "KEY": "file.txt" } }, "RevisionId": "0894d3c1-2a3d-4d48-bf7f-abade99f3c15", ... }
設定の読み取り時と更新時の間で値が変わらないようにするには、get-function-configuration
の出力のリビジョン ID をパラメータとして update-function-configuration
に渡します。
関数の暗号化キーを設定するには、KMSKeyARN
オプションを設定します。
$
aws lambda update-function-configuration --function-name my-function \ --kms-key-arn arn:aws:kms:us-east-2:123456789012:key/055efbb4-xmpl-4336-ba9c-538c7d31f599
サンプルコードとテンプレート
このガイドの GitHub リポジトリのサンプルアプリケーションは、関数コードと AWS CloudFormation テンプレートで環境変数を使用する方法を示しています。
サンプルアプリケーション