1

Я изучал различные методы запуска команд при создании экземпляров EC2 с использованием эластичного бобового стека на AWS. Мне были предоставлены различные методы для этого с помощью технической поддержки AWS, включая крючки жизненного цикла, пользовательские AMI и .ebextensions. У меня возникли проблемы с получением первых двух методов (крючки жизненного цикла и пользовательских AMI) для работы с EB.Выполнение команд при создании экземпляров с использованием AWS Elastic Beanstalk

В настоящее время я использую .ebextensions для запуска команд при развертывании, но не уверен, что есть способ запускать набор команд при создании только вместо каждого раза, когда я развертываю код. Например, у меня есть файл .ebextensions/03-commands.config, содержащий следующий код:

container_commands: 
    01_npm_install: 
    command: "npm install -g -f [email protected]" 

Однако, я только хочу этот код для запуска после создания экземпляра, а не каждый раз, когда я раскрываю, так как он в данный момент делает. Кто-нибудь знает, как это сделать?

Заранее благодарен!

+0

Может добавить более подробную информацию о том, чего вы хотите достичь? –

+1

@VadymFedorov Я немного изменил, чтобы добавить дополнительную информацию. Помогает ли это? –

+0

Я нашел большой успех, используя оба метода 1 и 2, предложенные AWS Tech Support. Ловушки жизненного цикла отлично подходят для выполнения одной команды (т. Е. Для создания экземпляра, как вы хотите), поэтому я предлагаю изучить его немного больше. Пользовательские AMI прекрасно подходят для более сложных потребностей в конфигурации (т.установка большого количества настраиваемого программного обеспечения, его обновление, настройка среды и т. д.). Попробуйте еще раз, и вернитесь, если у вас будут трудности! –

ответ

0

Я бы рекомендовал создать сценарий idempotent в вашем приложении, который оставляет файл-маркер в экземпляре в каком-либо месте say say/var/myapp/marker, используя что-то вроде mkdir -p /var/myapp-state/; touch /var/myapp-state/marker при успешном выполнении. Таким образом, в вашем скрипте вы можете проверить, что, если файл маркера существует, вы можете сделать свой скрипт no-op.

Тогда вы можете вызвать свой скрипт из команд контейнера, но он будет без-op каждый раз, потому что при первом успешном выполнении он создаст файл маркера, а последующие исполнения будут без-ops.

+0

Любая причина для отрицательного голоса? –

+0

Кто знает, почему некоторые люди вниз? Я сбалансировал это для вас, поскольку это казалось мне разумным решением. – tugi

0

Создайте пользовательский AMI. Таким образом, вы можете настроить свои экземпляры, кто вы хотите, и они начнут быстрее

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.customenv.html

Update

Я не понимаю, почему кто-то вниз голосовать в этом. В любом случае, как было сказано в комментариях, пользовательские AMI - отличный способ создать собственное поведение на ваших экземплярах.

+0

Я не уменьшал, однако пользовательские ami могут вызывать много головных болей, и вы должны их поддерживать, гораздо лучше использовать ebextensions и по умолчанию эластичный beanstalk ami, где когда-либо возможно – SSED

+0

Если вы делаете много масштабирования (или по другим причинам для быстрого запуска) и имеет сложную настройку с rpms и другими вещами, требующими времени, которые вы можете полностью выполнить на этом этапе. Управление ami не является трудным и может быть легко осуществлено с помощью автоматизации. – Gustaf

0

Как я вижу из вас вопрос, вы используете: container_commands, это означает, что вы используете эластичный бобовый стебель с докером. Правильно? В этом случае я бы рекомендовал прочитать: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker.html.

Идея заключается в том, что вы можете создать собственный файл Dockerfile, где вы можете указать все команды, необходимые для создания контейнера докеров, например, для установки всех зависимостей.

Я бы рекомендовал использовать .ebextensions для настройки и конфигурации Elastic Beanstalk, например, для указания конфигурации ELB или RDS. В файле Docker есть смысл указывать все команды, необходимые для создания контейнера для вашего приложения, включая настройку веб-сервера, зависимостей и т. Д.

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

+0

container_commands не имеет ничего общего с Docker при использовании Elastic Beanstalk. Это команды, которые запускаются в виртуальной среде на вашем экземпляре EC2 Extract Beanstalk. команды запускаются на вашем экземпляре EC2. – Gustaf