Lambda 環境変数の操作 - AWS Lambda

Lambda 環境変数の操作

環境変数を使用すると、コードを更新せずに関数の動作を調整できます。環境変数は、関数のバージョン固有の設定に保存される文字列のペアです。Lambda ランタイムは、環境変数をコードで使用できるようにし、関数と呼び出しリクエストに関する情報を含む追加の環境変数を設定します。

注記

セキュリティを強化するには、データベースの認証情報や API キーや認可トークンなどその他の機密情報を保存するために、環境変数の代わりに AWS Secrets Manager を使用することをお勧めします。詳細については、「AWS Secrets Manager を使用したシークレットの作成および管理」を参照してください。

環境変数は、関数を呼び出す前には評価されません。定義した値はリテラル文字列とみなされ、展開されません。関数コードで変数の評価を実行します。

Lambda 環境変数の作成

Lambda コンソール、AWS Command Line Interface (AWS CLI)、AWS Serverless Application Model (AWS SAM)、または AWS SDK を使用して、Lambda で環境変数を設定できます。

Console

環境変数は、関数の未公開バージョンで定義します。バージョンを公開するとき、他のバージョン固有の構成設定とともに、そのバージョンの環境変数がロックされます。

関数の環境変数を作成するには、キーと値を定義します。関数は、キーの名前を使用して、環境変数の値を取得します。

Lambda コンソールで環境変数を設定するには
  1. Lambda コンソールの [関数ページ] を開きます。

  2. 関数を選択します。

  3. [設定] タブを選択してから、[環境変数] を選択します。

  4. [環境変数] で、[編集] を選択します。

  5. [環境変数の追加] を選択します。

  6. キーと値を入力します。

    要件
    • キーは文字で始まり、少なくとも 2 文字です。

    • キーには、文字、数字、およびアンダースコア (_) のみを含める。

    • キーは Lambda によって予約されていない。

    • すべての環境変数の合計サイズは 4 KB を超えない。

  7. [Save] を選択します。

コンソールコードエディタで環境変数のリストを生成するには

Lambda コードエディタで環境変数のリストを生成することができます。これを使用することで、コーディング中に環境変数を簡単に参照することができます。

  1. [コード] タブを選択します。

  2. コードエディタの [ENVIRONMENT VARIABLES] セクションまでスクロールします。既存の環境変数を以下に示します。

    Lambda コンソールコードエディタの [ENVIRONMENT VARIABLES] セクション
  3. 新しい環境変数を作成するには、プラス記号 ( plus sign ) を選択します。

    Lambda コンソールコードエディタで環境変数を追加します。

環境変数は、コンソールのコードエディタに一覧表示されても暗号化されたままです。転送中の暗号化の暗号化ヘルパーを有効にした場合、それらの設定は変更されません。詳細については、「Lambda 環境変数の保護」を参照してください。

環境変数リストは読み取り専用で、Lambda コンソールでのみ使用できます。このファイルは、関数の .zip ファイルアーカイブをダウンロードしたときには含まれていません。また、このファイルをアップロードしても環境変数を追加することはできません。

AWS CLI

次の例では、my-function という名前の関数に 2 つの環境変数を設定します。

aws lambda update-function-configuration \ --function-name my-function \ --environment "Variables={BUCKET=amzn-s3-demo-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:111122223333:function:my-function",
    "Runtime": "nodejs22.x",
    "Role": "arn:aws:iam::111122223333:role/lambda-role",
    "Environment": {
        "Variables": {
            "BUCKET": "amzn-s3-demo-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:111122223333:key/055efbb4-xmpl-4336-ba9c-538c7d31f599
AWS SAM

AWS Serverless Application Model を使用して関数の環境変数を設定できます。template.yaml ファイル内の Environment プロパティと Variables プロパティを更新し、sam deploy を実行します。

例 template.yaml
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: An AWS Serverless Application Model template describing your function. Resources: my-function: Type: AWS::Serverless::Function Properties: CodeUri: . Description: '' MemorySize: 128 Timeout: 120 Handler: index.handler Runtime: nodejs22.x Architectures: - x86_64 EphemeralStorage: Size: 10240 Environment: Variables: BUCKET: amzn-s3-demo-bucket KEY: file.txt # Other function properties...
AWS SDKs

AWS SDK を使用して環境変数を管理するには、以下の API オペレーションを使用します。

詳細については、目的のプログラミング言語の AWS SDK ドキュメントを参照してください。

環境変数のシナリオ例

環境変数を使用して、テスト環境および本番環境における関数の動作をカスタマイズできます。例えば、同じコードでも設定が異なる 2 つの関数を作成できます。1 つの関数はテストデータベースに接続し、もう 1 つはプロダクションデータベースに接続します。この状況では、環境変数を使用して、データベースのホスト名とその他の接続に関する詳細を関数に渡します。

次の例は、データベースホストとデータベース名を環境変数として定義する方法を示しています。

Lambda コンソールの環境変数。

テスト環境で本番環境よりも多くのデバッグ情報を生成する場合は、環境変数を設定して、より詳細なログ記録またはトレースを使用するようにテスト環境を設定できます。

例えばテスト環境では、LOG_LEVEL キーと、デバッグまたはトレースのログレベルを示す値を使用して環境変数を設定できます。Lambda 関数のコードで、この環境変数を使用してログレベルを設定できます。

Python と Node.js の次のコード例は、これを実現する方法を示しています。これらの例では、環境変数の値が Python の場合は DEBUG、Node.js の場合は debug であることを前提としています。

Python
例 ログレベルを設定する Python コード
import os import logging # Initialize the logger logger = logging.getLogger() # Get the log level from the environment variable and default to INFO if not set log_level = os.environ.get('LOG_LEVEL', 'INFO') # Set the log level logger.setLevel(log_level) def lambda_handler(event, context): # Produce some example log outputs logger.debug('This is a log with detailed debug information - shown only in test environment') logger.info('This is a log with standard information - shown in production and test environments')
Node.js (ES module format)
例 ログレベルを設定する Node.js コード

この例では、winston ログ記録ライブラリを使用します。npm を使用して、このライブラリを関数のデプロイパッケージに追加します。詳細については、「依存関係を含めて .zip デプロイパッケージを作成する」を参照してください。

import winston from 'winston'; // Initialize the logger using the log level from environment variables, defaulting to INFO if not set const logger = winston.createLogger({ level: process.env.LOG_LEVEL || 'info', format: winston.format.json(), transports: [new winston.transports.Console()] }); export const handler = async (event) => { // Produce some example log outputs logger.debug('This is a log with detailed debug information - shown only in test environment'); logger.info('This is a log with standard information - shown in production and test environment'); };

Lambda 環境変数の取得

関数コード内の環境変数を取得するには、プログラミング言語の標準メソッドを使用します。

Node.js
let region = process.env.AWS_REGION
Python
import os region = os.environ['AWS_REGION']
注記

場合によっては、次の形式の使用が必要になる場合があります。

region = os.environ.get('AWS_REGION')
Ruby
region = ENV["AWS_REGION"]
Java
String region = System.getenv("AWS_REGION");
Go
var region = os.Getenv("AWS_REGION")
C#
string region = Environment.GetEnvironmentVariable("AWS_REGION");
PowerShell
$region = $env:AWS_REGION

Lambda は、環境変数を保管時に暗号化して安全に保存します。別の暗号化キーを使用したり、クライアント側で環境変数値を暗号化したり、AWS CloudFormation テンプレートで AWS Secrets Manager を使用して環境変数を設定したりするように Lambda を設定できます。

定義されたランタイム環境変数

Lambda ランタイムは、初期化中にいくつかの環境変数を設定します。ほとんどの環境変数は、関数またはランタイムに関する情報を提供します。これらの環境変数のキーは予約済みであるため、関数設定では設定できません。

予約済み環境変数
  • _HANDLER - 関数に設定されているハンドラの場所。

  • _X_AMZN_TRACE_IDX-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_ENVAWS_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-demandprovisioned-concurrency、または snap-start になります。詳細については、「プロビジョニングされた同時実行の設定」または「Lambda SnapStart による起動パフォーマンスの向上」を参照してください。

  • AWS_LAMBDA_LOG_GROUP_NAMEAWS_LAMBDA_LOG_STREAM_NAME - Amazon CloudWatch Logs グループの名前と関数のストリーム。AWS_LAMBDA_LOG_GROUP_NAME および AWS_LAMBDA_LOG_STREAM_NAME の環境変数は Lambda SnapStart 関数では使用できません。

  • AWS_ACCESS_KEYAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN – 関数の実行ロールから取得したアクセスキー。

  • AWS_LAMBDA_RUNTIME_API - (カスタムランタイム) ランタイム API のホストおよびポート。

  • 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)。

  • 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 固有のランタイムの最適化を有効または無効にします。値には alwaysnever、および provisioned-concurrency があります。詳細については、「関数に対するプロビジョニングされた同時実行数の設定」を参照してください。

  • TZ - 環境のタイムゾーン (:UTC)。実行環境は、システムクロックを同期するために NTP を使用します。

表示されるサンプル値は、最新のランタイムを反映しています。特定の変数やその値の有無は、以前のランタイムでは異なる場合があります。