Elastic Beanstalk:我如何仅在工作层上运行ebextension命令?

时间:2015-02-10 06:19:20

标签: amazon-web-services elastic-beanstalk worker

我有一个弹性beanstalk应用程序,它同时使用Web层和工作层。通过SQS将作业从Web层卸载到工作层,以使面向Web的服务器保持快速。两种环境都使用完全相同的代码库,并在其下使用RDS实例。

我需要在工作层的领导服务器上运行cron作业。我已经创建了一个.ebextensions文件夹,其中包含一个名为crontab的文件,如下所示(它是一个Laravel网络应用程序):

* * * * * root php /var/www/html/artisan do:something:with:database

然后,我创建了一个名为01cronjobs.config的文件,它根据以下内容更新了根目录下的环境crontab:

container_commands:
  01_remove_old_cron_jobs:
  command: "crontab -r || exit 0"
  02_cronjobs:
  command: "cat .ebextensions/crontab | crontab"
  leader_only: true
一切都很好。现在,我想使用eb deploy命令将其部署到EB。但是,我只希望工作层承担cron作业,因为我们只能有一台服务器在整个组中运行crons。

有没有办法告诉ebextensions配置文件在工作层上运行config命令?像worker_only: true这样的东西在这里会很棒,但它似乎并不存在。

任何人都能提供一些有关如何实现这一目标的见解吗?谢谢。

1 个答案:

答案 0 :(得分:5)

  • 设置类似“tier = worker”的环境属性。 Elastic Beanstalk - >申请 - >环境 - >配置 - >软件配置。
  • 使用“command”键的“test”属性来测试此属性,因此只有在设置了environment属性时才会执行该命令。

AWS doc中的示例:

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html

commands:
  python_install: 
    command: myscript.py
    cwd: /home/ec2-user
    env: 
      myvarname: myvarvalue
    test: '[ ! /usr/bin/python ] && echo "python not installed"'