Процесс определения, когда новый хост ec2 может быть подключен к - PullRequest
3 голосов
/ 13 сентября 2011

Я использовал fabric и boto для запуска новых хостов ec2 для некоторой временной обработки, но у меня всегда были проблемы с пониманием, когда я смогу подключиться к хосту.Проблема в том, что я могу спросить у ec2, когда что-то готово, но никогда не готово.

Этот процесс, который я заметил, работает лучше всего (хотя он все еще отстой):

  1. Опрашивать ec2 до тех пор, пока он не скажет, что хост "активный"
  2. Опросить ec2, пока у него не будет public_dns_name
  3. Попробуйте подключиться к новому хосту в цикле, пока он не примет соединение1011 *

Но иногда он, по-видимому, принимает соединение, прежде чем узнает о паре ключей ssh, с которой я его связал, и затем запрашивает пароль.

Есть ли лучший способ решитькогда я смогу подключиться к своим хостам ec2 после их запуска?Кто-нибудь написал библиотеку, которая делает это красиво и эффективно?

Ответы [ 2 ]

4 голосов
/ 14 сентября 2011

Я делаю то же самое для # 1 и # 2, но для # 3 у меня есть цикл кода, который пытается установить простое TCP-соединение с портом ssh (22) с короткими тайм-аутами и повторением попытки.Когда он, наконец, завершается успешно, он ждет еще пять секунд и затем запускает команду ssh.

Время и порядок запуска sshd и добавления открытого ключа ssh в .ssh / authorized_keys могут различаться в зависимости от AMIвы работаете.

Примечание: я мягко рекомендую использовать публичный IP-адрес напрямую вместо DNS-имени.IP-адрес закодирован в DNS-имени, поэтому нет необходимости добавлять DNS-запросы в процесс.

0 голосов
/ 13 сентября 2011

EC2 не имеет возможности узнать, когда ваш экземпляр готов принимать соединения SSH;он работает на гораздо более низком уровне, чем этот.

Лучший способ сделать это - обновить ваш AMI, чтобы иметь какой-нибудь сервлет здоровья.Это может быть очень просто - всего несколько строк скрипта web.py - который запускается на более поздних этапах запуска и просто возвращает код состояния 200 для любого HTTP-запроса.К тому времени, когда сервлет отвечает на запросы, все остальное также должно быть работоспособно, так что вы можете проверить свой экземпляр с экспоненциальным откликом по этому URL.собственные преимущества), этот сервлет здоровья требуется в любом случае и имеет дополнительное преимущество - он сообщает балансировщику нагрузки, когда экземпляр выходит из строя по любой причине.Это просто общая лучшая практика на EC2.

...