Краткое руководство: выполнение действий с ресурсами Azure с помощью поставщика Terraform AzAPI.

Terraform позволяет определять, просматривать и развертывать облачную инфраструктуру. Используя Terraform, вы создаёте файлы конфигурации, применяя синтаксис HCL. Синтаксис HCL позволяет указать поставщика облачных служб, таких как Azure, и элементы, составляющие облачную инфраструктуру. После создания файлов конфигурации вы создаете план выполнения, который позволяет предварительно просмотреть изменения в инфраструктуре до их внедрения. После того как вы проверите изменения, примените план выполнения для развертывания инфраструктуры.

Используйте azapi_resource_action в качестве управляемого ресурса Terraform для выполнения императивных операций, изменяющих состояние, в ресурсах Azure. В этом примере создается учетная запись хранения Azure, а затем смена ключей доступа.

azapi_resource_action имеет две формы использования:

  • Ресурс: выполняет операцию изменения состояния во время terraform apply. Terraform отслеживает действие в состоянии и может при необходимости изменить его.terraform destroy
  • Источник данных: выполняет операцию только для чтения во время планирования. См. раздел Краткое руководство по источнику данных ресурсов действий для данного сценария.

Используйте форму ресурса, когда нужно, чтобы Terraform выполнял операцию в Azure, которая не основана на стандартном жизненном цикле создания, чтения, обновления или удаления, например, при ротации учетных данных, запуске или остановке виртуальной машины или запуске отказоустойчивости.

  • Создание учетной записи хранения с помощью поставщика AzureRM
  • Обновите ключ доступа к учетной записи хранения с помощью azapi_resource_action

Необходимые условия

При входе на портал Azure с учетной записью Майкрософт используется подписка Azure по умолчанию для этой учетной записи.

Terraform автоматически проходит проверку подлинности с помощью сведений из подписки Azure по умолчанию.

Запустите az account show , чтобы проверить текущую учетную запись Майкрософт и подписку Azure.

az account show

Все изменения, внесенные с помощью Terraform, находятся в отображаемой подписке Azure. Если это нужно, пропустите остальную часть этой статьи.

Реализуйте код Terraform

  1. Создайте каталог для тестирования примера кода Terraform и сделайте его текущим каталогом.

  2. Создайте файл с именем 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" {}
    
  3. Создайте файл с именем 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."
    }
    
    variable "storage_account_name_prefix" {
      type        = string
      default     = "st"
      description = "Prefix of the storage account name that's combined with a random value to create a unique name."
    }
    
  4. Создайте файл с именем 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" {
      name                     = "${var.storage_account_name_prefix}${random_string.storage_suffix.result}"
      resource_group_name      = azurerm_resource_group.example.name
      location                 = azurerm_resource_group.example.location
      account_tier             = "Standard"
      account_replication_type = "LRS"
    }
    
    resource "azapi_resource_action" "regenerate_key" {
      type        = "Microsoft.Storage/storageAccounts@2023-01-01"
      resource_id = azurerm_storage_account.example.id
      action      = "regenerateKey"
      method      = "POST"
    
      body = {
        keyName = "key1"
      }
    }
    

    Ключевые моменты использования azapi_resource_action в качестве ресурса:

    • Поле action указывает операцию ARM для выполнения. Для смены ключа учетной записи хранения используйте regenerateKey.
    • Поле method задает метод HTTP. Большинство императивных действий используют POST.
    • Атрибут body передает данные в действие. Для повторного создания ключей укажите, какой ключ (key1 или key2) следует повернуть.
    • Действие выполняется во время terraform apply и отслеживается в состоянии Terraform.
  5. Создайте файл с именем outputs.tf и вставьте следующий код:

    output "resource_group_name" {
      value = azurerm_resource_group.example.name
    }
    
    output "storage_account_name" {
      value = azurerm_storage_account.example.name
    }
    

Запустите 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 без параметров.

Проверка результатов

После terraform apply завершения ключ учетной записи хранения был повернут. Чтобы проверить смену ключей, проверьте ключи учетной записи хранения в Azure.

Запустите az storage account keys list, чтобы просмотреть ключи учетной записи хранения.

az storage account keys list \
  --resource-group <resource_group_name> \
  --account-name <storage_account_name>

В value поле показан текущий ключ.

Примеры других ресурсных действий

Ресурс azapi_resource_action работает с множеством операций Azure. Ниже приведены распространенные примеры.

  • Виртуальные машины: deallocate, start, restart, powerOff, reimage
  • Key Vaults: purge (для обратимо удаленных хранилищ) rotate (для управляемых ключей)
  • Службы приложений: swap (для слотов развертывания), restart
  • Базы данных: failover, promote
  • Compute resources: любая операция, предоставляемая REST API Azure, которая изменяет состояние без создания или уничтожения ресурса

Очистите ресурсы

Если вам больше не нужны ресурсы, созданные через Terraform, выполните следующие действия:

  1. Запустите команду terraform plan и укажите флаг destroy.

    terraform plan -destroy -out main.destroy.tfplan
    

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

    • Команда terraform plan создает план выполнения, но не выполняет его. Вместо этого он определяет, какие действия необходимы для создания конфигурации, указанной в ваших конфигурационных файлах. Данный шаблон позволяет вам убедиться, что план выполнения соответствует вашим ожиданиям, прежде чем вносить какие-либо изменения в реальные ресурсы.
    • Необязательный параметр -out позволяет указать выходной файл для плана. Использование параметра -out обеспечивает, что план, который вы просмотрели, будет применен точно в таком виде.
  2. Чтобы применить план выполнения, запустите команду terraform apply.

    terraform apply main.destroy.tfplan
    

Устранение неполадок с Terraform в Azure

Устранение типичных проблем при использовании Terraform на Azure

Дальнейшие действия