Terraform позволяет создавать инфраструктуры aws с помощью настраиваемых скриптов ansible.
Поскольку функция ami_from_instance из terraform, позволяет преобразовать экземпляр в AMI, а aws_instance - наоборот. Я новичок в этих инструментах и, возможно, не понимаю их тонкостей, но почему должен использоваться общий шаблон использования Packer для генерации ami, созданных Terraform?
@ydaetskcoR, вероятно, хороший ответ, потому что он начинает подробно описывать способ избежать упаковщика
Но почему вы хотите избегать Пакера? Несмотря на то, что это технически возможно сделать с Terraform, я не думаю, что это хороший подход, и я не знаю никого, кто бы это продвигал.
@ydaetskcoR Потому что изучение одного инструмента должно стоить меньше, и потому что я считаю эффективными шаги Terraform: запись-план-создание, а также возможность его перезапуска во время разработки.
Поскольку Packer создает AMI с Конфигурация как код, у вас будет воспроизводимый рецепт того, как создаются ваши AMI.
Если вы используете Terraforms ami_from_instance
, вы вместо этого создаете клоны невоспроизводимого источника, тем самым создавая серверы-снежинки (все они немного отличаются).
Также важной особенностью общедоступного облака является автомасштабирование, и для этого вы хотите начать с AMI, которые включают как можно больше, чтобы время запуска было небольшим. Это делает предварительно запеченный AMI лучше, чем универсальный со сценарием инициализации, который устанавливает и настраивает все адаптации для вашей производственной среды.
Это не совсем так. Вы можете использовать Terraform для раскрутки экземпляра, как это делает Packer, а затем использовать удаленный провайдер для его настройки, как это делает Packer. Затем вам понадобится что-то, что разрушит экземпляр без отмены регистрации AMI (terraform destroy
отменит регистрацию AMI), но это работоспособно. Просто хуже, чем Packer, с небольшой выгодой (избегая написания короткой конфигурации Packer JSON).
Конечно, но это все равно, что забивать гвозди бензопилой. Это вроде работает, но, скорее всего, вы себя порежете.
Да, я согласен, что это не лучший инструмент для этого, но я не думаю, что ваш ответ действительно объясняет, почему, потому что технически возможно достичь того же самого. В общем, я думаю, что это скорее вопрос, основанный на мнении, когда некоторые мнения ошибочны;)
@RickardvonEssen да, он использует бензопилу, чтобы забивать гвозди, но, поскольку вам все равно нужно научиться работать с бензопилой, лучше всего делать все с вашей работающей бензопилой, так как "молоток" Packer все еще требует некоторых инвестиций для освоения (обучение использованию это и для его отладки все еще есть стоимость)
Я не буду повторять то, что уже упоминал ydaetskcoR. Grt баллов. Другой вариант использования, которым действительно пользуется Packer, - это совместное использование AMI с несколькими учетными записями. В нашей настройке мы создаем AMI в одной учетной записи и делимся им с другими учетными записями, которые будут использоваться. Packer специально создан для создания AMI и поэтому имеет много функций, чем простой ami_from_instance Terraform. Мои 2 цента
Я не уверен, что это даст хороший ответ, потому что это, вероятно, субъективно, но Packer специально нацелен на создание изображений и управляет жизненным циклом того, что создает образ, лучше, чем ресурс Terraform
aws_ami_from_instance
. Чтобы сделать то же самое, что и Packer с Terraform, вам нужно будет определить ресурс экземпляра, затем ресурс ami_from_instance, а затем каким-то образом уничтожить экземпляр после этого, потому что Terraform запустит его резервную копию. Запуск Terraform destroy как для экземпляра, так и для ami_from_instance приведет к отмене регистрации AMI.