如何使用EB CLI在AWS中部署后自动运行脚本?

时间:2015-04-12 04:04:55

标签: apache amazon-web-services amazon-ec2 elastic-beanstalk wsgi

我正在尝试在AWS上创建一个Django服务器。我的django应用程序依赖于一些数学python库,如numpy,scipy,sklearn等。但是每次部署后我都需要这个问题

sudo nano /etc/httpd/conf.d/wsgi.conf
---------------------------------------
add this line in the file
WSGIApplicationGroup %{GLOBAL}
---------------------------------------
sudo /etc/init.d/httpd reload

基本上我需要" WSGIApplicationGroup %{GLOBAL}"在我的wsgi.conf文件中,否则我得到504.我使用基于Amazon Linux 2014构建的自定义AMI,我使用EB CLI进行部署。但是,每当我部署wsgi.conf时,它都会重置并且它不包含我之前添加的行,我需要手动SSH到EC2实例并自己执行此任务。它给每次部署带来了开销,一旦我们扩展它们也是不可行的(克隆或创建实例也会重置它)。那么有没有办法在每次部署后自动完成?

wsgi.conf的内容是固定的,所以基本上我可以轻松创建一个脚本但是问题是如何自动触发脚本?

PS:我是AWS新手

1 个答案:

答案 0 :(得分:1)

您需要使用名为.ebextensions的AWS Elastic Beanstalk功能:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html

在您的情况下,您无法使用文件命令部分,因为:

  

命令按名称按字母顺序处理,然后运行   之前设置应用程序和Web服务器以及应用程序   提取版本文件。

您需要使用 Container_commands 部分:

  

他们在之后运行应用程序和Web服务器并且已经设置了   应用程序版本文件已被提取,但之前   部署了应用程序版本。

示例 .ebextensions / 01wsgi.config (未经测试: - ))

container_commands:

  apache_reload:
    command: |
      echo "WSGIApplicationGroup %{GLOBAL}" >> /etc/httpd/conf.d/wsgi.conf
      /etc/init.d/httpd reload   

可以根据需要随意调整我的示例,例如,您可以在某处复制临时wsgi.conf文件,然后替换 Container_commands 部分中的原始文件。