Использование службы "Экспорт Azure для Terraform" в сложных сценариях
Статья
В этой статье объясняется, как выполнять некоторые из более сложных задач с помощью службы "Экспорт Azure для Terraform".
Добавление ресурсов в существующие среды Terraform.
Экспорт ресурсов в существующую среду Terraform с удаленным состоянием серверной части
Добавление к существующим ресурсам
По умолчанию Служба экспорта Azure для Terraform гарантирует, что выходной каталог пуст, чтобы избежать конфликтов с существующими пользовательскими файлами. Если необходимо импортировать ресурсы в существующий файл состояния, добавьте --append флаг.
Консоль
aztfexport [command] --append <scope>
--append При указании флага Служба экспорта Azure для Terraform проверяет наличие предварительно provider существующего или terraform блока в любом из файлов в текущем каталоге. Если нет, средство создает файл для каждого блока, а затем продолжает экспорт. Если выходной каталог содержит файл состояния, все экспортированные ресурсы импортируются в файл состояния.
Кроме того, созданный файл имеет .aztfexport суффикс перед расширением , например main.aztfexport.tf , чтобы избежать потенциальных конфликтов имен файлов.
aztfexport --append При выполнении несколько раз один main.aztfexport.tf создается с результатами экспорта, добавленными к файлу при каждом выполнении команды.
Создание собственной конфигурации Terraform
По умолчанию Служба экспорта Azure для Terraform использует локальную серверную часть для хранения файла состояния. Однако также можно использовать удаленную серверную часть. Экспорт Azure для Terraform позволяет определить собственные terraform или provider блоки для передачи.
Определите эти блоки в файле в .tf целевом каталоге, экспортируйте с --append помощью флага и экспортируйте конфигурацию в указанную серверную и версию поставщика (если она указана).
Важно!
Если указанная версия AzureRM не соответствует установленной версии при экспорте, команда завершается ошибкой.
Чтобы экспортировать в серверную часть, используйте --backend-type параметры и --backend-config параметры. Дополнительные сведения о настройке серверной части Terraform см. в разделе Конфигурации серверной части Terraform.
Используя пример учетной записи хранения Azure, вам потребуется следующее, как описано в документации по серверной части AzureRM.
Имя группы ресурсов
Storage account name
Имя контейнера хранилища
Передайте эти параметры в команду вместе с типом серверной части:
В предыдущем примере я использую символ продолжения строки Unix, чтобы код отображал хорошо в браузере. Эти символы могут потребоваться изменить в соответствии с средой командной строки , например PowerShell, или объединить команду в одну строку.
Если серверное состояние уже существует, служба "Экспорт Azure для Terraform" автоматически объединяет новые ресурсы с существующим состоянием. Не нужно указывать встроенный --append параметр.
Экспорт ресурсов Azure в существующую среду Terraform
Теперь, давайте поместим все вместе! Представьте, что новые ресурсы были созданы за пределами Terraform, которые необходимо переместить в управление Terraform. Чтобы завершить раздел, убедитесь, что у вас настроен серверная часть. В этом руководстве используется та же конфигурация, которая указана в руководстве по удаленному состоянию хранилища Azure.
В родительском каталоге, в котором требуется создать временный каталог, выполните следующую команду:
Флаг -o указывает, чтобы создать каталог, если он не существует.
Флаг --hcl-only указывает для экспорта настроенных ресурсов в HCL
После проверки того, что ресурс можно добавить, используйте созданный файл сопоставления и --append флаг, чтобы убедиться, что служба "Экспорт Azure" учитывает существующие версии удаленного состояния и поставщика в существующей среде:
Экспорт Azure для Terraform не должен отображать никаких изменений.
Поздравляем! Инфраструктура и соответствующее состояние успешно добавлены в среду Terraform.
Если план возникает с проблемами, ознакомьтесь с концепциями экспорта Azure для Terraform, чтобы понять ограничения, касающиеся развертывания кода, созданного с помощью --hcl-only. Если эта статья не поможет вам, откройте проблему с GitHub.
Дальнейшая настройка запроса
Ниже описаны некоторые дополнительные расширенные флаги с их использованием:
Выбор облачной среды
Чтобы указать другую среду, отличную от общедоступного --env облака, используйте флаг. Например, для правительства США:
Чтобы упростить доступ к предпочитаемой AzureRM или AzAPI версии, используйте --provider-version флаг. Например, если вы находились в AzAPI версии 1.10.0:
Для управления конфигурацией проверки подлинности существуют различные флаги. Некоторые флаги были добавлены до конца:v0.15
--env
--tenant-id
--auxiliary-tenant-ids
--client-id
--client-id-file-path
--client-certificate
--client-certificate-path
--client-certificate-password
--client-secret
--client-secret-file-path
--oidc-request-token
--oidc-request-url
--oidc-token
--oidc-token-file-path
--use-managed-identity-cred (по умолчанию — false)
--use-azure-cli-cred (по умолчанию — true)
--use-oidc-cred (по умолчанию — false)
Флаги выше следуют соглашению azurerm об именовании поставщика. Все флаги настраиваются с помощью переменных среды, включая ту же переменную среды, определенную в поставщике azurerm .
aztfexport Пытается выполнить проверку подлинности с каждым из типов учетных данных в следующем порядке, остановившись при предоставлении маркера:
Секрет клиента
Сертификат клиента
OIDC
Управляемое удостоверение
Azure CLI
Если одно или несколько use-xxx-cred не имеет значения true, этот тип учетных данных будет пропущен. Это поведение совпадает с поведением поставщика.
Конфигурация поставщика может переопределить любую конфигурацию проверки подлинности из aztfexport. Это позволяет пользователям использовать различные типы учетных данных между aztfexport поставщиком.
Включение назначений ролей
Если вы хотите включить назначения ролей при экспорте области ресурсов, используйте --include-role-assignment команду:
Присоединитесь к серии встреч для создания масштабируемых решений искусственного интеллекта на основе реальных вариантов использования с другими разработчиками и экспертами.