【问题标题】:AWS Lambda read contents of file in zip uploaded as source codeAWS Lambda 读取作为源代码上传的 zip 文件内容
【发布时间】:2017-01-21 12:13:46
【问题描述】:

我有两个文件:

MyLambdaFunction.py

config.json

我将这两个压缩在一起以创建 MyLambdaFunction.zip。然后我通过 AWS 控制台将其上传到我的 lambda 函数。

config.json的内容是各种环境变量。我需要一种方法来在每次运行 lambda 函数时读取文件的内容,然后使用里面的数据来设置运行时变量。

如何让我的 Python Lambda 函数读取文件的内容,config.json,该文件与源代码一起上传到 zip 文件中?

【问题讨论】:

  • 不确定是否使用该方法,但您绝对可以将配置移动到 S3 并每次从那里读取文件。
  • @j-u-s-t-i-n 同意了,如果必须的话,我会的。但是将它们全部压缩到一个文件(MyLambdaFunction.zip)中并将其上传到 lambda 函数会非常好。无需再使用另一个 S3 存储桶,无需担心那里的加密。

标签: python amazon-web-services aws-lambda


【解决方案1】:

通过@helloV 向正确的方向推动,解决了这个问题。

在python文件的顶部放import os

在您的函数处理程序中放入以下内容:

configPath = os.environ['LAMBDA_TASK_ROOT'] + "/config.json"
print("Looking for config.json at " + configPath)
configContents = open(configPath).read()
configJson = json.loads(configContents)
environment = configJson['environment']
print("Environment: " + environment)

就在那里,一行一行地执行以下操作:

  • 获取config.json文件存放路径
  • 打印该路径以在 CloudWatch 日志中查看
  • 打开存储在该路径的文件,读取内容
  • 将内容加载到 json 对象以便于导航
  • 获取存储在 json 中的变量之一的值
  • 打印出来以便在 CloudWatch 日志中查看

这是 config.json 的样子:

{
    "environment":"dev"
}

编辑 AWS lambda 现在支持直接在控制台 UI 中使用环境变量。因此,如果您的用例与我的相同(即配置文件),则不再需要配置文件。

【讨论】:

    【解决方案2】:

    试试这个。您上传的文件可以通过以下方式访问:

    import os
    
    os.environ['LAMBDA_TASK_ROOT']/config.json
    

    【讨论】:

    • 不工作。我在 python 文件的顶部添加了“import os”。在我的函数处理程序中,我有一行写着“environmentalConfig = os.environ['LAMBDA_TASK_ROOT']/config.json”。然后我将 python 文件和“config.json”文件压缩到一个文件夹中。通过 AWS Lambda 控制台上传。当它运行时,我收到一条错误消息,上面写着““environmentalConfig = os.environ['LAMBDA_TASK_ROOT']/config.json”]],“errorType”:“NameError”,“errorMessage”:“未定义全局名称'config' “}”
    • @ScottDecker 那是因为上面的答案是不正确的语法。这是一个字符串连接,所以要么使用os.environ['LAMBDA_TASK_ROOT'] + '/config.json',要么使用 f-string f"{os.environ['LAMBDA_TASK_ROOT']}/config.json"...
    【解决方案3】:

    其实我更喜欢判断正在运行的 lambda 的上下文来确定它应该使用的配置,而不是上传不同的 zip 文件,这很难维护。

    lambda_configs = {
        "function_name_1":{
        },
        "function_name_2":
       {
       }
    }
    
    config = lambda_configs[context.function_name]
    

    【讨论】:

      猜你喜欢
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      • 2019-09-09
      • 2020-06-16
      • 2012-02-26
      • 2017-05-11
      • 2019-02-10
      • 1970-01-01
      相关资源
      最近更新 更多