新しい AWS Lambdaでの環境変数のサポート を使用して、関数のwebuiを介してenv変数を追加しました。
Pythonからこれにアクセスするにはどうすればよいですか?私は試した:
import os
MY_ENV_VAR = os.environ['MY_ENV_VAR']
しかし、私の関数は動作を停止しました(MY_ENV_VAR
に関連する値をハードコーディングした場合、正常に動作します)。
AWS Lambda環境変数は、AWSコンソール、CLI、またはSDKを使用して定義できます。これは、AWS CLIを使用してLD_LIBRARY_PATH環境変数を使用するAWS 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
作成された環境変数は、環境にアクセスするために言語が提供するサポートを使用して読み取ることができます。 Node.jsにprocess.envを使用します。 Pythonを使用する場合、次の例のように、osライブラリをインポートする必要があります。
...
import os
...
print("environment variable: " + os.environ['variable'])
AWS Lambdaは環境変数をサポートするようになりました
設定モジュールと一緒に.envファイルを作成したと仮定します。
.
├── .env
└── settings.py
次のコードをsettings.pyに追加します
# settings.py
from os.path import join, dirname
from dotenv import load_dotenv
dotenv_path = join(dirname(__file__), '.env')
load_dotenv(dotenv_path)
または、find_dotenv()メソッドを使用して、(a)fileまたは作業ディレクトリの使用を開始する場所を推測することにより、.envファイルの検索を試みることができます。 -これをIPythonノートブックやREPLなどの非ファイルコンテキストで動作させ、次に(b)指定されたファイルを探してディレクトリツリーを上に移動します-デフォルトで.envと呼ばれます。
from dotenv import load_dotenv, find_dotenv
load_dotenv(find_dotenv())
これで、システム環境変数から、または.envファイルからロードされた変数にアクセスできます。
https://github.com/theskumar/python-dotenv
gepoggioはこの投稿で回答しました: https://github.com/serverless/serverless/issues/577#issuecomment-192781002
回避策は、python-dotenvを使用することです。 https://github.com/theskumar/python-dotenv
import os import dotenv dotenv.load_dotenv(os.path.join(here, "../.env")) dotenv.load_dotenv(os.path.join(here, "../../.env"))
ローカルで実行されたときはproject/.envにあり、Lambdaを実行しているときは.envはproject/component/.envにあるため、2回ロードしようとします。
このコードを使用しました。ハンドラーから変数を設定する場合と、ハンドラーの外部から変数を設定する場合の両方が含まれます。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Trying new lambda stuff"""
import os
import configparser
class BqEnv(object):
"""Env and self variables settings"""
def __init__(self, service_account, configfile=None):
config = self.parseconfig(configfile)
self.env = config
self.service_account = service_account
@staticmethod
def parseconfig(configfile):
"""Connection and conf parser"""
config = configparser.ConfigParser()
config.read(configfile)
env = config.get('BigQuery', 'env')
return env
def variable_tests(self):
"""Trying conf as a lambda variable"""
my_env_var = os.environ['MY_ENV_VAR']
print my_env_var
print self.env
return True
def lambda_handler(event, context):
"""Trying env variables."""
print event
configfile = os.environ['CONFIG_FILE']
print configfile
print type(str(configfile))
bqm = BqEnv('some-json.json', configfile)
bqm.variable_tests()
return True
私はこれを持っているデモ設定ファイルでこれを試しました:
[BigQuery]
env = prod
これが役立つことを願っています!