【发布时间】:2019-06-07 06:53:09
【问题描述】:
我想在 cfncluster 的登录节点上促进基于 URI 的与 Python 程序的交互。这些程序将执行各种耗时(几分钟到几小时)的操作,主要通过生成和使用的 S3 对象链接。
我已经使用 Lambda 函数和 API GW 对较小规模的场景进行了原型设计,以提供异步端点,其中客户端将 JSON 发送到 URI 端点,URI 端点将其发送到 Lambda 函数,Lambda 函数提供一个唯一的 S3 对象名称并立即将其(以 JSON 格式)返回给客户端,然后开始在该 S3 对象中生成内容(在 Lambda 函数的时间和空间限制内)。客户端轮询直到对象可用,通常调用另一个 Lambda 函数来使用该 S3 对象。
现在,我想在需要完成大量工作(大型大气模型)的情况下促进同样的事情,这将需要启动带有大量大型软件包的 cfncluster(用于并行计算)。到目前为止,我能想到的最好方法是通过 API-GW 启动 Lambda 函数,然后让它们在 cfncluster 上启动异步进程(启动、状态检查、终止)。虽然我可以让 Lambda 函数通过 ssh 与 cfncluster 进程交互,但我宁愿避免这种情况。这些过程通常来自运行的 Python 代码。
我已经阅读了用于执行管理任务的 AWS“EC2 Run Command”,我的模糊理解是
- 我可以从 Lambda 函数运行这个“EC2 运行命令”,这意味着我可以通过 API GW 将 JSON 传递给 Lambda 函数,并让它在 EC2 实例上创建“运行”命令。
- “EC2 运行命令”会将 stdout 写入 S3 对象,因此“也许”我可以设置我的 EC2 进程以在响应中写出我想要的 JSON,并拥有其他Lambda 函数抓取状态请求中的内容。
当然,这似乎不太容易,但似乎可行,而且据我所知,这可能代表了实现基于网络的大规模科学控制的“最先进的技术”云中的模型。我是否认为这可能是我想做的“最先进的技术”? AWS 不断添加新服务。我错过了什么吗?
我还考虑过(并在小规模上制作原型)在 EC2 实例上使用 CherryPy 服务器,但这有其自身的复杂性和缺点。
【问题讨论】: