Как проверить, готов ли экземпляр EC2 к SSH или нет с помощью скрипта bash?

#amazon-web-services #jenkins #amazon-ec2

Вопрос:

Я написал сценарий, который запускает экземпляр EC2, а затем запускает приложение. После события успешного выполнения задания он завершит работу экземпляра EC2.

Это задание выполняется в запланированное время в Jenkins, настроенное с помощью ansible.

В последнее время я заметил, что мой экземпляр EC2 запускается, но не выполняет ssh на машине, из-за чего моя работа cron не запускается / не запускается. С запущенным экземпляром EC2 он может быть или не быть готов к ssh.

Я использую этот способ, чтобы проверить состояние работы моего экземпляра EC2:

 while [ "$ec2_instance_status" != '"running"' ]; do
    echo "=======instance state - $ec2_instance_status======="
    sleep 10
    ec2_instance_status=$(aws --region=ap-southeast-2 --profile=prod ec2 describe-instance-status --instance-ids $instance_id | jq ".InstanceStatuses[0].InstanceState.Name")
done
 

Я хочу добавить шаг в эту часть, где он может проверить, готов ли экземпляр EC2 для ssh. Если он не готов, он снова будет ждать выполнения следующих задач.

Как это можно сделать? Я искал в Интернете решение, но не нашел ничего близкого к решению этой проблемы. Это поможет мне сделать мою работу cron доказательством сбоя на этапе запуска.

Комментарии:

1. Обычный способ сделать это-передать свой скрипт в user-data экземпляр EC2, чтобы он запустился при запуске. Таким образом, вам вообще не нужно ssh входить в экземпляр.

2. @MarkB Я этого не понял. Можете ли вы поделиться какой-либо ссылкой?

3. docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html

Ответ №1:

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

Если вы хотите запускать сценарий каждый раз при запуске экземпляра, поместите сценарий в:

 /var/lib/cloud/scripts/per-boot/
 

Пример см. в разделе: Автоматическая остановка экземпляров EC2 при завершении работы сообщества разработчиков задач