web-dev-qa-db-ja.com

AWS Lambdaで環境変数を使用するにはどうすればよいですか?

私は、AWS Lambda関数として実行したいが、Twelve-Factorアプリのガイドラインにも準拠するアプリケーションを作成しています。特に Part III。Config 構成には環境変数を使用する必要があります。

ただし、AWS Lambdaインスタンスの環境変数を設定する方法が見つかりません。誰かが私を正しい方向に向けることができますか?

環境変数を使用できない場合は、ローカル開発に環境変数を使用し、AWSのアプリケーションコードを使用してアクセスできる有効な構成システムに変換する方法をお勧めします。

ありがとう。

20
dannybrown

2016年11月18日の時点で、AWS Lambda supports 環境変数。

環境変数は 指定 AWSコンソールとAWS CLIの両方を使用できます。これは、AWS CLIを使用してLD_LIBRARY_PATH環境変数でLambdaを作成する方法です。

aws lambda create-function \
  --region us-east-1
  --function-name myTestFunction
  --Zip-file fileb://path/package.Zip
  --role role-arn
  --environment Variables={LD_LIBRARY_PATH=/usr/bin/test/lib64}
  --handler index.handler
  --runtime nodejs4.3
  --profile default
16
sergio

おそらくnode-lambdaの「カスタム環境変数」機能はあなたの懸念に対処するでしょう:

https://www.npmjs.com/package/node-lambda
https://github.com/motdotla/node-lambda

「AWS Lambdaでは関数の環境変数を設定できませんが、多くの場合、DB接続文字列や暗号化キーなど、バージョン管理にチェックインしたくない安全な値で関数を設定する必要があります。サンプルのdeploy.envファイルを--configFileフラグと組み合わせて使用​​し、S3にアップロードされる前にprocess.env環境変数としてコンパイル済みのLambda関数に追加される値を設定します。

5
Tom

各呼び出しは互いに素であり、状態情報は保存されないため、ラムダ実行用のenv変数を構成する方法はありません。しかし、あなたが望むものを達成する方法があります。

AWS credentials-環境変数に保存することを避けることができます。代わりに、LambdaExecロールに特権を付与します。実際、AWSでは、AWS認証情報の代わりにロールを使用することをお勧めします。

Database details:1つの提案は、プライベートバケット内の既知のファイルに保存することです。 Lambdaは、呼び出されたときにそのファイルをダウンロードし、データベースの詳細やその他の情報を含むことができるコンテンツを読み取ることができます。バケットはプライベートであるため、他のユーザーはファイルにアクセスできません。 LambdaExecロールには、プライベートバケットにアクセスするためのIAM権限が必要です。

4
helloV

Lambda関数にもこの要件があり、CIプラットフォーム(この場合はCircleCI)でenvファイルを生成することでこれを「解決」しました。このファイルは、Lambdaにデプロイされるアーカイブに含まれます。これで、コードにこのファイルを含めて変数を使用できます。

CircleCI環境変数からJSONファイルを生成するために使用するスクリプトは次のとおりです。

cat >dist/env.json <<EOL
{
"CLIENT_ID": "$CLIENT_ID",
"CLIENT_SECRET": "$CLIENT_SECRET",
"SLACK_VERIFICATION_TOKEN": "$SLACK_VERIFICATION_TOKEN",
"BRANCH": "$CIRCLE_BRANCH"
}
EOL

リポジトリに環境固有の変数を含める必要がないため、このアプローチが気に入っています。

1
Wim Mostmans