【问题标题】:AWS Elastic Beanstalk ebextensions configuration doesn't work when new instance gets spawned生成新实例时,AWS Elastic Beanstalk ebextensions 配置不起作用
【发布时间】:2021-12-04 22:15:20
【问题描述】:

在我的 Laravel 应用程序中,我创建了一个文件夹 .ebextensions,它具有在 EC2 实例中安装 supervisor 的配置。

当我第一次部署应用程序并创建实例时,一切正常。 Supervisor 已安装。

但是当实例扩展并生成新的 EC2 时,它不会采用相同的配置。我需要在较新的实例上手动安装主管。

有没有办法让较新的实例从 .ebextensions 中获取配置并以与第一次类似的方式运行它?

这是 .ebextensions 文件夹的结构

.ebextensions
    - supervisor
        - setup.sh
        - supervisor_laravel.conf
        - supervisord.conf
    - supervisor.config

setup.sh

#!/bin/bash

echo "Supervisor - starting setup"
. /opt/elasticbeanstalk/deployment/env

if [ ! -f /usr/bin/supervisord ]; then
    echo "installing supervisor"
    easy_install supervisor
else
    echo "supervisor already installed"
fi

if [ ! -d /etc/supervisor ]; then
    mkdir /etc/supervisor
    echo "create supervisor directory"
fi

if [ ! -d /etc/supervisor/conf.d ]; then
    mkdir /etc/supervisor/conf.d
    echo "create supervisor configs directory"
fi

. /opt/elasticbeanstalk/deployment/env && cat .ebextensions/supervisor/supervisord.conf > /etc/supervisor/supervisord.conf
. /opt/elasticbeanstalk/deployment/env && cat .ebextensions/supervisor/supervisord.conf > /etc/supervisord.conf
. /opt/elasticbeanstalk/deployment/env && cat .ebextensions/supervisor/supervisor_laravel.conf > /etc/supervisor/conf.d/supervisor_laravel.conf

if ps aux | grep "[/]usr/bin/supervisord"; then
    echo "supervisor is running"
else
    echo "starting supervisor"
    /usr/bin/supervisord
fi

/usr/bin/supervisorctl reread
/usr/bin/supervisorctl update

echo "Supervisor Running!"

yum -y install http://cbs.centos.org/kojifiles/packages/beanstalkd/1.9/3.el7/x86_64/beanstalkd-1.9-3.el7.x86_64.rpm

if ps aux | grep "[/]usr/bin/beanstalkd"; then
    echo "beanstalkd is running"
else
    echo "starting beanstalkd"
    /bin/systemctl start beanstalkd.service
fi

echo "Beanstalkd Running..."

supervisor_laravel.conf

[program:worker]
process_name=%(program_name)s_%(process_num)02d
command=/usr/bin/php /var/www/html/artisan queue:work --tries=3 --timeout=0
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
;user=forge
numprocs=3
redirect_stderr=true
stderr_logfile=/var/log/supervisor_laravel.err.log
stdout_logfile=/var/log/supervisor_laravel.out.log

supervisor.conf

[unix_http_server]
file=/tmp/supervisor.sock   ; (the path to the socket file)

[supervisord]
logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB        ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10           ; (num of main logfile rotation backups;default 10)
loglevel=info                ; (log level;default info; others: debug,warn,trace)
pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false               ; (start in foreground if true;default false)
minfds=1024                  ; (min. avail startup file descriptors;default 1024)
minprocs=200                 ; (min. avail process descriptors;default 200)
environment=SYMFONY_ENV=prod

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL  for a unix socket

[include]
files = /etc/supervisor/conf.d/*.conf

[inet_http_server]
port = 9000
username = user
password = pw

supervisor.config

container_commands:
    01_install_supervisor:
        command: ".ebextensions/supervisor/setup.sh"

【问题讨论】:

  • .ebextensions 里面有什么以及文件名旁边的文件内容是什么?
  • @ErmiyaEskandary 我已经编辑了这个问题。谢谢
  • instance logs 中的任何内容用于自动扩展的 EC2 实例?
  • 自动缩放的实例是否也在同一操作系统上运行?在这里思考 Windows 和 Linux 之间的路径变化
  • 现在我没有它的日志。此外,这两个实例都在同一个操作系统上运行。

标签: amazon-web-services amazon-elastic-beanstalk supervisord ebextensions


【解决方案1】:

我找到了答案。但方式略有不同。

最初,我将所有文件都放在 .ebextensions 文件夹中,我将一些文件移动到另一个名为“awsconfig”的文件夹中(名称无关紧要),并将 setup.sh 文件的一些命令移动到.platform/hooks/postdeploy 并将权限作为 chmod +x 授予 setup.sh

重要

AWS 在执行后清理 .ebextensions 文件夹。我读到了here

我这样做是因为在较新的实例(扩展后创建的实例)中安装了主管,但配置文件没有被复制,因为较新的实例中没有 .ebextensions 文件夹

为了在实例部署后复制配置文件,我使用了平台挂钩 postdeploy。

您可以阅读有关 platform-hooks-postdeploy here

这是我现在的结构

.ebextensions
    - supervisor
        - setup.sh
    - supervisor.config

.platform
    - hooks
        - postdeploy
            - setup.sh

awsconfig
    - supervisor
        - supervisor_laravel.conf
        - supervisord.conf

这些是 setup.php 文件中的更改,该文件分为不同文件夹中的两个文件

.ebextensions/supervisor/setup.sh

#!/bin/bash

echo "Supervisor - starting setup"
. /opt/elasticbeanstalk/deployment/env

if [ ! -f /usr/bin/supervisord ]; then
    echo "installing supervisor"
    easy_install supervisor
else
    echo "supervisor already installed"
fi

if [ ! -d /etc/supervisor ]; then
    mkdir /etc/supervisor
    echo "create supervisor directory"
fi

if [ ! -d /etc/supervisor/conf.d ]; then
    mkdir /etc/supervisor/conf.d
    echo "create supervisor configs directory"
fi

.platform/hooks/postdeploy/setup.sh

#!/bin/bash

. /opt/elasticbeanstalk/deployment/env && cat /var/www/html/awsconfig/supervisor/supervisord.conf > /etc/supervisor/supervisord.conf
. /opt/elasticbeanstalk/deployment/env && cat /var/www/html/awsconfig/supervisor/supervisord.conf > /etc/supervisord.conf
. /opt/elasticbeanstalk/deployment/env && cat /var/www/html/awsconfig/supervisor/supervisor_laravel.conf > /etc/supervisor/conf.d/supervisor_laravel.conf

if ps aux | grep "[/]usr/bin/supervisord"; then
    echo "supervisor is running"
else
    echo "starting supervisor"
    /usr/bin/supervisord
fi

/usr/bin/supervisorctl reread
/usr/bin/supervisorctl update

echo "Supervisor Running!"

yum -y install http://cbs.centos.org/kojifiles/packages/beanstalkd/1.9/3.el7/x86_64/beanstalkd-1.9-3.el7.x86_64.rpm

if ps aux | grep "[/]usr/bin/beanstalkd"; then
    echo "beanstalkd is running"
else
    echo "starting beanstalkd"
    /bin/systemctl start beanstalkd.service
fi

echo "Beanstalkd Running..."

所有其他文件的内容与我在问题中发布的内容相同。

【讨论】:

    猜你喜欢
    • 2020-12-02
    • 2015-04-23
    • 2021-02-01
    • 2020-08-27
    • 2018-03-26
    • 2018-06-05
    • 2021-11-24
    • 2021-04-16
    • 2013-06-14
    相关资源
    最近更新 更多