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

8
我有一个弹性 Beanstalk 应用程序,同时利用了 Web 层和工作层。通过 SQS 将作业从 Web 层卸载到工作层,以保持面向 Web 的服务器的速度。两个环境使用完全相同的代码库,并在它们下面使用 RDS 实例。
我需要在工作层的领导者服务器上运行 cron 作业。我创建了一个名为 crontab 的文件夹,其中包含一个名为 crontab 的文件(这是 Laravel Web 应用程序):
* * * * * root php /var/www/html/artisan do:something:with:database

然后,我创建了一个名为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

.. 一切都好。现在,我想使用eb deploy命令将其部署到EB。然而,我只想让worker层接管cron作业,因为我们只能让一个服务器在整个组中运行crons。

有没有办法告诉ebextensions配置文件仅在worker层上运行config命令?类似于worker_only: true在这里非常有用,但它似乎不存在。

有人能提供一些关于如何实现这一点的见解吗?谢谢。

1个回答

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

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"'

3
检查环境属性的确切测试是什么?这将使答案更有帮助 :-) - mikhuang
@mikhuang:有点晚了,但是也许这个能帮到你? - djvg
可以在这里找到一个最小的示例,而无需手动设置环境属性。 - djvg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接