Inicio rápido: Creación de una instancia de Azure Front Door mediante Terraform
En este inicio rápido se describe cómo usar Terraform para crear un perfil de Front Door para configurar la alta disponibilidad para un punto de conexión web.
Nota
En el caso de las cargas de trabajo web, se recomienda encarecidamente usar la protección contra DDoS de Azure y un firewall de aplicaciones web para protegerse frente a posibles ataques DDoS. Otra opción es emplear Azure Front Door junto con un firewall de aplicaciones web. Azure Front Door ofrece protección de nivel de plataforma frente a ataques DDoS de nivel de red. Para más información, consulte línea base de seguridad para los servicios de Azure.
En este artículo aprenderá a:
- Cree un valor aleatorio para el nombre del grupo de recursos de Azure mediante random_pet.
- Cree un grupo de recursos de Azure mediante azurerm_resource_group.
- Cree un valor aleatorio para el nombre del recurso del punto de conexión de Front Door y el nombre de la aplicación de App Service mediante random_id.
- Cree un perfil de Front Door mediante azurerm_cdn_frontdoor_profile.
- Cree un punto de conexión de Front Door mediante azurerm_cdn_frontdoor_endpoint.
- Cree un grupo de orígenes de Front Door mediante azurerm_cdn_frontdoor_origin_group
- Cree un origen de Front Door, que hace referencia a la aplicación de App Service, mediante azurerm_cdn_frontdoor_origin.
- Cree una ruta de Front Door mediante azurerm_cdn_frontdoor_route.
- Cree un plan de App Service mediante azurerm_service_plan.
- Cree una aplicación de App Service mediante azurerm_windows_web_app.
Requisitos previos
Implementación del código de Terraform
Nota
El código de ejemplo de este artículo se encuentra en el repositorio de GitHub de Azure Terraform. Puedes ver el archivo de registro que contiene los resultados de las pruebas de las versiones actuales y anteriores de Terraform.
Consulte más artículos y código de ejemplo sobre el uso Terraform para administrar recursos de Azure.
Cree un directorio en el que probar el código de ejemplo de Terraform y conviértalo en el directorio actual.
Cree un archivo denominado
providers.tf
e inserte el siguiente código:terraform { required_version = ">=1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }
Cree un archivo denominado
main.tf
e inserte el siguiente código: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 }
Cree un archivo denominado
app-service.tf
e inserte el siguiente código: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" } } }
Cree un archivo denominado
variables.tf
e inserte el siguiente código: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." } }
Cree un archivo denominado
outputs.tf
e inserte el siguiente código:output "resource_group_name" { value = azurerm_resource_group.rg.name } output "frontDoorEndpointHostName" { value = azurerm_cdn_frontdoor_endpoint.my_endpoint.host_name }
Inicialización de Terraform
Para inicializar la implementación de Terraform, ejecute terraform init. Este comando descarga el proveedor de Azure necesario para administrar los recursos de Azure.
terraform init -upgrade
Puntos clave:
- El parámetro
-upgrade
actualiza los complementos de proveedor necesarios a la versión más reciente que cumpla con las restricciones de versión de la configuración.
Creación de un plan de ejecución de Terraform
Ejecute terraform plan para crear un plan de ejecución.
terraform plan -out main.tfplan
Puntos clave:
- El comando
terraform plan
crea un plan de ejecución, pero no lo ejecuta. En su lugar, determina qué acciones son necesarias para crear la configuración especificada en los archivos de configuración. Este patrón le permite comprobar si el plan de ejecución coincide con sus expectativas antes de realizar cambios en los recursos reales. - El parámetro
-out
opcional permite especificar un archivo de salida para el plan. El uso del parámetro-out
garantiza que el plan que ha revisado es exactamente lo que se aplica.
Aplicación de un plan de ejecución de Terraform
Ejecute terraform apply para aplicar el plan de ejecución a su infraestructura en la nube.
terraform apply main.tfplan
Puntos clave:
- El comando
terraform apply
de ejemplo asume que ejecutóterraform plan -out main.tfplan
previamente. - Si especificó un nombre de archivo diferente para el parámetro
-out
, use ese mismo nombre de archivo en la llamada aterraform apply
. - Si no ha utilizado el parámetro
-out
, llame aterraform apply
sin ningún parámetro.
Verificación de los resultados
Obtenga el punto de conexión de Front Door:
terraform output -raw frontDoorEndpointHostName
Pegue el punto de conexión en un explorador.
Limpieza de recursos
Cuando ya no necesite los recursos creados a través de Terraform, realice los pasos siguientes:
Ejecute el comando terraform plan y especifique la marca
destroy
.terraform plan -destroy -out main.destroy.tfplan
Puntos clave:
- El comando
terraform plan
crea un plan de ejecución, pero no lo ejecuta. En su lugar, determina qué acciones son necesarias para crear la configuración especificada en los archivos de configuración. Este patrón le permite comprobar si el plan de ejecución coincide con sus expectativas antes de realizar cambios en los recursos reales. - El parámetro
-out
opcional permite especificar un archivo de salida para el plan. El uso del parámetro-out
garantiza que el plan que ha revisado es exactamente lo que se aplica.
- El comando
Ejecute terraform apply para aplicar el plan de ejecución.
terraform apply main.destroy.tfplan
Solución de problemas de Terraform en Azure
Solución de problemas comunes al usar Terraform en Azure