【问题标题】:Elastic Beanstalk: How would I run an ebextension command on the worker tier only?Elastic Beanstalk:如何仅在工作层上运行 ebextension 命令?
【发布时间】:2015-04-10 02:42:24
【问题描述】:

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

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

* * * * * 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。但是,我只希望工作层承担 cron 作业,因为我们只能让一台服务器在整个组中运行 cron。

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

谁能提供一些关于我如何实现这一目标的见解?谢谢。

【问题讨论】:

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


    【解决方案1】:
    • 设置环境属性,如“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"'
    

    【讨论】:

    • 检查环境属性的确切测试是什么?这将使这个答案更有帮助:-)
    • @mikhuang:有点晚了,不过this也许能帮上忙?
    • 可以找到一个无需手动设置环境属性的最小示例here
    猜你喜欢
    • 2018-10-13
    • 2014-03-04
    • 1970-01-01
    • 2016-02-22
    • 2014-11-24
    • 2018-05-23
    • 2018-04-16
    • 2019-04-23
    • 2014-06-07
    相关资源
    最近更新 更多