【问题标题】:Can I load code from file in a AWS Lambda?我可以从 AWS Lambda 中的文件加载代码吗?
【发布时间】:2021-03-22 22:29:29
【问题描述】:

我正在考虑创建 2 个通用 AWS Lambda 函数,一个作为“调用者”来运行另一个 Lambda 函数。调用的 Lambda 函数根据传递给它的参数从文件中加载 Lambda 的代码。

Invoker:使用指定参数调用被调用的 Lambda,例如身份证

Invoked:根据 ID,加载相应的文本文件,其中包含 要运行的实际代码

这个可以吗?

这种想法的原因是,如果我可以将代码保存在 S3 存储桶中的 100 个文本文件中并根据需要加载它们,我不想部署 100 个 Lambda 函数。

代码由用户不断上传,因此我无法将其包含在 lambda 中。并且代码可以是 AWS 支持的所有语言(.NET、NodeJs、Python 等)

为了安全,有没有办法“容器化”运行代码?

非常感谢任何建议和想法。

提前谢谢你。

【问题讨论】:

  • 如果出于某种原因您决定不使用 100 个单独的函数,您可能不需要在 S3 中存储代码。您可以将所有代码包含在单个 lambda 的部署包中。您也可能不需要单独的“调用者”lambda。对你有意义吗?而且,顺便说一句,你用什么语言编写你的 lambdas?
  • @ArtemArkhipov 感谢您的回复。该代码由用户不断上传,因此我无法将其包含在 lambda 中。并且代码可以是 AWS 支持的所有语言(.NET、NodeJs、Python 等)

标签: amazon-web-services aws-lambda


【解决方案1】:

首先我要提到的是,当您要执行用户上传的代码时,您应该非常注意应用程序的安全方面,这意味着他们可能能够访问敏感数据

我的示例基于 NodeJS,但我认为使用其他运行时可能会实现类似的效果,但不确定。您需要了解的主要有两件事:

  • AWS Lambda 执行环境为您提供了容量为 512 MB 的 /tmp 文件夹,您可以在其中放置当前特定调用所需的任何必要资源。
  • NodeJS 允许您在应用程序的任何位置动态地require 模块。

因此,基本上,您可以将所需的js 文件下载到/tmp 文件夹中,然后从您的代码中获取它。我现在不打算编写真正的代码,因为它可能会很大,但这里有一些通用步骤,只是为了让事情变得清晰:

  1. Lambda 在event 中接收fileId 作为参数。

  2. Lambda 在 S3 中搜索名为 fileId 的文件,然后将其作为 fileId.js 下载到 /tmp 文件夹中

  3. 现在在应用程序中,您可能需要该文件并将其视为一个模块:

    const dynamicModule = require("/tmp/fileId.js");

  4. 使用加载的模块

【讨论】:

  • 感谢您的推荐。看起来是个不错的选择。
【解决方案2】:

您肯定无法在 Node lambda 中运行 Python 代码或 .Net 代码。您可以加载文件并动态运行代码吗?大概。你应该?可能不是。即使信任该代码的来源,您也不希望它们都在同一个函数中运行。 1)他们将共享相同的权限。这意味着,至少,他们都可以访问存储代码的同一个 S3 存储桶。 2)他们都会登录到同一个地方。祝调试顺利。

我们的帐户中部署了数百个 lambda 函数。我什至不会接受这个想法作为替代方案。

【讨论】:

  • 谢谢你,杰森。关于安全的观点。
猜你喜欢
  • 1970-01-01
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
  • 2022-07-08
  • 2018-03-07
  • 2021-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多