Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Terraform позволяет определять, просматривать и развертывать облачную инфраструктуру. Используя Terraform, вы создаёте файлы конфигурации, применяя синтаксис HCL. Синтаксис HCL позволяет указать поставщика облачных служб, таких как Azure, и элементы, составляющие облачную инфраструктуру. После создания файлов конфигурации вы создаете план выполнения, который позволяет предварительно просмотреть изменения в инфраструктуре до их внедрения. После того как вы проверите изменения, примените план выполнения для развертывания инфраструктуры.
В этой статье вы используете источник данных azapi_resource_list для перечисления Azure ресурсов и фильтрации результатов с помощью выражений JMESPath. Вы создаете две учетные записи хранения, а затем используете azapi_resource_list для перечисления и извлечения их свойств.
- Создание группы ресурсов и двух учетных записей хранения с помощью поставщика AzureRM
- Использование
azapi_resource_listдля перечисления учетных записей хранения и извлечения их имен и расположений с помощью JMESPath
Необходимые условия
- подписка на Azure: Если у вас нет подписки на Azure, создайте бесплатную учетную запись прежде чем начать.
Настройте Terraform: если вы еще не сделали этого, настройте Terraform с помощью одного из следующих параметров:
При входе на портал Azure с учетной записью Майкрософт используется подписка Azure по умолчанию для этой учетной записи.
Terraform автоматически проходит проверку подлинности с помощью сведений из подписки Azure по умолчанию.
Запустите az account show , чтобы проверить текущую учетную запись Майкрософт и подписку Azure.
az account show
Все изменения, внесенные с помощью Terraform, находятся в отображаемой подписке Azure. Если это нужно, пропустите остальную часть этой статьи.
Понимать response_export_values
Атрибут response_export_values определяет, какие свойства извлекаются из ответа API и становятся доступными в output атрибуте источника данных. Он принимает список или карту:
-
Список: указывает пути JSON для извлечения. Используется
["*"]для экспорта полного текста ответа. - Карта: использует выражения JMESPath для фильтрации и повторной подготовки ответа. Ключ — это имя результата, а значение — выражение JMESPath.
Форма массива предпочтительна, если требуется извлечь определенные поля или преобразовать список ответов, так как она создает более чистые и доступные выходные значения.
Реализуйте код Terraform
Создайте каталог для тестирования примера кода Terraform и сделайте его текущим каталогом.
Создайте файл с именем
providers.tfи вставьте следующий код:terraform { required_providers { azapi = { source = "Azure/azapi" version = "~> 2.0" } azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } random = { source = "hashicorp/random" version = "~> 3.0" } } } provider "azurerm" { features {} } provider "azapi" {}Создайте файл с именем
variables.tfи вставьте следующий код:variable "resource_group_location" { type = string default = "eastus" description = "Location of the resource group." } variable "resource_group_name_prefix" { type = string default = "rg" description = "Prefix of the resource group name that's combined with a random value to create a unique name." }Создайте файл с именем
main.tfи вставьте следующий код:resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } resource "random_string" "storage_suffix" { length = 8 upper = false special = false } resource "azurerm_resource_group" "example" { location = var.resource_group_location name = random_pet.rg_name.id } resource "azurerm_storage_account" "example" { count = 2 name = "st${random_string.storage_suffix.result}${count.index}" resource_group_name = azurerm_resource_group.example.name location = azurerm_resource_group.example.location account_tier = "Standard" account_replication_type = "LRS" }
Запустите terraform init, чтобы инициализировать развертывание Terraform. Эта команда загружает поставщика Azure, необходимого для управления вашими ресурсами в Azure.
terraform init -upgrade
Основные моменты:
- Параметр
-upgradeобновляет необходимые плагины провайдера до самой последней версии, которая соответствует ограничениям версии конфигурации.
Запустите команду terraform plan, чтобы создать план выполнения.
terraform plan -out main.tfplan
Основные моменты:
- Команда
terraform planсоздает план выполнения, но не выполняет его. Вместо этого он определяет, какие действия необходимы для создания конфигурации, указанной в ваших конфигурационных файлах. Данный шаблон позволяет вам убедиться, что план выполнения соответствует вашим ожиданиям, прежде чем вносить какие-либо изменения в реальные ресурсы. - Необязательный параметр
-outпозволяет указать выходной файл для плана. Использование параметра-outобеспечивает, что план, который вы просмотрели, будет применен точно в таком виде.
Выполните команду terraform apply, чтобы применить план выполнения к вашей облачной инфраструктуре.
terraform apply main.tfplan
Основные моменты:
- Пример команды
terraform applyпредполагает, что вы ранее выполнили командуterraform plan -out main.tfplan. - Если вы указали другое имя файла для параметра
-out, используйте то же имя файла при вызовеterraform apply. - Если вы не использовали параметр
-out, вызовитеterraform applyбез параметров.
Составьте список ресурсов с azapi_resource_list
Теперь, когда создаются учетные записи хранения, добавьте источник данных для их перечисления и извлечения свойств с помощью JMESPath.
Создайте файл с именем
list_resources.tfи вставьте следующий код:data "azapi_resource_list" "storage_accounts" { type = "Microsoft.Storage/storageAccounts@2023-01-01" parent_id = azurerm_resource_group.example.id # Use JMESPath expressions to extract specific fields from the response. # The API returns a list of resources in a top-level "value" array. response_export_values = { "names" = "value[].name" "locations" = "value[].location" "skus" = "value[].sku.name" } }Создайте файл с именем
outputs.tfи вставьте следующий код:output "resource_group_name" { value = azurerm_resource_group.example.name } output "storage_account_names" { value = data.azapi_resource_list.storage_accounts.output.names } output "storage_account_locations" { value = data.azapi_resource_list.storage_accounts.output.locations } output "storage_account_skus" { value = data.azapi_resource_list.storage_accounts.output.skus }Запустите
terraform applyеще раз, чтобы создать источник данных и извлечь выходные данные:terraform apply
Ключевые моменты о azapi_resource_list
- Поле
typeопределяет тип ресурса и версию API для перечисления. - Поле
parent_idзадает область: идентификатор группы ресурсов для перечисления в рамках группы ресурсов, идентификатор подписки для перечисления по всей подписке или идентификатор родительского ресурса для перечисления ресурсов-детей (например, подсетей в виртуальной сети). - Форма карты
response_export_valuesиспользует выражения JMESPath для необработанного ответа API. API списка учетных записей хранения возвращает результаты в массиве верхнего уровняvalue, поэтому выражения начинаются сvalue[].
Перечислить ресурсы в различных областях
parent_id определяет пределы области перечисления. Примеры:
# List all storage accounts in a subscription
data "azapi_resource_list" "all_storage" {
type = "Microsoft.Storage/storageAccounts@2023-01-01"
parent_id = "/subscriptions/${var.subscription_id}"
response_export_values = {
"names" = "value[].name"
}
}
# List subnets in a virtual network (child resource listing)
data "azapi_resource_list" "subnets" {
type = "Microsoft.Network/virtualNetworks/subnets@2023-11-01"
parent_id = azurerm_virtual_network.example.id
response_export_values = ["*"]
}
Очистите ресурсы
Если вам больше не нужны ресурсы, созданные через Terraform, выполните следующие действия:
Запустите команду terraform plan и укажите флаг
destroy.terraform plan -destroy -out main.destroy.tfplanОсновные моменты:
- Команда
terraform planсоздает план выполнения, но не выполняет его. Вместо этого он определяет, какие действия необходимы для создания конфигурации, указанной в ваших конфигурационных файлах. Данный шаблон позволяет вам убедиться, что план выполнения соответствует вашим ожиданиям, прежде чем вносить какие-либо изменения в реальные ресурсы. - Необязательный параметр
-outпозволяет указать выходной файл для плана. Использование параметра-outобеспечивает, что план, который вы просмотрели, будет применен точно в таком виде.
- Команда
Чтобы применить план выполнения, запустите команду terraform apply.
terraform apply main.destroy.tfplan
Устранение неполадок с Terraform в Azure
Устранение типичных проблем при использовании Terraform на Azure