Pull to refresh

Восстановление доступа к Amazon EC2 instance при потере pem-файла

Reading time3 min
Views15K
Однажды Ubuntu на ноутбуке перестала запускаться, ругаясь на поврежденную xfs на диске. Мало того, на нем хранился проект, над которым я работаю. Был, правда, git-репозиторий на EC2 машине, однако pem-файл лежал на этом же диске.
Упомяну так же, что не ставил на сервер FTP, доступ по SFTP нельзя было бы получить без ключа.
Конечно можно долго говорить о прелестях резервного копирования, однако пришлось искать способ как восстановить доступ к облачной машине, чтобы не потерять уже сделанную работу.

Достаточно долго исследуя AWS Management Console на предмет того, как восстановить pem-файл, я убедился, что это, похоже, невозможно, Amazon его не хранит. При создании нового инстанса консоль предлагает выбрать уже созданный ключ, либо создать новый.



Если бы на существующей машине не хранились файлы проекта, я бы мог спокойно удалить машину и создать новую, с новым pem-файлом.

И тут я вспомнил о чудесной возможности, которую предоставляет AWS — создание собственных образов (AMI). Суть данной функции заключается в том, что можно установить весь набор необходимого ПО на один инстанс, сохранив образ AMI, используя его для создания серии однотипных машин. Можно развернуть в EC2 кластер из одного образа, или производить сохранение состояния машины.

Elastic IP

Elastic IP позволяет резервировать IP-адрес за Вашим аккаунтом, назначать его любой из машин. В моем случае резервирование IP было необходимой мерой, т.к. на машине стоял уже настроенный DNS, который не хотелось перенастраивать. Однако, на сколько я понял, при резервировании выдается новый IP, так что не получится зарезервировать ip, выданный при запуске машины. Так что, если Вы не озаботились резервированием адреса ранее, или же его смена не критична, этот пункт можно опустить.

Если заранее зарезервировать IP, этот сервис позволит подменить машину незаметно для окружающего мира. Рекомендую его использовать, Amazon берет деньги лишь за простой IP-адреса, т.е. когда он не привязан к работающей машине (для одного IP, подробней можно посмотреть тут).
Управление резервированием и привязкой IP можно производить в консоли (EC2 / NETWORK & SECURITY / Elastic IPs).

Создание AMI

Как я уже написал, AMI позволит сохранить все, что уже было на диске машины (установленное и сконфигурированное программное обеспечение, базы данных, свои файлы) в образ.

Для создания образа идем в раздел EC2 консоли управления AWS, выбираем Instances. Нажимаем правой кнопкой мыши по инстансу, к которому потеряли доступ, выбираем из контекстного меню пункт "Create Image (EBS AMI)".



В появившемся окне пишем имя AMI, указываем необходимые опции. Вот тут следует обратить внимание пользователям Free Tier, амазоновской годовой халявы. Необходимо, чтобы Ваш AMI образ, в сумме с образом уже существующей машины, не превысил фри-тайеровский лимит на EBS (Elastic Block Store), который, на момент написания статьи, равен 30 Гб.

Запуск машины

Существует два способа поднять машину из нашего AMI — через EC2 / Instances / Launch Instance, при выборе AMI перейти на вкладку My AMI's, или выбрать в разделе AMIs консоли нужный образ и в контекстном меню нажать Launch Instance.



При выборе Key Pair для машины(см. первый скриншот), создаем новый pem файл, загружаем его, и запускаем машину.
Если использовали Elastic IP, отвязываем его от старой машины, привязываем к новой.
Старую машину (подключившись к новой, убедившись, что все получилось) можно удалять. AMI также можно удалить, в AMIs выбрав для нее De-register.

UPD: astlock предложил другой вариант:
-стопаешь инстанс
-поднимаешь любой новый из любого образа
-маунтишь этот рутовый диск к нему
-правишь authorized_keys, вставляешь свой ключ
-отмаунчиваешь диск, убиваешь временный инстанс
-маунтишь на старый, включаешь, коннектишься с новым ключем.


В чем разница: применение последнего способа будет связано с немного большей недоступностью сервисов на инстансе, связанной с временными затратами на выполнение указанных операций. Мой способ сводит это время к минимуму, необходимому на ремаппинг elastic ip.
Tags:
Hubs:
Total votes 22: ↑19 and ↓3+16
Comments24

Articles