2015-05-10 5 views
1

Я хочу запустить сценарий python на EC2. Сценарий python должен загрузить файл .pickle. Сценарий получает документы из очереди Amazon (SQS) и обрабатывает их.EC2 Autoscale Python script

Мой вопрос: Как работает автомасштабирование? Являются ли эти отдельные экземпляры (или виртуальные серверы), кому нужно выполнить версию файла, каждый отдельно? Если это так, как мне выполнить файл в этом экземпляре? Создать образ AMI, который автоматически запускает скрипт при запуске? Я нашел способ просто запустить экземпляры с изображением и отправить скрипт для запуска с параметром user_data, но как это работает при автомасштабировании? Как я уже сказал, эти отдельные случаи? Или это всего лишь один случай, когда реклама больше мощности процессора и памяти увеличивается?

Я создаю скрипт Python, который использует автомасштабируемый интерфейс boto (http://boto.readthedocs.org/en/latest/autoscale_tut.html), который я запускаю в cronjob. Он должен проверять SQS несколько раз в день и масштабировать экземпляры вверх или вниз по количеству сообщений очереди. Это даже правильный путь?

ответ

1

Эрик, похоже, вы на правильном пути. Я думаю, что включение несколько идей из встроенных в процессе автомасштабирования в EC2 может помочь вам здесь:

  • Да, я хотел бы построить мастер-AMI, который имеет все загружается вам это нужно. Автосканирование обычно работает путем масштабирования «out/in» (добавляя больше/меньше экземпляров), а не масштабирования «вверх/вниз» (увеличение/уменьшение типа экземпляра). Это помогает повысить устойчивость и отсутствие времени перезагрузки после изменения размера.
  • Как вы это сделали с полем пользовательских данных, вы можете создать в этом AMI скрипт начальной загрузки, который запускает определенные обновления или операции во время разминки, или просто создайте сценарий поиска, который будет доступен для загрузки скрипта (возможно, из S3), чтобы затем выполняться. [Если вы используете встроенные роли IAM для обеспечения безопасности в своем ведре S3, вам не нужно вставлять ключи в ваш AMI для этой загрузки.]
  • При условии, что все в вашей группе автомасштабирования работает за балансировщиком нагрузки , тогда вы должны прикрепить свои новые экземпляры к ELB (или вашему собственному экземпляру HAproxy), когда они будут здоровы.

Таким образом, вы просто в основном эмулирует рабочий процесс автоматического масштабирования AWS, в то же время инъекционного свой собственный самозагрузки:

шкала до:

  • икру новый экземпляр
  • проверка здоровье
  • прилагается к ELB
  • проверить на наличие HTTP-здоровья (или wh на ваш взгляд, другой контроль работоспособности, который вы настроили), и пусть в него поступает трафик.

Масштаб вниз:

  • удалить из УДР
  • прекратить экземпляр

Мой предпочтительный способ начать самонастройку, чтобы загрузить простой скрипт для загрузки второй скрипт , используя поле пользовательских данных.Обычно я делаю это с помощью bash, но в мире нет причины, это не может быть скрипт python. Но таким образом сценарий начальной загрузки изолирован (и не застрял в AMI), поэтому я могу обновлять или настраивать его без необходимости повторного ввода AMI.

Скрипт, встроенный в AMI /root/scripts/bootstrap-me.sh может просто содержать:

#!/bin/bash 

/usr/bin/aws s3 cp s3://my.bucket/my-init-script.py ./ 
/usr/bin/python my-init-script.py 
/usr/bin/aws s3 cp s3://my.bucket/here-is-my.pickle ./ 

И тогда ваш my-init-script.py может содержать любой питон на основе логики вам это нужно, в том числе исполнения .pickle файла, который вы только что схватили ,

В любое время, когда вы вручную или автоматически запускаете автомасштабирование (для увеличения), вы должны просто передать пользовательские данные для выполнения сценария оболочки bootstrap-me.sh, и новый экземпляр должен иметь возможность присоединиться к ферме.

+1

Спасибо за ваш полный ответ! Я получил автомасштабирование. Я установил будильник, который активируется, когда SQS содержит около 1000 документов, а затем автоматически запускает новый экземпляр. Так что работает. Но теперь мне нужно создать AMI, который автоматически запускает скрипт python при загрузке. Я буду использовать ваш пример bootstrap-me.sh, спасибо за это! Надеюсь, это сработает, я дам вам знать! –

Смежные вопросы