在 AWS 上部署调用 Python 脚本的 PHP 应用程序

在 AWS 上部署调用 Python 脚本的 PHP 应用程序

我创建了一个 PHP 网站,它在后台调用一堆 python 工作程序(使用 laravel 中的队列工作程序系统,工作程序通过 CLI 调用 python 工具)。每个 python 工具都有自己的 conda 环境设置,它们需要正确运行。

我可以在单个服务器上很好地运行此设置,因为所有内容都安装在机器上,但我想以强大的方式将其部署到云(AWS)。

据我所知,Elastic Beanstalk 非常好,并且易于分发 PHP 代码,支持部署新版本等等,但我看不到如何包含我的 python 代码。

我或许应该调查一下:

  • 将我的 Python 工具与 PHP 服务器分离(新的问题是“我该如何调用它们并等待它们的结果?”)
  • 把所有东西都放到 Docker 容器中,每当某个工具或 PHP 需要更新时就重建它(新的问题是“如何让它变得冗余”)

您对部署这种设置有何看法?

答案1

Elastic Beanstalk 支持通过各种扩展/配置ebextensions,因此您很可能能够压缩 Python 代码并通过该代码进行配置。

至于将它们分开,您将进入分布式系统领域。一种常见的模式是将消息写入工作队列(例如 PHP -> AWS SQS),并让工作人员从该队列订阅/使用并运行任务。结果可以写入数据库以供检索。因此,您可以让 PHP 写入 SQS,将 Python 命令转换为 Lambdas(取决于它们需要做什么),然后将结果写入 DynamoDB。然后原始 PHP 中央服务器可以检索结果。

或者,关于使事情变得冗余 - 您可以将系统的存储状态部分移动到数据库或中央文件系统(如 EFS),并使用 AWS ECS 等工具来运行容器并连接到它。

有很多方法可以解决这个问题,取决于成本/弹性要求/知识等。

相关内容