【问题标题】:How to set environment variables in AWS lambda using Python如何使用 Python 在 AWS lambda 中设置环境变量
【发布时间】:2019-10-06 15:12:55
【问题描述】:

我正在尝试使用 python 在 AWS lambda 中设置环境变量

最初我有一个在 lambda 配置中没有值的环境变量 stackname。

def lambda_handler(event, context):
    if os.environ["stackname"]:
        print("Not empty")
        print(os.environ["stackname"])
    else:
        print("its empty")
        os.environ["stackname"]="mystack"
        print(os.environ["stackname"])

现在我在这里看到奇怪的间歇性行为,这是我希望打印的第一次

its empty
mystack

从那时起,每当我执行 lambda 它应该打印

Not empty
mystack

最初会打印几次

Not empty
mystack

但经过几次或多次执行后,lambda 打印在下面,这很奇怪。

  its empty
    mystack

请建议这是否是设置提供一致输出的环境变量的其他更好方法。

【问题讨论】:

  • 你知道statefulstateless的区别吗?

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


【解决方案1】:

AWS Lambda 函数在 Amazon Linux 环境中运行。同一个 Lambda 函数的顺序调用可能导致该函数在相同环境或不同环境中运行。环境是指计算机、容器等。

这意味着您无法可靠地设置环境变量并期望它们在下一次调用时出现。

更好的方法是将运行时变量存储在持久性存储中,例如 DynamoDB。

【讨论】:

  • 对,@JohnHanley。您可以使用环境变量(或任何其他持久性存储)来缓存“昂贵的”信息,容器中的第一次运行可以获得并且该容器中的剩余运行可以使用。但是您不能期望这些信息会出现在您的函数的任何后续运行中,这些信息可能位于不同的容器中,甚至可能位于不同的 EC2 实例中。
【解决方案2】:

为什么不直接使用 lambda 提供的 environment variable support 呢?您可以在创建或更新函数时配置环境变量,然后在函数代码中引用这些变量。关于为什么打印出“它是空的”,@John Hanley 的回答非常准确。

【讨论】:

    【解决方案3】:

    你可以像在系统中使用操作系统那样做

     import os
     os.environ['varible']='value'
    

    【讨论】:

      猜你喜欢
      • 2017-10-31
      • 2017-05-09
      • 1970-01-01
      • 2016-07-13
      • 2022-08-19
      • 1970-01-01
      • 2017-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多