【问题标题】:How to host/build a CLI like python script on AWS?如何在 AWS 上托管/构建类似于 python 脚本的 CLI?
【发布时间】:2022-01-28 22:09:04
【问题描述】:

这是一个非常缺乏经验的问题。我只部署/托管过 Web 应用程序,所以我不明白如果我想托管一个类似 CLI 的程序供其他人运行,系统会是什么样子。

这是一个 python 脚本,我希望它在 AWS 上(可能会使用 docker 容器、ECS 和 terraform。所以我想这主要是关于如何构建映像的问题)。

脚本接受标志/命令,在终端打印时运行几分钟,然后在完成后停止。我如何托管/构建它,以便任何人都可以通过他们的 shell/终端访问它?是否需要某种类似于 http 服务器的服务器?它没有前端。理想情况下,很多人可以随时同时运行它。

编辑:更正,没有 Web GUI 前端...我添加这个是为了澄清我对这些术语的松散使用。这原则上是 API 吗?

【问题讨论】:

  • 它是一个cli并不意味着没有前端和后端,dockerized部分应该是服务器,客户端可以是普通的python应用程序
  • 感谢您纠正我对这些条款的滥用。所以想象一下,你有一个简单的 python 脚本,计数为 10,并且你希望它在云上,以便任何人都可以运行它 + 很多人可以同时运行......这个的后端/前端是什么? @SecurityObscurity
  • 既然你想使用 python,我会推荐一个烧瓶 API 作为后端,如果你想要持久性,你可以选择一个数据库,前端部分也将是一个 python 应用程序,负责消费API 数据,请记住,如果您在开始之前不解决它们,开发中可能会发生很多事情,例如身份验证/授权
  • 谁或什么会触发这个脚本并提供输入参数?

标签: python amazon-web-services docker cloud hosting


【解决方案1】:

我鼓励您研究 AWS Lambda 以了解类似的内容。 AWS Lambda 允许您运行代码(包括 Python),而无需考虑配置服务器。主要好处之一是您只需为软件实际执行的时间付费,而不是为运行空闲的虚拟机付费。

正如您所提到的,如果您想转向其他用户可以调用您的服务的“API”设计,您可以在 Lambda 代码前面使用 Amazon API Gateway 来处理这个问题。这里有这些设计模式的很好的例子:https://serverlessland.com/patterns

类似这样的东西:https://serverlessland.com/patterns/apigw-lambda-cdk 听起来像您正在寻找的东西,但正如 SecurityObscurity 所提到的,您需要考虑身份验证和授权。这可以通过 AWS Cognito 或 IAM 授权来处理,具体取决于您的使用案例。

【讨论】:

  • 感谢您的建议!它开始变得更有意义了。另一个问题:对于无限运行并会因用户中断而停止的脚本,您仍然会建议这样做吗?这是否可能——当我想到 API 时,我想到了基本的 GET/POST/DELETE 等操作,它们会返回一个单一的响应,但也许有一些我不知道的 @Ian-B
  • @KROM,这有点取决于您的脚本在做什么。如果它确实是一个需要无限运行的进程,那么 Lambda 不是正确的解决方案。它的最长运行时间为 15 分钟,它真正为短期运行的离散任务而设计。如果没有办法将您的功能拆分为这些类型的任务,那么是的,在 ECS 上运行的 docker 容器之类的东西可能是最好的选择。您仍然可以使用 API Gateway / Lambda 作为 REST 前端来处理在 ECS 上运行的进程的启动、停止、暂停、获取状态等指令。
  • 它不需要无限运行。这是一个已启动并需要继续的过程,直到用户想要一个特定的块/索引,这是一个每次都会变化的数量。在脚本运行时查看脚本的实时输出尤为重要。无论是 lambda 或 ecs 还是我稍后会决定的任何东西。我特别迷茫的部分是如何将输出流式传输给用户(而不是主机上的脚本,一个 ssh 进入并监视在终端上运行)。这叫什么?
  • 好的,听起来您正在寻找的是 websocket 而不是 REST 接口。这由 AWS API Gateway 支持,这里有一些文档:docs.aws.amazon.com/apigateway/latest/developerguide/…
  • 另一个(可能更简单)的选项是拥有一个带有 GET 端点的 REST API,该端点从远程运行的脚本中获取最新输出。这可以由您的客户定期查询。这不是一个理想的模式,因为客户端将负责重复查询,但根据您的需要,可能更容易设置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-19
  • 2021-01-21
  • 2021-10-05
  • 2021-07-08
  • 1970-01-01
  • 2017-12-18
  • 2021-10-21
相关资源
最近更新 更多