如何在部署到Elastic Beanstalk后运行Python脚本
我正在尝试在运行python 3.4的AWS Elastic Beanstalk 64位Linux实例上运行python脚本。我目前正在使用如何在部署到Elastic Beanstalk后运行Python脚本,python,amazon-web-services,amazon-elastic-beanstalk,Python,Amazon Web Services,Amazon Elastic Beanstalk,我正在尝试在运行python 3.4的AWS Elastic Beanstalk 64位Linux实例上运行python脚本。我目前正在使用ebextensions目录中的container\u命令来运行一些命令,但我的问题是这些命令是在应用程序完全部署到环境之前运行的。有人知道如何在部署后执行python脚本吗?我发现了Rails环境的详细解决方案,但我使用的是Python。我认为您有两种选择: 将脚本托管在appdeploy/post文件夹中,如中所述: 因此,当我在EC2实例上查看eb-t
ebextensions
目录中的container\u命令来运行一些命令,但我的问题是这些命令是在应用程序完全部署到环境之前运行的。有人知道如何在部署后执行python脚本吗?我发现了Rails环境的详细解决方案,但我使用的是Python。我认为您有两种选择:
将脚本托管在appdeploy/post
文件夹中,如中所述:
因此,当我在EC2实例上查看eb-tools.log时,我发现
它正在搜索要在一个数据库中运行的脚本
/重新启动后的opt/elasticbeanstalk/hooks/appdeploy/post目录
网络服务器。如果你把shell脚本放到这个
目录,它们将在部署后执行,就像您希望的那样!
但是,默认情况下,此目录不存在,因为Amazon不存在
使用任何部署后脚本,因此我们还需要确保这一点
目录已创建
如果第一个选项不起作用,我会做的是添加我要在部署到该EB的代码中运行的代码,并将其作为部署过程的一部分运行。例如,如果我通过windows计算机上的批处理文件进行部署,我会执行以下操作:
call eb deploy
call http://myurl.com/postDeploy
根据AWS文件:
警告
在托管平台上使用自定义平台挂钩并非易事
支持。自定义平台挂钩是为自定义平台设计的。在…上
Elastic Beanstalk管理的平台它们的工作方式可能不同,也可能不同
存在一些问题,不同平台的行为可能有所不同。在…上
亚马逊Linux AMI平台(之前的亚马逊Linux 2),他们可能
在某些情况下仍然以有用的方式工作;小心使用它们
自定义平台挂钩是Amazon Linux上存在的一项遗留功能
AMI平台。在AmazonLinux2平台上,自定义平台挂钩
/opt/elasticbeanstalk/hooks/
文件夹完全停止使用。
Elastic Beanstalk不读取或执行它们亚马逊Linux 2
平台支持一种专门设计的新型平台挂钩
扩展弹性Beanstalk管理平台。您可以添加自定义
脚本和程序直接连接到应用程序中的hooks目录
源包。Elastic Beanstalk在各种实例中运行它们
资源调配阶段。有关详细信息,请展开平台挂钩
第节
这意味着,在Amazon Linux 2上,您可以创建.platform/hooks/
目录,用相应的.sh脚本托管预构建、预部署和后部署文件夹。您可以从EB外部执行此操作,您使用什么进行部署?我使用EB CLI进行部署。我可以用ssh连接到环境中并手动运行脚本,但我只是想知道是否有办法将它设置为在每次部署后自动运行。嗨,Naguib,谢谢你的回答!我已经尝试了选项1几次,但是在运行python脚本时遇到了问题。我把它放在我项目的主目录中,名为test.py
,但是我尝试过的每一个文件路径组合都会导致一个错误,说没有这样的文件或目录。
所以我根据文章写了一个shell脚本,但行cd$EB\u CONFIG\u APP\u CURRENT
不起作用,像~/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
目录)。