Я настроил (с поддержкой EBS) AMI для запуска демонстрационной версии нашего приложения. (AMI содержит Ubuntu 11.04 с установкой Tomcat и MySQL для самого приложения и Jenkins для простого обновления демонстрации одним щелчком).
Это 32-битный AMI, что означает, что у меня есть следующие параметры типа экземпляра:
Мы заметили, что нам бы хотелось большей производительности для демонстрационного сервера, чем может предложить c1.medium. (В частности, я подозреваю, что «Производительность ввода-вывода: умеренная» может быть узким местом, хотя я не уверен, поможет ли это улучшение, учитывая, что мы используем EBS для всего.)
В любом случае, чтобы использовать более мощные типы экземпляров (например, «m1.large» или «c1.xlarge»), Мне понадобится 64-битный AMI.
Один из способов сделать это - создать новый экземпляр из чистой 64-битной Ubuntu AMI, затем переустановите мою систему там и, наконец, сохраните это как новый AMI. Я мог бы смонтировать том с текущими настройками, а затем cp -a
некоторые вещи переносятся на корневой диск нового экземпляра, что несколько поможет. Но даже в этом случае этот подход может быть несколько утомительным и трудоемким.
Итак, мой вопрос: есть ли более простой автоматизированный способ преобразования 32-разрядного AMI в 64-разрядный?
Лучшие практики:
Всякий раз, когда вы создаете AMI (или даже настраиваете экземпляр), всегда документируйте точные шаги, которые вы предприняли для установки и настройки программного обеспечения, и какие данные вы в него поместили и где. Это дает много преимуществ, включая упрощение перестройки одного и того же AMI для другой архитектуры.
Более того, я рекомендую использовать сценарии для большей части или всех этапов установки и настройки, чтобы вы могли автоматизировать создание AMI. Это упрощает настройку и тестирование новых версий.
Вот пример того, как я создаю Ubuntu AMI с установленными Git и gitolite для частных серверов репозитория Git:
https://github.com/alestic/alestic-git/blob/master/bin/alestic-git-build-ami
Первая рекомендация выше предназначена для установки программного обеспечения, которое обычно устанавливается на корневой том. Ваши данные должны быть размещены на отдельных томах EBS, которые вы подключаете к своему экземпляру после запуска AMI. Это дает много преимуществ, включая возможность перемещать данные между экземплярами, например, когда вы хотите переключиться на запуск нового AMI. Он также позволяет делать копии томов данных для присоединения к экземплярам разработки.
Вы можете подумать, что этот совет слишком поздно для вас, но вы собираетесь создать еще один AMI, поэтому ...
Нет, автоматизированного способа не существует. Вам нужно будет создать новый AMI, начиная с Ubuntu-plain.
Можно преобразовать установку Unbuntu, но это действительно беспорядочно. Лучше всего сделать свежий AMI.
Я считаю, что вам нужно будет начать с нового AMI, но вы можете сгенерировать список пакетов на старом изображении с помощью dpkg:
dpkg --get-selections | awk '{print $1}' > pkgs.old
Затем используйте это в новом образе, чтобы выяснить, какие пакеты вам могут потребоваться установить:
dpkg --get-selections | awk '{print $1}' | fgrep -v -f - pkgs.old
Тогда, вероятно, копирование файлов из / etc должно помочь вам в этом.
И +1 за написание сценария - вы вряд ли каждый настраиваете эти вещи один или два раза - обычно это много-много раз. Автоматизация и контроль версий имеют решающее значение.
Попробуйте выполнить обратное проектирование 32-битного AMI с помощью чертежа:
https://github.com/devstructure/blueprint
Сохраните вывод как сценарий bash и используйте обработчик пользовательских данных при запуске 64-разрядной версии.