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

How to run scripts automatically after deployment in AWS using EB CLI?

我正在尝试在 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

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

wsgi.conf的内容是固定的,所以基本上我可以很容易地制作一个脚本来创建它,但问题是如何自动触发脚本?

PS:我是 AWS 新手

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

在您的情况下,您不能使用 FilesCommands 部分,因为:

The commands are processed in alphabetical order by name, and they run before the application and web server are set up and the application version file is extracted.

您需要使用 Container_commands 部分:

They run after the application and web server have been set up and the application version file has been extracted, but before the application version is deployed.

示例.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 部分中的原始文件.