我可以在Lambda函数中编写一个bash脚本吗?我在aws文档中读到它可以执行用Python,NodeJS和Java 8编写的代码.
在一些文件中提到可能使用Bash但没有具体证据支持它或任何例子
可能有帮助的东西,我正在使用Node来调用bash脚本.我使用以下代码作为处理程序将脚本和nodejs文件以zip格式上传到lambda.
exports.myHandler = function(event, context, callback) {
const execFile = require('child_process').execFile;
execFile('./test.sh', (error, stdout, stderr) => {
if (error) {
callback(error);
}
callback(null, stdout);
});
}
正如您所提到的,AWS没有提供使用Bash编写Lambda函数的方法.
要解决它,如果你真的需要bash函数,你可以用任何语言"包装"你的bash脚本.
以下是Java的一个示例:
Process proc = Runtime.getRuntime().exec("./your_script.sh");
根据您的业务需求,您应该考虑使用本机语言(Python,NodeJS,Java)来避免性能损失.
AWS最近宣布了“ Lambda运行时API和Lambda层”,这两个新功能使开发人员能够构建自定义运行时。因此,现在可以直接在Lambda中甚至运行bash脚本而不会受到黑客攻击。
由于这是一项非常新的功能(2018年11月),因此尚无太多资料,仍然需要完成一些手动工作,但是您可以查看此Github存储库作为示例开始(免责声明:我没有测试)。在bash中的示例处理程序下面:
function handler () { EVENT_DATA=$1 echo "$EVENT_DATA" 1>&2; RESPONSE="{\"statusCode\": 200, \"body\": \"Hello World\"}" echo $RESPONSE }
这实际上为在Lambda中运行任何编程语言提供了可能性。这是有关发布自定义Lambda运行时的AWS教程。
我只是能够uname
使用Amazon Lambda - Python 捕获shell命令输出.
下面是代码库.
from __future__ import print_function import json import commands print('Loading function') def lambda_handler(event, context): print(commands.getstatusoutput('uname -a'))
它显示了输出
START RequestId: 2eb685d3-b74d-11e5-b32f-e9369236c8c6 Version: $LATEST (0, 'Linux ip-10-0-73-222 3.14.48-33.39.amzn1.x86_64 #1 SMP Tue Jul 14 23:43:07 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux') END RequestId: 2eb685d3-b45d-98e5-b32f-e9369236c8c6 REPORT RequestId: 2eb685d3-b74d-11e5-b31f-e9369236c8c6 Duration: 298.59 ms Billed Duration: 300 ms Memory Size: 128 MB Max Memory Used: 9 MB
有关更多信息,请查看链接 - https://aws.amazon.com/blogs/compute/running-executables-in-aws-lambda/