Использование службы "Экспорт 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.

  1. В родительском каталоге, в котором требуется создать временный каталог, выполните следующую команду:

    aztfexport resource -o tempdir --hcl-only <resource_id>
    

    Основные моменты:

    • Флаг -o указывает, чтобы создать каталог, если он не существует.
    • Флаг --hcl-only указывает для экспорта настроенных ресурсов в HCL
  2. После проверки того, что ресурс можно добавить, используйте созданный файл сопоставления и --append флаг, чтобы убедиться, что служба "Экспорт Azure" учитывает существующие версии удаленного состояния и поставщика в существующей среде:

    aztfexport map --append `./tempdir/aztfexportResourceMapping.json`
    
  3. Запустите terraform init.

    terraform init --upgrade
    
  4. Запустите план terraform.

  5. Экспорт 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 Пытается выполнить проверку подлинности с каждым из типов учетных данных в следующем порядке, остановившись при предоставлении маркера:

  1. Секрет клиента
  2. Сертификат клиента
  3. OIDC
  4. Управляемое удостоверение
  5. Azure CLI

Если одно или несколько use-xxx-cred не имеет значения true, этот тип учетных данных будет пропущен. Это поведение совпадает с поведением поставщика.

Конфигурация поставщика может переопределить любую конфигурацию проверки подлинности из aztfexport. Это позволяет пользователям использовать различные типы учетных данных между aztfexport поставщиком.

Включение назначений ролей

Если вы хотите включить назначения ролей при экспорте области ресурсов, используйте --include-role-assignment команду:

aztfexport [command] --include-role-assignment [further options] <scope>

Следующие шаги