Pull to refresh

Что делать если в Ваш Amazon EC2 instance ударила молния?

Reading time4 min
Views4.2K
Как многим известно, недавно в Ирландии был обесточен один из датацентров 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 ничего не смогли подсказать.

Даже если сейчас «молния ударила» мимо вашего сервера, это еще не значит что в следующий раз тоже «пронесет».

Итак, что я делал:

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
Tags:
Hubs:
+35
Comments11

Articles