#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 при завершении работы сообщества разработчиков задач