AWS Lambda
開発者ガイド

AWS Lambda 環境変数

Lambda 関数の環境変数により、コードへの変更を行なわないで関数コードとライブラリに設定を動的に引き渡すことができます。環境変数は、関数設定の一部として AWS Lambda コンソール、AWS Lambda CLI あるいは AWS Lambda SDK を使用して作成し、変更するキー値ペアです。次に AWS Lambda は、Node.js 関数用 process.env などの言語でサポートされるスタンダード API を使用して、このキー値を Lambda 関数で利用可能にします。

環境変数を使用すると、ファイルをインストールするディレクトリ、出力を保存する場所、接続とログの設定の保存先などをライブラリで確認できます。アプリケーションロジックとこれらの設定を区別することにより、異なる設定に基づいて関数動作を変更する必要がある場合に関数コードを更新する必要がなくなります。

セットアップ

開発からデプロイへとライフサイクルの段階が移動する際に Lambda 関数に異なる振る舞いをさせたいとします。例えば、開発、テスト、および本稼働ステージでは、異なる接続情報を必要とし、異なるテーブル名を使用する、関数が接続する必要があるデータベースを含めることができます。環境変数を作成して、データベース名、接続情報、またはテーブル名を参照し、実行されるステージ (開発、テスト、本稼働等) に基づいて、関数コードを変更せずに関数の値を設定することができます。

次のスクリーンショットでは、AWS コンソールを使用して関数の設定を変更する方法について説明します。最初のスクリーンショットではテストステージに対応する関数設定を構成します。2 番目のものでは、本稼働ステージの設定を構成しています。

[Encryption configuration] セクションを書き留めます。機密情報を保存するために、環境変数を使用して Lambda 関数を作成する チュートリアルでこれを使用する方法の詳細を学習できます。

また、AWS CLI を使用して環境変数を含む Lambda 関数を作成することができます。詳細については、CreateFunction および UpdateFunctionConfiguration API を参照してください。環境変数は AWS CloudFormation を使用する関数の作成および更新時にもサポートされます。環境変数は、言語ランタイム固有の設定や、関数に含まれるライブラリの設定にも使用できます。例えば、PATH が実行可能ファイルが保存されているディレクトリを指定するように変更できます。Python 用 PYTHONPATH または Node.js 用 NODE_PATH などのランタイム固有の環境変数を設定できます。

次の例では、LD_LIBRARY_PATH 環境変数を設定する新しい Lambda 関数を作成します。これは共有ライブラリがランタイムで動的にロードされるディレクトリの指定に使用されます。この例では、Lambda 関数コードは /usr/bin/test/lib64 ディレクトリ内の共有ライブラリを使用します。Runtime パラメータは nodejs6.10 を使用しますが、nodejs8.10 も指定できることに注意してください。

$ aws lambda create-function --function-name myTestFunction \ --zip-file fileb://package.zip \ --role role-arn \ --environment Variables="{LD_LIBRARY_PATH=/usr/bin/test/lib64}" \ --handler index.handler --runtime nodejs6.10

環境変数の名前をつけるためのルール

セットの合計サイズが 4 KB を超えない限り、作成できる環境変数の数に制限はありません。

その他の要件としては、次のものがあります。

  • 文字 [a-zA-Z] で始める必要があります。

  • 英数字とアンダースコア ([a-zA-Z0-9_] のみ含めることができます。

また、AWS Lambda が予約する特定のキーセットがあります。これらの予約キーのいずれかの値を設定しようとすると、そのアクションが許可されていないことを示すエラーメッセージが表示されます。これらのキーの詳細については、「Lambda 関数で使用できる環境変数」を参照してください。

環境変数および関数のバージョニング

関数のバージョニングを使用すると、開発からテストまでの間、Lambda 関数の 1 つ以上のバージョンを公開できるようにすることで、Lambda 関数コードを管理できます。発行する Lambda 関数の各バージョンについては、環境変数 (MemorySize および Timeout 制限等の、その他関数固有の設定も同様) はそのバージョンのスナップショットとして保存され、また、イミュータブル (変更不可) です。

アプリケーションおよび設定要件が増大するにつれて、新しいバージョンの Lambda 関数を作成し、発行される最新バージョンより前にそれらの要件を満たすように環境変数を更新できます。現在の関数のバージョンは $LATEST です。

さらに、関数の特定のバージョンに対するポインタであるエイリアスを作成できます。エイリアスの利点は、以前の関数バージョンにロールバックする必要がある場合は、そのバージョンに必要な環境変数が含まれているバージョンをエイリアスに指定できることです。詳細については、「AWS Lambda 関数のバージョニングとエイリアス」を参照してください。

環境変数の暗号化

環境変数を使用する Lambda 関数を作成するか、または更新する場合、AWS Lambda は AWS Key Management Service を使用してそれらを暗号化します。Lambda 関数が呼び出されると、これらの値は復号化され、Lambda コードで使用できるようになります。

リージョン内で環境変数を使用する Lambda 関数を初めて作成または更新すると、AWS KMS 内で自動的にデフォルトのサービスキーが作成されます。このキーは環境変数の暗号化に使用されます。ただし、暗号化ヘルパーを使用し、Lambda 関数の作成後に KMS を使用して環境を暗号化する場合は、独自の AWS KMS キーを作成し、デフォルトキーの代わりにそのキーを選択する必要があります。デフォルトキーを選択すると、エラーが表示されます。独自のキーを作成すると、アクセスコントロールを作成、使い回し、無効化、定義できるほか、データの保護に使用される暗号化キーを監査できるなど、より高い柔軟性が得られます。詳細については、「AWS Key Management Service 開発者ガイド」を参照してください。

独自のキーを使用する場合、「AWS Key Management Service 料金表」のガイドラインに沿って使用料が請求されます。AWS Lambda により提供されるデフォルトのサービスキーを使用する場合は請求されません。

Lambda のデフォルトの KMS サービスキーを使用する場合、関数実行ロールで追加の IAM アクセス許可は不要であり、ロールは変更なしで自動的に作動します。独自の (カスタム) KMS キーを供給する場合、kms:Decrypt を実行ロールに追加する必要があります。さらに、Lambda 関数を作成して更新するユーザーは、KMS キーを使用するためにアクセス許可が必要です。KMS キーの詳細については、「AWS KMS でのキーポリシーの使用」を参照してください。

注記

AWS Lambda は、デフォルトの KMS キーを使用するよう関数を許可します。これは、関数にロールを割り当てるときにユーザーに許可を付与することで行われます。ロールを削除して、同じ名前で新しいロールを作成する場合は、ロールの付与を更新する必要があります。付与を更新するには、ロールを関数に再度割り当てます。

機密情報の保存

前セクションで説明されているとおり、Lambda 関数をデプロイする際、指定したすべての環境変数はデフォルトで暗号化されます。これはデプロイプロセス中ではなくプロセス後に行われます。上記の環境変数は関数が呼び出されると AWS Lambda により自動的に復号化されます。環境変数に機密情報を保存する必要がある場合は、Lambda 関数をデプロイする前にその情報を暗号化することを強く推奨します。

Lambda コンソールを利用して AWS Key Management Service 暗号化ヘルパーを活用でき、機密情報を Ciphertext として保存することが容易になります。また、Lambda コンソールには、Lambda 関数コードで使用する情報を復号するための復号化ヘルパーコードが用意されています。詳細については、「機密情報を保存するために、環境変数を使用して Lambda 関数を作成する」を参照してください。

エラー シナリオ

関数構成が 4 KB を超えた場合や、AWS Lambda で予約した環境変数キーを使用した場合、構成エラーでオペレーションの更新または作成が失敗します。実行中に、環境変数の暗号化/復号化が失敗する可能性があります。AWS KMS サービス例外が原因で AWS Lambda が環境変数を復号できない場合、AWS KMS はエラー条件を説明する例外メッセージを返します。その問題の対処法がある場合は解決策を適用できます。これらは Amazon CloudWatch ログの、関数ログストリームに記録されます。例えば、環境変数へのアクセス用に使用する KMS キーが無効な場合は、次のエラーが表示されます。

Lambda was unable to configure access to your environment variables because the KMS key used is disabled. Please check your KMS key settings.