Как многим известно, недавно в Ирландии был обесточен один из датацентров Amazon. Об этом уже рассказывали. Как я понял из общения со своими коллегами, большинство пользователей Amazon EC2 получили разве что downtime, но вот мне не повезло больше — у меня не только инстансы остановились, но один из моих volume-ов перешел в состояние error.
Все бы ничего (ведь есть snapshot-ы), но вот незадача: отключать (detach) EBS volume-ы нельзя, если они подключены как root к какому либо инстансу. Во всяком случае через web.
И так, у вас есть instance в состоянии stopped. К нему подключен volume со статусом error. Так же должно прийти письмо с извинениями и примитивными инструкциями по типу «не беспокойтесь, просто подключите восстановленный из snapshot-a volume». Но как оказалось не все так просто. Приведу список шагов, которые мне пришлось сделать, чтоб восстановить свой instance.
Небольшое замечание: Возможно для тех, кто активно работают с Amazon EC2 это не выглядит проблемой. Но для меня, который к EC2 относился «работает? круто!», было не так просто разобраться как и что делать. По этому, инструкция скорее для тех, кто попал в такое же положение, и не хочет создавать новый инстанс просто удалив старый.
В support я написал, но они кроме сочувсвующих советов использовать Amazon AMI/API Tools ничего не смогли подсказать.
Даже если сейчас «молния ударила» мимо вашего сервера, это еще не значит что в следующий раз тоже «пронесет».
Итак, что я делал:
Первое что нужно сделать, это зайти в AWS Management Console, Elastic Block Storage -> Snapshots. Там должен быть snapshot с описанием «Recovery snapshot for vol-XXXXXXX». С него надо создать восстановленную копию volume-a.
А вдруг повезет? Процетирую то, что мне отписали в суппорте:
К сожалению у меня не вышло — на все операции выдавало «Unable to ...»
Итак, единственное решение в данной ситуации — использовать Amazon AMI Tools.
Загрузить можно вот вот отсюда.
Так, как у меня Ubuntu, мне достаточно было:
Под Windows должно быть не намного сложнее.
Далее нужно создать ключи доступа. Это немного другое, чем «Key pairs» в Network/Security в Management Console.
Для того, чтоб создать пару ключ-сертификат доступа, необходимо зайти на aws.amazon.com, там выбрать Account -> Security Credentials. Там перейти на закладку x.509 Certificates. Там нажать на «Create a new Certificate» и сохранить два файла — один сертификат (назовем условно ec2-cert.pem) и приватный ключик (ec2-key.pem).
Важно: не перепутайте местами ключ и сертификат. Они имеют одинаковые расширения (.pem) но если из поменять местами, тулзы будут выпадать с java.security.cert.CertificateParsingException.
Далее лучше (хотя не обязательно — можно через параметры) установить переменные окружения:
После этого можно проверить все ли нормально подхватилось:
Вот в регионе eu-west-1 и произошла проблема, а у меня там хостилса инстанс. Смотрим наши инстансы:
Вот BLOCKDEVICE нам и нужен (а за одно, запомните /dev/sda1 — он еще понадобится). А именно «vol-20155a49» (у вас, конечно же, будет другой). Проверяем в консоли — действительно ли этот тот самый volume который не хочет отключатся? Если да, то нам остался последний шаг:
После этого заходим в консоль управления и спокойно подключаем volume, восстановленный из снепшота. Кстати, вот тут и надо вспомнить что было сразу после BLOCKDEVICE — у меня это было "/dev/sda1".
Готово! Теперь можете стартовать инстанс :)
Как резюме могу сказать, что Amazon AMI/API Tools не так сложны как кажется (205 утилит в суме), и их вполне можно использовать тогда, когда web-консоль управления пасует.
Ни грозы, ни пожаров вашим серверам!
Полезные ссылки:
* Инструкция по настройке утилит
* Как использовать ключи и сертификаты
* Загрузить утилиты: AMI/API
Все бы ничего (ведь есть snapshot-ы), но вот незадача: отключать (detach) EBS volume-ы нельзя, если они подключены как root к какому либо инстансу. Во всяком случае через web.
И так, у вас есть instance в состоянии stopped. К нему подключен volume со статусом error. Так же должно прийти письмо с извинениями и примитивными инструкциями по типу «не беспокойтесь, просто подключите восстановленный из snapshot-a volume». Но как оказалось не все так просто. Приведу список шагов, которые мне пришлось сделать, чтоб восстановить свой instance.
Небольшое замечание: Возможно для тех, кто активно работают с Amazon EC2 это не выглядит проблемой. Но для меня, который к EC2 относился «работает? круто!», было не так просто разобраться как и что делать. По этому, инструкция скорее для тех, кто попал в такое же положение, и не хочет создавать новый инстанс просто удалив старый.
В support я написал, но они кроме сочувсвующих советов использовать Amazon AMI/API Tools ничего не смогли подсказать.
Даже если сейчас «молния ударила» мимо вашего сервера, это еще не значит что в следующий раз тоже «пронесет».
Итак, что я делал:
1. Восстановление из Recoverty snapshot
Первое что нужно сделать, это зайти в AWS Management Console, Elastic Block Storage -> Snapshots. Там должен быть snapshot с описанием «Recovery snapshot for vol-XXXXXXX». С него надо создать восстановленную копию volume-a.
2. Попытаться отсоеденить поломанный volume
А вдруг повезет? Процетирую то, что мне отписали в суппорте:
You can select «Detach Volume» from within the AWS Management Console to detach this volume from your instance. You may need to execute multiple force-detaches if this hangs in a «detaching» state.
If you are unable to do either command or both are appearing to fail, you would need to launch a new instance and attach your newly recovered volume to this new instance.
Вы можете выбрать «Detach Volume» из AWS Management Console для того, чтоб отсоеденить volume от вашего инстанса. Возможно Вам надо будет выполнить несколько операций по отключению с включенной опцией «force» если оно подвисает в состоянии «detaching».
Если у вас не получилось какую либо комманду, вам прийдется создать новый инстанс и подключить восстановленный volume к инстансу.
К сожалению у меня не вышло — на все операции выдавало «Unable to ...»
3. Воспользоватся AMI Tools
Итак, единственное решение в данной ситуации — использовать Amazon AMI Tools.
Загрузить можно вот вот отсюда.
Так, как у меня Ubuntu, мне достаточно было:
sudo apt-get install ec2-ami-tools
sudo apt-get install ec2-api-tools
Под Windows должно быть не намного сложнее.
Далее нужно создать ключи доступа. Это немного другое, чем «Key pairs» в Network/Security в Management Console.
Для того, чтоб создать пару ключ-сертификат доступа, необходимо зайти на aws.amazon.com, там выбрать Account -> Security Credentials. Там перейти на закладку x.509 Certificates. Там нажать на «Create a new Certificate» и сохранить два файла — один сертификат (назовем условно ec2-cert.pem) и приватный ключик (ec2-key.pem).
Важно: не перепутайте местами ключ и сертификат. Они имеют одинаковые расширения (.pem) но если из поменять местами, тулзы будут выпадать с java.security.cert.CertificateParsingException.
Далее лучше (хотя не обязательно — можно через параметры) установить переменные окружения:
export EC2_CERT=~/путь-к-файлам/ec2_cert.pem
export EC2_PRIVATE_KEY=~/путь-к-файлам/ec2-key.pem
После этого можно проверить все ли нормально подхватилось:
$ ec2-describe-regions
REGION eu-west-1 ec2.eu-west-1.amazonaws.com
REGION us-east-1 ec2.us-east-1.amazonaws.com
REGION ap-northeast-1 ec2.ap-northeast-1.amazonaws.com
REGION us-west-1 ec2.us-west-1.amazonaws.com
REGION ap-southeast-1 ec2.ap-southeast-1.amazonaws.com
Вот в регионе eu-west-1 и произошла проблема, а у меня там хостилса инстанс. Смотрим наши инстансы:
$ ec2-describe-instances
RESERVATION ....
INSTANCE ...(тут много ненужной инфы)
BLOCKDEVICE /dev/sda1 vol-20155a49 2011-05-20T14:14:54.000Z
...
Вот BLOCKDEVICE нам и нужен (а за одно, запомните /dev/sda1 — он еще понадобится). А именно «vol-20155a49» (у вас, конечно же, будет другой). Проверяем в консоли — действительно ли этот тот самый volume который не хочет отключатся? Если да, то нам остался последний шаг:
$ ec2-detach-volume --region eu-west-1 vol_2055a49 --force
После этого заходим в консоль управления и спокойно подключаем volume, восстановленный из снепшота. Кстати, вот тут и надо вспомнить что было сразу после BLOCKDEVICE — у меня это было "/dev/sda1".
Готово! Теперь можете стартовать инстанс :)
Как резюме могу сказать, что Amazon AMI/API Tools не так сложны как кажется (205 утилит в суме), и их вполне можно использовать тогда, когда web-консоль управления пасует.
Ни грозы, ни пожаров вашим серверам!
Полезные ссылки:
* Инструкция по настройке утилит
* Как использовать ключи и сертификаты
* Загрузить утилиты: AMI/API