Démarrage rapide : Créer une instance Azure Front Door Service en utilisant Terraform
Ce guide de démarrage rapide explique comment utiliser Terraform pour créer une instance Front Door afin de configurer la haute disponibilité d’un point de terminaison web.
Notes
Pour les charges de travail Web, nous vous recommandons vivement d’utiliser la protection DDoS Azure et un pare-feu d’applications Web pour vous protéger contre les attaques DDoS émergentes. Une autre option consiste à utiliser Azure Front Door avec un pare-feu d’applications Web. Azure Front Door offre une protection au niveau de la plateforme contre les attaques DDoS au niveau du réseau. Pour plus d’informations, consultez Base de référence de la sécurité pour les services Azure.
Dans cet article, vous apprendrez comment :
- Créez une valeur aléatoire pour le nom du groupe de ressources Azure à l’aide de random_pet.
- Créez un groupe de ressources Azure à l’aide de azurerm_resource_group.
- Créez une valeur aléatoire pour le nom de la ressource du point de terminaison Front Door et le nom de l'application App Service à l'aide de random_id.
- Créez un profil de porte d'entrée à l'aide de azurerm_cdn_frontdoor_profile.
- Créer un point de terminaison Front Door à l'aide de azurerm_cdn_frontdoor_endpoint.
- Créez un groupe d'origine Front Door à l'aide de azurerm_cdn_frontdoor_origin_group
- Créez une origine Front Door, qui fait référence à l'application App Service, à l'aide de azurerm_cdn_frontdoor_origin.
- Créez un itinéraire de porte d'entrée à l'aide de azurerm_cdn_frontdoor_route.
- Créer un plan App Service à l'aide de azurerm_service_plan.
- Créer une application App Service à l'aide de azurerm_windows_web_app.
Notes
L’exemple de code de cet article se trouve dans le dépôt GitHub Azure Terraform. Vous pouvez afficher le fichier journal contenant les résultats des tests des versions actuelles et précédentes de Terraform.
Consultez d’autres articles et exemples de code montrant comment utiliser Terraform pour gérer les ressources Azure.
Créez un répertoire dans lequel tester l’exemple de code Terraform et définissez-le comme répertoire actuel.
Créez un fichier nommé
providers.tf
et insérez le code suivant :terraform { required_version = ">=1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }
Créez un fichier nommé
main.tf
et insérez le code suivant :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 }
Créez un fichier nommé
app-service.tf
et insérez le code suivant :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" } } }
Créez un fichier nommé
variables.tf
et insérez le code suivant :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." } }
Créez un fichier nommé
outputs.tf
et insérez le code suivant :output "resource_group_name" { value = azurerm_resource_group.rg.name } output "frontDoorEndpointHostName" { value = azurerm_cdn_frontdoor_endpoint.my_endpoint.host_name }
Exécutez terraform init pour initialiser le déploiement Terraform. Cette commande télécharge le fournisseur Azure à utiliser pour la gestion de vos ressources Azure.
terraform init -upgrade
Points essentiels :
- Le paramètre
-upgrade
met à niveau les plug-ins de fournisseur nécessaires vers la version la plus récente qui est conforme aux contraintes de version de la configuration.
Exécutez terraform plan pour créer un plan d’exécution.
terraform plan -out main.tfplan
Points essentiels :
- La commande
terraform plan
crée un plan d’exécution, mais ne l’exécute pas. Au lieu de cela, elle détermine les actions nécessaires pour créer la configuration spécifiée dans vos fichiers de configuration. Ce modèle vous permet de vérifier si le plan d’exécution répond à vos attentes avant d’apporter des modifications aux ressources réelles. - Le paramètre facultatif
-out
vous permet de spécifier un fichier de sortie pour le plan. L’utilisation du paramètre-out
garantit que le plan que vous avez examiné correspond exactement à ce qui est appliqué.
Exécutez terraform apply pour appliquer le plan d’exécution à votre infrastructure cloud.
terraform apply main.tfplan
Points essentiels :
- La commande exemple
terraform apply
part du principe que vous avez préalablement exécutéterraform plan -out main.tfplan
. - Si vous avez spécifié un autre nom de fichier pour le paramètre
-out
, utilisez ce même nom dans l’appel àterraform apply
. - Si vous n’avez pas utilisé le paramètre
-out
, appelezterraform apply
sans aucun paramètre.
Obtenez le point de terminaison Front Door :
terraform output -raw frontDoorEndpointHostName
Collez le point de terminaison dans un navigateur.
Quand vous n’avez plus besoin des ressources créées par le biais de Terraform, effectuez les étapes suivantes :
Exécutez le plan Terraform et spécifiez l’indicateur
destroy
.terraform plan -destroy -out main.destroy.tfplan
Points essentiels :
- La commande
terraform plan
crée un plan d’exécution, mais ne l’exécute pas. Au lieu de cela, elle détermine les actions nécessaires pour créer la configuration spécifiée dans vos fichiers de configuration. Ce modèle vous permet de vérifier si le plan d’exécution répond à vos attentes avant d’apporter des modifications aux ressources réelles. - Le paramètre facultatif
-out
vous permet de spécifier un fichier de sortie pour le plan. L’utilisation du paramètre-out
garantit que le plan que vous avez examiné correspond exactement à ce qui est appliqué.
- La commande
Exécutez terraform apply pour appliquer le plan d’exécution.
terraform apply main.destroy.tfplan
Résoudre les problèmes courants liés à l’utilisation de Terraform sur Azure