我正在编写一个我希望作为AWS Lambda函数运行的应用程序,但也遵循Twelve-Factor应用程序指南。特别是Part III. Config,需要使用环境变量进行配置。
但是,我找不到为AWS Lambda实例设置环境变量的方法。谁能指出我正确的方向?
如果无法使用环境变量,请推荐一种方法来使用环境变量进行本地开发,并将它们转换为可以使用AWS中的应用程序代码访问的有效配置系统。
感谢。
答案 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:
查看此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”文件夹在哪里。