如何在AWS Lambda上使用环境变量?

时间:2016-03-26 01:18:48

标签: amazon-web-services environment-variables aws-lambda

我正在编写一个我希望作为AWS Lambda函数运行的应用程序,但也遵循Twelve-Factor应用程序指南。特别是Part III. Config,需要使用环境变量进行配置。

但是,我找不到为AWS Lambda实例设置环境变量的方法。谁能指出我正确的方向?

如果无法使用环境变量,请推荐一种方法来使用环境变量进行本地开发,并将它们转换为可以使用AWS中的应用程序代码访问的有效配置系统。

感谢。

6 个答案:

答案 0 :(得分:15)

截至2016年11月18日,AWS Lambda supports环境变量。

使用AWS控制台和AWS CLI,环境变量可以是specified。这是使用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

答案 1 :(得分:5)

也许node-lambda的'自定义环境变量'功能可以解决您的问题:

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

“AWS Lambda不允许您为您的函数设置环境变量,但在许多情况下,您需要使用您不想检查版本控制的安全值来配置您的函数,例如数据库连接字符串使用示例deploy.env文件和--configFile标志一起设置将在编译的Lambda函数作为process.env环境变量上传到S3之前的值。“

答案 2 :(得分:4)

无法为lambda执行配置env变量,因为每次调用都是不相交的,并且不存储状态信息。然而,有办法实现你想要的。

objectA - 您可以避免将其存储在env变量中。而是将权限授予您的AWS credentials角色。实际上,AWS建议使用角色而不是AWS凭证。

LambdaExec:一个建议是将其存储在私人存储桶中的一个众所周知的文件中。 Lambda可以在调用时下载该文件,读取包含数据库详细信息和其他信息的内容。由于存储桶是私有的,因此其他人无法访问该文件。 Database details角色需要IAM权限才能访问私有存储桶。

答案 3 :(得分:2)

AWS刚刚通过环境参数添加了对Lambda函数配置的支持。 看看here

答案 4 :(得分:1)

我们对Lambda功能也有这个要求,我们已经解决了#34;这可以通过在CI平台上生成一个env文件(在我们的例子中是CircleCI)。此文件包含在部署到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

我喜欢这种方法,因为这样您就不必在存储库中包含特定于环境的变量。

答案 5 :(得分:1)

我知道已经有一段时间了,但是我没有看到可在AWS Lambda控制台上运行的解决方案。

STEPS:

  1. 在您的AWS Lambda功能代码中,查找“环境变量”,然后单击“编辑”;
  2. 对于“密钥”,键入“ LD_LIBRARY_PATH”;
  3. 对于“值”,键入“ / opt / python / lib”。

查看此screenshot以获得详细信息。

#3假设您使用Python作为运行时环境,并且您上载的Layer具有以下结构的“ lib”文件夹: python/lib

此解决方案适用于以下错误: /lib/x86_64-linux-gnu/libz.so.1: version 'ZLIB_1.2.9' not found 假设正确的libray文件放在“ lib”文件夹中,并且环境变量的设置如上所述。

PS:如果不确定#3路径,只需在控制台中查找错误,然后您就可以看到运行时层的“ lib”文件夹在哪里。