Назад | Перейти на главную страницу

Папка с общими файлами в среде Amazon Elastic Beanstalk

Я работаю над приложением Drupal, которое планируется разместить в среде Amazon Elastic Beanstalk. По сути, Elastic Beanstalk позволяет приложению автоматически масштабироваться путем запуска дополнительных экземпляров веб-сервера на основе предопределенных правил. Общая база данных работает на инстансе Amazon RDS, к которому все инстансы имеют надлежащий доступ. Проблема в том общие файлы папка (сайты / по умолчанию / файлы).

Мы используем мерзавец как SCM, и с его помощью мы можем развертывать новые версии, выполняя $ git aws.push. В фоновом режиме Elastic Beanstalk автоматически удаляет ($ rm -rf) текущую кодовую базу со всех серверов, работающих в среде, и развертывает новую версию.

Планировалось использовать S3 (s3fs) для общих файлов в промежуточной среде и NFS в производственной среде. Нам удалось настроить среду до такой степени, что папка с общими файлами правильно монтируется после перезагрузки. Но...

Эта проблема заключается в том, что в этой настройке развертывание новых версий на запущенных экземплярах не удается, потому что $ rm -rf не может удалить смонтированный каталог, и в результате вся среда выходит из строя, и нам нужно перезапустить среду, что на самом деле не является элегантным решением.

Вопрос 1 это то, что было бы правильным способом управления общими файлами при таком развертывании? Вы работаете в такой среде? Как вы решили проблему?

Посмотрев на код Elastic Beanstalk Hostmanager (Ruby), кажется, есть способ подключить нашу функциональность (отключение, если оно установлено перед развертыванием и монтирование после развертывания) в Hostmanager (/ opt / hostmanager / srv / lib / elasticbeanstalk / hostmanager / application / phpapplication.rb), но скрипты, определенные в файле (т.е. /tmp/php_post_deploy_app.sh), похоже, не работают. Это может быть потому, что наши навыки Ruby отсутствуют.

Вопрос 2 Вам удалось перенести свою функциональность в Hostmanager (т.е. не изменять основные файлы Hostmanager)?

S3fs - плохая идея с точки зрения производительности, а также S3 не предназначен для монтирования, это не файловая система, это хранилище объектов.

Вместо этого используйте EFS -> https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/services-efs.html

В документации вы увидите, что в Beanstalk есть процедура для Drupal.

С Уважением,

Вы рассматривали возможность использования sources через .ebextensions с вашими общими файлами, хранящимися в S3?

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

я использовал sources для развертывания общих файлов (карт сайта), которые создаются нашим сервером приложений (и хранятся в S3).

sources: 
  "c:/inetpub/sitemaps": http://[S3 bucket]/sitemaps.zip

container_commands:
  01-copy-sitemaps-to-www:
    command: copy c:\\inetpub\\sitemaps\\*.* c:\\inetpub\\wwwroot\\ > copy_sitemaps_to_www.log 2>&1
    waitAfterCompletion: 5