Использование службы "Экспорт 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 не соответствует установленной версии при экспорте, команда завершается ошибкой.
пример служба хранилища Azure
Этот пример основан на статье, состояние Store Terraform в служба хранилища Azure.
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~>3.0"
}
}
backend "azurerm" {
resource_group_name = "tfstate"
storage_account_name = "storageacc"
container_name = "tfstate"
key = "terraform.tfstate"
}
}
provider "azurerm" {
features {}
}
Пример Terraform Cloud
terraform {
cloud {
organization = "aztfexport-test"
workspaces {
name = "aztfexport-playground"
}
}
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~>3.0"
}
}
}
provider "azurerm" {
features {
}
}
Встроенный интерфейс
Чтобы экспортировать в серверную часть, используйте --backend-type
параметры и --backend-config
параметры. Дополнительные сведения о настройке серверной части Terraform см. в разделе Конфигурации серверной части Terraform.
Используя пример учетной записи хранения Azure, вам потребуется следующее, как описано в документации по серверной части AzureRM.
- Имя группы ресурсов
- Storage account name
- Имя контейнера хранилища
Передайте эти параметры в команду вместе с типом серверной части:
aztfexport [subcommand] --backend-type=azurerm \
--backend-config=resource_group_name=<resource group name> \
--backend-config=storage_account_name=<account name> \
--backend-config=container_name=<container name> \
--backend-config=key=terraform.tfstate
Основные моменты:
- В предыдущем примере я использую символ продолжения строки Unix, чтобы код отображал хорошо в браузере. Эти символы могут потребоваться изменить в соответствии с средой командной строки , например PowerShell, или объединить команду в одну строку.
- Если серверное состояние уже существует, служба "Экспорт Azure для Terraform" автоматически объединяет новые ресурсы с существующим состоянием. Не нужно указывать встроенный
--append
параметр.
Экспорт ресурсов Azure в существующую среду Terraform
Теперь, давайте поместим все вместе! Представьте, что новые ресурсы были созданы за пределами Terraform, которые необходимо переместить в управление Terraform. Чтобы завершить раздел, убедитесь, что у вас настроен серверная часть. В этом руководстве используется та же конфигурация, которая указана в руководстве по удаленному состоянию хранилища Azure.
В родительском каталоге, в котором требуется создать временный каталог, выполните следующую команду:
aztfexport resource -o tempdir --hcl-only <resource_id>
Основные моменты:
- Флаг
-o
указывает, чтобы создать каталог, если он не существует. - Флаг
--hcl-only
указывает для экспорта настроенных ресурсов в HCL
- Флаг
После проверки того, что ресурс можно добавить, используйте созданный файл сопоставления и
--append
флаг, чтобы убедиться, что служба "Экспорт Azure" учитывает существующие версии удаленного состояния и поставщика в существующей среде:aztfexport map --append `./tempdir/aztfexportResourceMapping.json`
Запустите terraform init.
terraform init --upgrade
Запустите план terraform.
Экспорт Azure для Terraform не должен отображать никаких изменений.
Поздравляем! Инфраструктура и соответствующее состояние успешно добавлены в среду Terraform.
Если план возникает с проблемами, ознакомьтесь с концепциями экспорта Azure для Terraform, чтобы понять ограничения, касающиеся развертывания кода, созданного с помощью --hcl-only
. Если эта статья не поможет вам, откройте проблему с GitHub.
Дальнейшая настройка запроса
Ниже описаны некоторые дополнительные расширенные флаги с их использованием:
Выбор облачной среды
Чтобы указать другую среду, отличную от общедоступного --env
облака, используйте флаг. Например, для правительства США:
aztfexport [command] --env="usgovernment" [further options] <scope>
Изменение версии поставщика Terraform
Чтобы упростить доступ к предпочитаемой AzureRM
или AzAPI
версии, используйте --provider-version
флаг. Например, если вы находились в AzAPI
версии 1.10.0
:
aztfexport [command] --provider-name=azapi --provider-version=1.10.0 [further options] <scope>
Проверка подлинности
Для управления конфигурацией проверки подлинности существуют различные флаги. Некоторые флаги были добавлены до конца: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
команду:
aztfexport [command] --include-role-assignment [further options] <scope>