В модели Terraform объект полностью управляется одной конфигурацией Terraform и ничем иным. Управление объектом с помощью нескольких конфигураций или создание объекта Terraform, но затем его последующее удаление за пределами Terraform не поддерживается рабочим процессом.
Terraform предназначен для управления долгоживущей архитектурой, которую вы постепенно обновите. время. Он не предназначен для управления артефактами сборки, такими как образы машин, которые, как правило, создаются, используются и затем уничтожаются.
Обычная архитектура для этого варианта использования заключается в том, чтобы рассматривать создание образа как " этап «сборки», выполняемый с использованием другого программного обеспечения за пределами Terraform, и затем мы используем Terraform только для этапа «развертывания», после чего долгоживущая инфраструктура либо создается, либо обновляется для использования нового образа.
Это приводит к созданию и развертыванию конвейера с помощью следующих шагов:
- Используйте отдельное программное обеспечение для построения образа, чтобы создать образ, и запишите идентификатор, откуда он может быть получен, используя источник данных в Terraform.
- Запустите
terraform apply
, чтобы обновить долгоживущую инфраструктуру для использования нового образа. Конфигурация Terraform должна включать в себя блок data
для считывания идентификатора изображения с того места, где оно было записано на предыдущем шаге. - При желании уничтожить изображение с помощью программного обеспечения вне Terraform после завершения Terraform.
При реализации конвейера, подобного этому, необязательно, но распространено также учитывать процесс «отката» для использования в случае неисправности нового изображения:
- Сброс идентификатора записанного изображения, который Terraform выполняет чтение с идентификатора, который был сохранен перед новым этапом сборки.
- Запустите
terraform apply
, чтобы обновить долгоживущую инфраструктуру обратно, используя старый образ.
Конечно, поддержка этого потребует сохранения предыдущего образа достаточно долго, чтобы доказать, что новый образ функционирует правильно, поэтому для нормального конвейера сборки и развертывания необходимо будет сохранять хотя бы одно историческое изображение за цикл для отката. С учетом вышесказанного, если у вас есть возможность быстро воссоздать предыдущее изображение во время отката, тогда этот специальный рабочий процесс не является строго необходимым: вместо этого вы можете вместо этого реализовать откат, «прокручивая вперед» изображение, созданное в предыдущей конфигурации.
Примером пакета программного обеспечения, обычно используемого для подготовки изображений для использования с Terraform у других поставщиков облачных услуг, является HashiCorp Packer , но, к сожалению, похоже, что он не поддерживает IBM Cloud, поэтому вам, возможно, придется поискать для некоторого подобного программного обеспечения, которое поддерживает IBM Cloud, или напишите что-нибудь самостоятельно, используя IBM Cloud SDK.