簡體   English   中英

如何從 Python 訪問 AWS Lambda 環境變量

[英]How to access an AWS Lambda environment variable from Python

使用AWS Lambda 中的新環境變量支持,我通過 webui 為我的 function 添加了一個環境變量。

我如何從 Python 訪問它? 我試過:

import os

MY_ENV_VAR = os.environ['MY_ENV_VAR']

但我的 function 停止工作(如果我硬編碼MY_ENV_VAR的相關值,它工作正常)。

可以使用AWS控制台,CLI或SDK定義AWS Lambda環境變量。 這是通過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()方法,通過以下方法嘗試查找.env文件:(a)猜測從何處開始使用文件或工作目錄-允許它在非文件上下文(例如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中

我使用了這段代碼; 它包括兩種情況,分別從處理程序設置變量和從處理程序外部設置變量。

#!/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

在lambda上的設置如下: 環境變量

希望這會有所幫助!

os.environ["variable_name"]

在 AWS lambda 的配置部分,確保您聲明的變量與您嘗試在此處訪問的名稱相同。 對於這個例子,它應該是variable_name

import os
os.getenv('MY_ENV_VAR')

os.environ['MY_ENV_VAR']

是可行的解決方案,只需在lambda GUI中確保ENV變量確實存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM