Обзор поставщика 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 |
Иерархия использования
В целом использование должно выполнять следующие действия.
- Всегда рекомендуется начать с выполнения как можно больше операций в пределах
azapi_resource
. - Если тип ресурса не существует в пределах
azapi_resource
, но не соответствует одному из типов, поддерживаемыхazapi_data_plane_resource
, используйте это. - Если ресурс уже существует в AzureRM или имеет свойство, к которому не удается получить доступ
azapi_resource
, используйтеazapi_update_resource
для доступа к этим конкретным свойствам. Ресурсы, которыеazapi_resource
илиazapi_data_plane_resource
не поддерживаются, не могут быть обновлены с помощью этого ресурса. - Если вы пытаетесь выполнить действие, которое не основано на понятном ресурсе 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 следующим образом:
- Хотя служба или функция находится в предварительной версии, используйте поставщик AzAPI.
- После официального выпуска службы используйте поставщик AzureRM.
Средство AzAPI2AzureRM предназначено для перехода от поставщика AzAPI к поставщику AzureRM.
AzAPI2AzureRM — это средство с открытым кодом, которое автоматизирует процесс преобразования ресурсов AzAPI в ресурсы AzureRM.
AzAPI2AzureRM имеет два режима: планирование и миграция:
- План отображает ресурсы AzAPI, которые можно перенести.
- Миграция переносит ресурсы AzAPI в ресурсы AzureRM как в файлах HCL, так и в состоянии.
AzAPI2AzureRM гарантирует, что после миграции конфигурация Terraform и состояние соответствуют фактическому состоянию. Обновление можно проверить, выполнив terraform plan
после завершения миграции, чтобы увидеть, что ничего не изменилось.
Использование поставщика AzAPI
Установка расширения VS Code
Добавьте поставщика 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 = "..." }
Объявите один или несколько ресурсов 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" } } } }