話題の記事

【アップデート】AWS Lambdaで環境変数を使えるようになりました!!!

2016.11.19

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

インフルエンザの予防接種の副反応で高熱が出た森永です。
全国1億2千万人のLambdaファンの皆さん、遂にLambdaに環境変数が追加されました!!!

環境変数対応

多くの要望があった環境変数ですが遂に対応されました。
詳細は以下の通りです。

  • 環境変数の数に制限なし
    • ただし、キーバリュー合計4KBまで
  • キーは半角英語[^a-zA-Z]で始める、かつ半角英数字とアンダーバー[a-zA-Z0-9\_]のみ
  • バリューはカンマのみ使用不可(検証したところマルチバイト文字もいけました。)
  • バリューはカンマ、マルチバイト文字含め使用可能(カンマ使えるようになったようです!!)
  • 以下は予約語なので使用できない
    • AWS_ACCESS_KEY_ID
    • AWS_SECRET_ACCESS_KEY
    • AWS_SESSION_TOKEN
    • AWS_ACCESS_KEY
    • AWS_SECRET_KEY
    • AWS_SECURITY_TOKEN
    • AWS_DEFAULT_REGION
    • AWS_REGION
    • AWS_LAMBDA_LOG_GROUP_NAME
    • AWS_LAMBDA_LOG_STREAM_NAME
    • AWS_LAMBDA_FUNCTION_NAME
    • AWS_LAMBDA_FUNCTION_MEMORY_SIZE
    • AWS_LAMBDA_FUNCTION_VERSION
    • LAMBDA_TASK_ROOT
    • LAMBDA_RUNTIME_DIR
  • 環境変数はKMSで自動的に暗号化される
    • カスタムのKMSキーを使用する際はkms:Decryptの権限つきロールが必要(デフォルトキーの場合不要)
    • パスワードなどセンシティブな情報はクライアントサイドで暗号化したものを、Lambda内で復号化すること推奨

カンマ使えればJSON突っ込めるんですが、そのままじゃ出来ないのでBase64等で頑張るしかなさそうです。 Base64で頑張る方法はこちら
カンマ使えるようになったので普通に使いましょう。

試してみた

早速試してみます。
Python2.7で試してみます。

Lambda Functionのコードの下に「Environment variables」という項目が追加されています。

Lambda_Management_Console

以下のようなコードを実行して、環境変数を表示してみます。
環境変数は「TEST」というキーに「env_test」というバリューを設定しています。

import os

def lambda_handler(event, context):
    print os.environ
    print os.environ['TEST']

実行した結果どうなったでしょうか…DOKIDOKI

{'AWS_LAMBDA_FUNCTION_VERSION': '$LATEST', 'LAMBDA_TASK_ROOT': '/var/task', 'PATH': '/usr/local/bin:/usr/bin/:/bin', 'LD_LIBRARY_PATH': '/lib64:/usr/lib64:/var/runtime:/var/runtime/lib:/var/task:/var/task/lib', 'LANG': 'en_US.UTF-8', 'AWS_LAMBDA_FUNCTION_NAME': 'env_variables', 'AWS_REGION': 'us-east-1', 'AWS_SESSION_TOKEN': '省略', 'AWS_SECURITY_TOKEN': '省略', 'LAMBDA_RUNTIME_DIR': '/var/runtime', 'AWS_LAMBDA_FUNCTION_MEMORY_SIZE': '128', 'PYTHONPATH': '/var/runtime', 'AWS_LAMBDA_LOG_GROUP_NAME': '/aws/lambda/env_variables', 'AWS_LAMBDA_LOG_STREAM_NAME': '2016/11/19/[$LATEST]e27d0567cccd4b868c8eb180a8340a92', 'AWS_ACCESS_KEY_ID': '省略', 'AWS_DEFAULT_REGION': 'us-east-1', 'AWS_SECRET_ACCESS_KEY': '省略', 'TEST': 'env_test'}

env_test

os.environを確認すると、LambdaファンクションのバージョンやPATH、実行しているリージョン、アクセスキーやシークレットキーがデフォルトで格納されていることが分かります。

os.environ['TEST']でちゃんと「TEST」のバリューも取得できていますね!

さいごに

待ちに待った環境変数です!
作っていたLambdaファンクションにS3のバケット名などハードコーディングしていたものがあったので、書き直そうと思います。
よいLambda生活を!!