Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: ✔️ Front Door Standard ✔️ Front Door Premium
Этот краткий старт описывает, как использовать Terraform для создания профиля Front Door, чтобы настроить высокую доступность для веб-узла.
Примечание
Для веб-рабочих нагрузок настоятельно рекомендуется использовать Защиту от атак DDoS Azure и брандмауэр веб-приложения для защиты от новых атак DDoS. Другой вариант — использовать Azure Front Door вместе с брандмауэром веб-приложения. Azure Front Door обеспечивает защиту на уровне платформы от атак DDoS на уровне сети. Дополнительные сведения см. в разделе "Базовые показатели безопасности для служб Azure".
В этой статье вы узнаете, как:
- Создайте случайное значение для имени группы ресурсов Azure, используя random_pet.
- Создайте группу ресурсов Azure, используя azurerm_resource_group.
- Создайте случайное значение для имени ресурса конечной точки Front Door и имени приложения App Service, используя random_id.
- Создайте профиль Front Door с использованием azurerm_cdn_frontdoor_profile.
- Создайте конечную точку Front Door, используя azurerm_cdn_frontdoor_endpoint.
- Создание группы источников Front Door с помощью azurerm_cdn_frontdoor_origin_group
- Создайте источник Front Door, который ссылается на приложение службы приложений с помощью azurerm_cdn_frontdoor_origin.
- Создайте маршрут Front Door с помощью azurerm_cdn_frontdoor_route.
- Создайте план службы приложений с помощью azurerm_service_plan.
- Создайте приложение App Service, используя azurerm_windows_web_app.
Предпосылки
Реализовать код Terraform
Примечание
Образец кода для этой статьи находится в репозитории Azure Terraform GitHub. Вы можете посмотреть файл журнала, содержащий результаты тестов из текущих и предыдущих версий Terraform.
См. другие статьи и примеры кода, в которых показано, как использовать Terraform для управления ресурсами Azure.
Создайте каталог для тестирования примера кода Terraform и сделайте его текущим каталогом.
Создайте файл с именем
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 {} }Создайте файл с именем
main.tfи вставьте следующий код:resource "random_pet" "rg-name" { prefix = var.resource_group_name_prefix } resource "azurerm_resource_group" "rg" { name = random_pet.rg-name.id location = var.resource_group_location } resource "random_id" "front_door_endpoint_name" { byte_length = 8 } locals { front_door_profile_name = "MyFrontDoor" front_door_endpoint_name = "afd-${lower(random_id.front_door_endpoint_name.hex)}" front_door_origin_group_name = "MyOriginGroup" front_door_origin_name = "MyAppServiceOrigin" front_door_route_name = "MyRoute" } resource "azurerm_cdn_frontdoor_profile" "my_front_door" { name = local.front_door_profile_name resource_group_name = azurerm_resource_group.rg.name sku_name = var.front_door_sku_name } resource "azurerm_cdn_frontdoor_endpoint" "my_endpoint" { name = local.front_door_endpoint_name cdn_frontdoor_profile_id = azurerm_cdn_frontdoor_profile.my_front_door.id } resource "azurerm_cdn_frontdoor_origin_group" "my_origin_group" { name = local.front_door_origin_group_name cdn_frontdoor_profile_id = azurerm_cdn_frontdoor_profile.my_front_door.id session_affinity_enabled = true load_balancing { sample_size = 4 successful_samples_required = 3 } health_probe { path = "/" request_type = "HEAD" protocol = "Https" interval_in_seconds = 100 } } resource "azurerm_cdn_frontdoor_origin" "my_app_service_origin" { name = local.front_door_origin_name cdn_frontdoor_origin_group_id = azurerm_cdn_frontdoor_origin_group.my_origin_group.id enabled = true host_name = azurerm_windows_web_app.app.default_hostname http_port = 80 https_port = 443 origin_host_header = azurerm_windows_web_app.app.default_hostname priority = 1 weight = 1000 certificate_name_check_enabled = true } resource "azurerm_cdn_frontdoor_route" "my_route" { name = local.front_door_route_name cdn_frontdoor_endpoint_id = azurerm_cdn_frontdoor_endpoint.my_endpoint.id cdn_frontdoor_origin_group_id = azurerm_cdn_frontdoor_origin_group.my_origin_group.id cdn_frontdoor_origin_ids = [azurerm_cdn_frontdoor_origin.my_app_service_origin.id] supported_protocols = ["Http", "Https"] patterns_to_match = ["/*"] forwarding_protocol = "HttpsOnly" link_to_default_domain = true https_redirect_enabled = true }Создайте файл с именем
app-service.tfи вставьте следующий код:resource "random_id" "app_name" { byte_length = 8 } locals { app_name = "myapp-${lower(random_id.app_name.hex)}" app_service_plan_name = "AppServicePlan" } resource "azurerm_service_plan" "app_service_plan" { name = local.app_service_plan_name location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name sku_name = var.app_service_plan_sku_name os_type = "Windows" worker_count = var.app_service_plan_capacity } resource "azurerm_windows_web_app" "app" { name = local.app_name location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name service_plan_id = azurerm_service_plan.app_service_plan.id https_only = true site_config { ftps_state = "Disabled" minimum_tls_version = "1.2" ip_restriction { service_tag = "AzureFrontDoor.Backend" ip_address = null virtual_network_subnet_id = null action = "Allow" priority = 100 headers { x_azure_fdid = [azurerm_cdn_frontdoor_profile.my_front_door.resource_guid] x_fd_health_probe = [] x_forwarded_for = [] x_forwarded_host = [] } name = "Allow traffic from Front Door" } } }Создайте файл с именем
variables.tfи вставьте следующий код:variable "resource_group_location" { type = string description = "Location for all resources." default = "eastus" } variable "resource_group_name_prefix" { type = string description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription." default = "rg" } variable "app_service_plan_sku_name" { type = string description = "The SKU for the plan. Possible values include: B1, B2, B3, D1, F1, I1, I2, I3, I1v2, I2v2, I3v2, I4v2, I5v2, I6v2, P1v2, P2v2, P3v2, P0v3, P1v3, P2v3, P3v3, P1mv3, P2mv3, P3mv3, P4mv3, P5mv3, S1, S2, S3, SHARED, EP1, EP2, EP3, WS1, WS2, WS3, Y1." default = "S1" validation { condition = contains(["B1", "B2", "B3", "D1", "F1", "I1", "I2", "I3", "I1v2", "I2v2", "I3v2", "I4v2", "I5v2", "I6v2", "P1v2", "P2v2", "P3v2", "P0v3", "P1v3", "P2v3", "P3v3", "P1mv3", "P2mv3", "P3mv3", "P4mv3", "P5mv3", "S1", "S2", "S3", "SHARED", "EP1", "EP2", "EP3", "WS1", "WS2", "WS3", "Y1"], var.app_service_plan_sku_name) error_message = "The SKU value must be one of the following: B1, B2, B3, D1, F1, I1, I2, I3, I1v2, I2v2, I3v2, I4v2, I5v2, I6v2, P1v2, P2v2, P3v2, P0v3, P1v3, P2v3, P3v3, P1mv3, P2mv3, P3mv3, P4mv3, P5mv3, S1, S2, S3, SHARED, EP1, EP2, EP3, WS1, WS2, WS3, Y1." } } variable "app_service_plan_capacity" { type = number description = "The number of Workers (instances) to be allocated." default = 1 } variable "front_door_sku_name" { type = string description = "The SKU for the Front Door profile. Possible values include: Standard_AzureFrontDoor, Premium_AzureFrontDoor" default = "Standard_AzureFrontDoor" validation { condition = contains(["Standard_AzureFrontDoor", "Premium_AzureFrontDoor"], var.front_door_sku_name) error_message = "The SKU value must be one of the following: Standard_AzureFrontDoor, Premium_AzureFrontDoor." } }Создайте файл с именем
outputs.tfи вставьте следующий код:output "resource_group_name" { value = azurerm_resource_group.rg.name } output "frontDoorEndpointHostName" { value = azurerm_cdn_frontdoor_endpoint.my_endpoint.host_name }
Инициализировать 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без параметров.
Проверьте результаты
Получить конечную точку для Front Door.
terraform output -raw frontDoorEndpointHostNameВставьте конечную точку в браузер.
Очистить ресурсы
Когда вам больше не нужны ресурсы, созданные с помощью 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