Поделиться через


Обзор поставщика Terraform AzAPI

Поставщик AzAPI — это тонкий слой поверх REST API Azure ARM. Он позволяет управлять любым типом ресурсов Azure с помощью любой версии API, что позволяет использовать последние функциональные возможности в Azure. AzAPI — это поставщик первого класса, предназначенный для использования самостоятельно или в тандеме с поставщиком AzureRM.

Ресурсы

Чтобы разрешить управлять всеми ресурсами и функциями Azure без необходимости обновления, поставщик AzAPI включает следующие универсальные ресурсы:

Имя ресурса Description
azapi_resource Используется для полного управления любым ресурсом Azure (плоскости управления) (API) с полным cruD.
   Примеры вариантов использования:
      Новая предварительная версия службы
      Новая функция, добавленная в существующую службу
      Существующие функции или службы, которые в настоящее время не рассматриваются
azapi_update_resource Используется для управления ресурсами или частями ресурсов, которые не имеют полного CRUD
   Примеры вариантов использования:
      Обновление новых свойств существующей службы
      Обновите предварительно созданный дочерний ресурс, например запись SOA DNS.
azapi_resource_action Используется для выполнения одной операции с ресурсом без управления жизненным циклом ресурса.
   Примеры вариантов использования:
      Завершение работы виртуальной машины
      Добавление секрета в Key Vault
azapi_data_plane_resource Используется для управления определенным подмножеством ресурсов плоскости данных Azure
   Примеры вариантов использования:
      Контакты сертификатов KeyVault
      Библиотеки рабочей области Synapse

Иерархия использования

В целом использование должно выполнять следующие действия.

  1. Всегда рекомендуется начать с выполнения как можно больше операций в пределах azapi_resource.
  2. Если тип ресурса не существует в пределах azapi_resource , но не соответствует одному из типов, поддерживаемых azapi_data_plane_resource, используйте это.
  3. Если ресурс уже существует в AzureRM или имеет свойство, к которому не удается получить доступ azapi_resource, используйте azapi_update_resource для доступа к этим конкретным свойствам. Ресурсы, которые azapi_resource или azapi_data_plane_resource не поддерживаются, не могут быть обновлены с помощью этого ресурса.
  4. Если вы пытаетесь выполнить действие, которое не основано на понятном ресурсе Azure CRUD, будет менее простым, azapi_resource_action чем azapi_update_resource более гибким.

Примеры конфигурации ресурсов

Следующий фрагмент кода настраивает ресурс, который в настоящее время не существует в поставщике AzureRM:

resource "azapi_resource" "publicip" {
  type      = "Microsoft.Network/Customipprefixes@2021-03-01"
  name      = "exfullrange"
  parent_id = azurerm_resource_group.example.id
  location  = "westus2"

  body = {
    properties = {
      cidr          = "10.0.0.0/24"
      signedMessage = "Sample Message for WAN"
    }
  }
}

Следующий фрагмент кода настраивает свойство предварительной версии для существующего ресурса из AzureRM:

resource "azapi_update_resource" "test" {
  type        = "Microsoft.ContainerRegistry/registries@2020-11-01-preview"
  resource_id = azurerm_container_registry.acr.id

  body = {
    properties = {
      anonymousPullEnabled = var.bool_anonymous_pull
    }
  }
}

Следующий фрагмент кода настраивает действие ресурса для существующего ресурса AzureRM:

resource "azapi_resource_action" "vm_shutdown" {
  type = "Microsoft.Compute/virtualMachines@2023-07-01"
  resource_id = azurerm_linux_virtual_machine.example.id
  action = "powerOff”
}

Следующий фрагмент кода настраивает ресурс, который в настоящее время не существует в поставщике AzureRM из-за подготовки на плоскости данных:

resource "azapi_data_plane_resource" "dataset" {
  type      = "Microsoft.Synapse/workspaces/datasets@2020-12-01"
  parent_id = trimprefix(data.azurerm_synapse_workspace.example.connectivity_endpoints.dev, "https://")
  name      = "example-dataset"
  body = {
    properties = {
      type = "AzureBlob",
      typeProperties = {
        folderPath = {
          value = "@dataset().MyFolderPath"
          type  = "Expression"
        }
        fileName = {
          value = "@dataset().MyFileName"
          type  = "Expression"
        }
        format = {
          type = "TextFormat"
        }
      }
      parameters = {
        MyFolderPath = {
          type = "String"
        }
        MyFileName = {
          type = "String"
        }
      }
    }
  }
}

Проверка подлинности с помощью поставщика AzAPI

Поставщик AzAPI включает те же методы проверки подлинности, что и поставщик AzureRM. Дополнительные сведения о параметрах проверки подлинности см. в статье "Аутентификация Terraform" в Azure.

Преимущества использования поставщика AzAPI

Поставщик AzAPI имеет следующие преимущества:

  • Поддерживает все службы плоскости управления Azure:
    • Предварительные версии служб и функций
    • Все версии API
  • Полная точность файла состояния Terraform
    • Свойства и значения сохраняются в состоянии
  • Нет зависимости от Swagger
  • Общая и согласованная проверка подлинности Azure
  • Надежное расширение VS Code

Опыт и жизненный цикл поставщика AzAPI

В этом разделе описаны некоторые средства, помогающие использовать поставщик AzAPI.

Расширение VS Code и сервер языка

Расширение AZAPI VS Code обеспечивает широкий опыт разработки со следующими преимуществами:

  • Список всех доступных типов ресурсов и версий API. Список всех доступных типов ресурсов
  • Автоматическое завершение разрешенных свойств и значений для любого ресурса. Список разрешенных свойств
  • Отображение подсказок при наведении указателя мыши на свойство. Отображение подсказки при наведении указателя мыши на свойство
  • Проверка синтаксиса Проверка синтаксиса
  • Автозавершение с примерами кода. Автоматическое завершение с помощью примеров кода

Средство миграции AzAPI2AzureRM

Поставщик AzureRM предоставляет наиболее интегрированный интерфейс Terraform для управления ресурсами Azure. Поэтому рекомендуется использовать поставщики AzAPI и AzureRM следующим образом:

  1. Хотя служба или функция находится в предварительной версии, используйте поставщик AzAPI.
  2. После официального выпуска службы используйте поставщик AzureRM.

Средство AzAPI2AzureRM предназначено для перехода от поставщика AzAPI к поставщику AzureRM.

AzAPI2AzureRM — это средство с открытым кодом, которое автоматизирует процесс преобразования ресурсов AzAPI в ресурсы AzureRM.

AzAPI2AzureRM имеет два режима: планирование и миграция:

  • План отображает ресурсы AzAPI, которые можно перенести.
  • Миграция переносит ресурсы AzAPI в ресурсы AzureRM как в файлах HCL, так и в состоянии.

AzAPI2AzureRM гарантирует, что после миграции конфигурация Terraform и состояние соответствуют фактическому состоянию. Обновление можно проверить, выполнив terraform plan после завершения миграции, чтобы увидеть, что ничего не изменилось.

Использование поставщика AzAPI

  1. Установка расширения VS Code

  2. Добавьте поставщика AzAPI в конфигурацию Terraform.

    terraform {
      required_providers {
        azapi = {
          source  = "Azure/azapi"
        }
      }
    }
    
    provider "azapi" {
      # More information on the authentication methods supported by
      # the AzureRM Provider can be found here:
      # https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs
    
      # subscription_id = "..."
      # client_id       = "..."
      # client_secret   = "..."
      # tenant_id       = "..."
    }
    
  3. Объявите один или несколько ресурсов AzAPI, как показано в следующем примере кода:

    resource "azapi_resource" "example" {
      name = "example"
      parent_id = data.azurerm_machine_learning_workspace.existing.id
      type = "Microsoft.MachineLearningServices/workspaces/computes@2021-07-01"
    
      location = "eastus"
      body = {
        properties = {
          computeType      = "ComputeInstance"
          disableLocalAuth = true
          properties = {
            vmSize = "STANDARD_NC6"
          }
        }
      }
    }
    
    

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