如何在部署到 Elastic Beanstalk 后运行 Python 脚本
Posted
技术标签:
【中文标题】如何在部署到 Elastic Beanstalk 后运行 Python 脚本【英文标题】:How to Run a Python Script After Deploying to Elastic Beanstalk 【发布时间】:2018-07-19 16:51:22 【问题描述】:我正在尝试在运行 Python 3.4 的 AWS Elastic Beanstalk 64 位 Linux 实例上运行 Python 脚本。我目前在ebextensions
目录中使用container_commands
来运行一些命令,但我的问题是这些命令在应用程序完全部署到环境之前运行。有谁知道如何在部署后执行 python 脚本?我发现 this older post 详细介绍了 Rails 环境的解决方法,但我使用的是 Python。
【问题讨论】:
你可以从 EB 外部进行,你用什么来部署? 我正在使用 EB CLI 进行部署。我可以通过 ssh 进入环境并手动运行脚本,但我只是想知道是否有办法将其设置为在每次部署后自动运行。 【参考方案1】:我会说你有两个选择:
-
将脚本托管在this article 中提到的
appdeploy/post
文件夹中:
所以当我查看 EC2 实例上的 eb-tools.log 时,我发现 它正在搜索要在 /opt/elasticbeanstalk/hooks/appdeploy/post 目录重启后 网络服务器。事实证明,如果您将 shell 脚本放入此 目录它们将在部署后执行,就像你想要的一样! 但是这个目录默认不存在,因为亚马逊不存在 使用任何部署后脚本,因此我们还需要确保这一点 目录已创建。
如果第一个选项不起作用,我会做的是将要运行的代码添加到我正在部署到该 EB 的代码中,并将其作为我正在使用的部署过程的一部分运行。例如,如果我通过 Windows 机器上的批处理文件进行部署,我会执行以下操作:
call eb deploy
call http://myurl.com/postDeploy
【讨论】:
您好 Naguib,感谢您的回答!我已经尝试了几次选项 1,但是我在运行 python 脚本时遇到了问题。我在我的项目的主目录中将它作为test.py
,但是我尝试过的每个文件路径组合总是导致错误提示No such file or directory.
所以我根据文章编写了一个shell脚本,但是@987654326行@ 不起作用,~/var/app/current/test.py
、/var/app/current/test.py
、test.py
、/tmp/deployment/application/test.py
之类的路径也不起作用...您认为有办法访问我丢失的文件吗?
不幸的是,eb-tools.log
似乎不再包含有关它尝试运行的任何命令的任何信息(根据文章之前提到的/opt/elasticbeanstalk/hooks/appdeploy/post
目录)。【参考方案2】:
根据Custom Platform HooksAWS 文档:
警告
在托管平台上使用自定义平台挂钩不是 支持的。自定义平台挂钩是为自定义平台设计的。在 Elastic Beanstalk 托管平台的工作方式可能不同或 有一些问题,并且行为可能因平台而异。在 Amazon Linux AMI 平台(早于 Amazon Linux 2),它们可能 在某些情况下仍然以有用的方式工作;谨慎使用。
自定义平台挂钩是 Amazon Linux 上的一项遗留功能 AMI 平台。在 Amazon Linux 2 平台上,自定义平台挂钩
/opt/elasticbeanstalk/hooks/
文件夹已完全停产。 Elastic Beanstalk 不会读取或执行它们。 亚马逊 Linux 2 平台支持一种新的平台钩子,专门设计的 扩展 Elastic Beanstalk 托管平台。您可以添加自定义 脚本和程序直接到应用程序中的 hooks 目录 源包。 Elastic Beanstalk 在各种实例中运行它们 供应阶段。有关更多信息,请展开平台挂钩 Extending Elastic Beanstalk Linux platforms中的部分。
这意味着在 Amazon Linux 2 上,您可以创建 .platform/hooks/
目录来托管具有相应 .sh 的 prebuild、predeploy 和 postdeploy 文件夹脚本。
【讨论】:
以上是关于如何在部署到 Elastic Beanstalk 后运行 Python 脚本的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 TFS 2017 部署到 Elastic Beanstalk?
部署到 Elastic Beanstalk 时如何安装 Go 依赖项?
如何在部署到 Elastic Beanstalk 的 Spring Boot 项目中找到资源文件?
如何以编程方式获取部署到 Elastic Beanstalk 环境的应用程序版本