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


Быстрое начало: Настройка среды службы приложений Azure версии 3 с использованием Terraform

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

В этой статье вы узнаете, как:

  • Создайте группу ресурсов Azure с уникальным именем.
  • Установите виртуальную сеть с указанным именем и адресом.
  • Создайте случайное имя подсети и создайте подсеть в виртуальной сети.
  • Делегировать подсеть службе Microsoft.Web/hostingEnvironments.
  • Создайте случайное имя среды службы приложений версии 3 и создайте среду службы приложений версии 3 в подсети.
  • Задайте внутренний режим балансировки нагрузки для среды службы приложений версии 3.
  • Задайте параметры кластера для среды службы приложений версии 3.
  • Добавьте тег для App Service Environment v3.
  • Выводит имена группы ресурсов, виртуальной сети, подсети и среды службы приложений версии 3.

Предпосылки

Это важно

Если вы используете поставщик azurerm 4.x, необходимо явно указать идентификатор подписки Azure для проверки подлинности в Azure перед выполнением команд Terraform.

Один из способов указать идентификатор подписки Azure, не помещая его в providers блок, заключается в указании идентификатора подписки в переменной среды с именем ARM_SUBSCRIPTION_ID.

Дополнительные сведения см. в справочной документации по поставщику Azure.

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

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

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

  2. Создайте файл с именем main.tfи вставьте следующий код:

    # Create a random pet name to use as a part of the resource group name 
    # for uniqueness
    resource "random_pet" "rg_name" {
      prefix = var.resource_group_name_prefix
    }
    
    # Create a resource group for organizing the App Service Environment resources
    resource "azurerm_resource_group" "rg" {
      location = var.resource_group_location
      name     = random_pet.rg_name.id
    }
    
    # A random value for the virtual network name is used if the 
    # virtual_network_name variable is not set
    resource "random_string" "azurerm_virtual_network_name" {
      length  = 13
      lower   = true
      numeric = false
      special = false
      upper   = false
    }
    
    # Define the virtual network for the App Service Environment
    resource "azurerm_virtual_network" "example" {
      name                = coalesce(var.virtual_network_name, "vnet-${random_string.azurerm_virtual_network_name.result}")
      resource_group_name = azurerm_resource_group.rg.name
      location            = azurerm_resource_group.rg.location
      address_space       = ["10.0.0.0/16"]
    }
    
    # A random value for the subnet is used if the subnet_name variable is not set
    resource "random_string" "azurerm_subnet_name" {
      length  = 13
      lower   = true
      numeric = false
      special = false
      upper   = false
    }
    
    # Define a subnet within the virtual network for the App Service Environment
    resource "azurerm_subnet" "ase" {
      name                 = coalesce(var.subnet_name, "subnet-${random_string.azurerm_subnet_name.result}")
      resource_group_name  = azurerm_resource_group.rg.name
      virtual_network_name = azurerm_virtual_network.example.name
      address_prefixes     = ["10.0.1.0/24"]
    
      delegation {
        name = "delegation"
    
        service_delegation {
          name    = "Microsoft.Web/hostingEnvironments"
          actions = ["Microsoft.Network/virtualNetworks/subnets/action"]
        }
      }
    }
    
    # A random value for the App Service Environment name is used if the
    # app_service_environment_v3_name variable is not set
    resource "random_string" "azurerm_app_service_environment_v3_name" {
      length  = 13
      lower   = true
      numeric = false
      special = false
      upper   = false
    }
    
    # Define the App Service Environment v3 resource
    resource "azurerm_app_service_environment_v3" "example" {
      name                = coalesce(var.app_service_environment_v3_name, "asev3-${random_string.azurerm_app_service_environment_v3_name.result}")
      resource_group_name = azurerm_resource_group.rg.name
      subnet_id           = azurerm_subnet.ase.id
    
      internal_load_balancing_mode = "Web, Publishing"
    
      cluster_setting {
        name  = "DisableTls1.0"
        value = "1"
      }
    
      cluster_setting {
        name  = "InternalEncryption"
        value = "true"
      }
    
      cluster_setting {
        name  = "FrontEndSSLCipherSuiteOrder"
        value = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
      }
    
      tags = {
        env         = "production"
        terraformed = "true"
      }
    }
    
  3. Создайте файл с именем outputs.tfи вставьте следующий код:

    output "resource_group_name" {
      value = azurerm_resource_group.rg.name
    }
    
    output "virtual_network_name" {
      value = azurerm_virtual_network.example.name
    }
    
    output "subnet_name" {
      value = azurerm_subnet.ase.name
    }
    
    output "app_service_environment_v3_name" {
      value = azurerm_app_service_environment_v3.example.name
    }
    
  4. Создайте файл с именем providers.tfи вставьте следующий код:

    terraform {
      required_version = ">=1.0"
    
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~>3.0"
        }
        random = {
          source  = "hashicorp/random"
          version = "~>3.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
  5. Создайте файл с именем variables.tfи вставьте следующий код:

    variable "resource_group_name_prefix" {
      type        = string
      default     = "rg"
      description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription."
    }
    
    variable "resource_group_location" {
      type        = string
      default     = "eastus"
      description = "Location of the resource group."
    }
    
    variable "virtual_network_name" {
      type        = string
      description = "The name of the virtual network resource. The value will be randomly generated if blank."
      default     = ""
    }
    
    variable "subnet_name" {
      type        = string
      description = "The name of the virtual network subnet. The value will be randomly generated if blank."
      default     = ""
    }
    
    variable "app_service_environment_v3_name" {
      type        = string
      description = "The name of the App Service Environment v3 resource. The value will be randomly generated if blank."
      default     = ""
    }
    

Инициализируйте Terraform

Запустите terraform init, чтобы инициализировать развертывание Terraform. Эта команда загружает поставщика Azure, необходимого для управления вашими ресурсами в Azure.

terraform init -upgrade

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

  • Параметр -upgrade обновляет необходимые плагины провайдера до самой последней версии, которая соответствует ограничениям версии конфигурации.

Создайте план запуска Terraform

Выполните команду terraform plan, чтобы создать план выполнения.

terraform plan -out main.tfplan

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

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

Применение плана выполнения Terraform

Выполните команду terraform apply, чтобы применить план выполнения к вашей облачной инфраструктуре.

terraform apply main.tfplan

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

  • Пример команды terraform apply предполагает, что вы ранее выполнили команду terraform plan -out main.tfplan.
  • Если вы указали другое имя файла для параметра -out, используйте то же имя файла при вызове terraform apply.
  • Если вы не использовали параметр -out, вызовите terraform apply без параметров.

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

  1. Получите имя группы ресурсов Azure.

    resource_group_name=$(terraform output -raw resource_group_name)
    
  2. Получите имя виртуальной сети.

    virtual_network_name=$(terraform output -raw virtual_network_name)
    
  3. Получите имя подсети.

    subnet_name=$(terraform output -raw subnet_name)
    
  4. Запустите az appservice ase show , чтобы просмотреть среду службы приложений версии 3.

    az appservice ase show --name $app_service_environment_v3_name --resource-group $resource_group_name  
    

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

Если вам больше не нужны ресурсы, созданные через 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.

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