Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом кратком руководстве вы используете Terraform для создания среды службы приложений, однотенантного развертывания службы приложений Azure. Его можно использовать для виртуальной сети Azure. Для развертывания Среды службы приложений требуется одна подсеть, и эту подсеть нельзя использовать для других целей. Вы создаете группу ресурсов, виртуальную сеть и подсеть для настройки среды службы приложений Azure версии 3.
В этой статье вы узнаете, как:
- Создайте группу ресурсов Azure с уникальным именем.
- Установите виртуальную сеть с указанным именем и адресом.
- Создайте случайное имя подсети и создайте подсеть в виртуальной сети.
- Делегировать подсеть службе Microsoft.Web/hostingEnvironments.
- Создайте случайное имя среды службы приложений версии 3 и создайте среду службы приложений версии 3 в подсети.
- Задайте внутренний режим балансировки нагрузки для среды службы приложений версии 3.
- Задайте параметры кластера для среды службы приложений версии 3.
- Добавьте тег для App Service Environment v3.
- Выводит имена группы ресурсов, виртуальной сети, подсети и среды службы приложений версии 3.
Предпосылки
- Учетная запись Azure с активной подпиской. Вы можете создать учетную запись бесплатно.
- Terraform. Дополнительные сведения см. в разделе "Установка и настройка Terraform".
Это важно
Если вы используете поставщик azurerm 4.x, необходимо явно указать идентификатор подписки Azure для проверки подлинности в Azure перед выполнением команд Terraform.
Один из способов указать идентификатор подписки Azure, не помещая его в providers
блок, заключается в указании идентификатора подписки в переменной среды с именем ARM_SUBSCRIPTION_ID
.
Дополнительные сведения см. в справочной документации по поставщику Azure.
Реализуйте код Terraform
Образец кода для этой статьи находится в репозитории Azure Terraform GitHub. Вы можете посмотреть файл журнала, содержащий результаты тестов из текущих и предыдущих версий Terraform. Дополнительные статьи и пример кода, демонстрирующие использование Terraform для управления ресурсами Azure.
Создайте каталог, в котором необходимо протестировать и запустить пример кода Terraform и сделать его текущим каталогом.
Создайте файл с именем
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" } }
Создайте файл с именем
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 }
Создайте файл с именем
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 {} }
Создайте файл с именем
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
без параметров.
Проверка результатов
Получите имя группы ресурсов Azure.
resource_group_name=$(terraform output -raw resource_group_name)
Получите имя виртуальной сети.
virtual_network_name=$(terraform output -raw virtual_network_name)
Получите имя подсети.
subnet_name=$(terraform output -raw subnet_name)
Запустите
az appservice ase show
, чтобы просмотреть среду службы приложений версии 3.az appservice ase show --name $app_service_environment_v3_name --resource-group $resource_group_name
Очистите ресурсы
Если вам больше не нужны ресурсы, созданные через 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.