如何在部署到Elastic Beanstalk后运行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

我正在尝试在运行python 3.4的AWS Elastic Beanstalk 64位Linux实例上运行python脚本。我目前正在使用
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
    目录)。