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

Ark*_*ulG 6 worker amazon-web-services amazon-elastic-beanstalk

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

我需要在工作层的领导服务器上运行一个cron作业.我创建了一个.ebextensions文件夹,其中包含一个调用crontab它的文件(它是一个Laravel Web应用程序):

* * * * * root php /var/www/html/artisan do:something:with:database
Run Code Online (Sandbox Code Playgroud)

然后,我创建了一个名为的文件01cronjobs.config,它更新了root下的环境crontab,如下所示:

container_commands:
  01_remove_old_cron_jobs:
  command: "crontab -r || exit 0"
  02_cronjobs:
  command: "cat .ebextensions/crontab | crontab"
  leader_only: true
Run Code Online (Sandbox Code Playgroud)

.. 都好.现在,我想使用该eb deploy命令将其部署到EB .但是,我只希望工作层承担cron作业,因为我们只能有一台服务器在整个组中运行crons.

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

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

Fra*_*ank 5

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

来自AWS文档的示例:

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"'
Run Code Online (Sandbox Code Playgroud)

  • 检查环境属性的确切测试是什么?它会使这个答案更有帮助:-) (3认同)