Szybki start: tworzenie usługi Azure Front Door przy użyciu narzędzia Terraform
W tym przewodniku Szybki start opisano, jak za pomocą narzędzia Terraform utworzyć profil usługi Front Door w celu skonfigurowania wysokiej dostępności dla internetowego punktu końcowego.
Uwaga
W przypadku obciążeń internetowych zdecydowanie zalecamy korzystanie z ochrony przed atakami DDoS platformy Azure i zapory aplikacji internetowej w celu ochrony przed pojawiającymi się atakami DDoS. Inną opcją jest zastosowanie usługi Azure Front Door wraz z zaporą aplikacji internetowej. Usługa Azure Front Door oferuje ochronę na poziomie platformy przed atakami DDoS na poziomie sieci. Aby uzyskać więcej informacji, zobacz Punkt odniesienia zabezpieczeń dla usług platformy Azure.
W tym artykule omówiono sposób wykonywania następujących zadań:
- Utwórz losową wartość dla nazwy grupy zasobów platformy Azure przy użyciu random_pet.
- Utwórz grupę zasobów platformy Azure przy użyciu azurerm_resource_group.
- Utwórz losową wartość dla nazwy zasobu punktu końcowego usługi Front Door i nazwy aplikacji usługi App Service przy użyciu random_id.
- Utwórz profil usługi Front Door przy użyciu azurerm_cdn_frontdoor_profile.
- Utwórz punkt końcowy usługi Front Door przy użyciu azurerm_cdn_frontdoor_endpoint.
- Tworzenie grupy źródeł usługi Front Door przy użyciu azurerm_cdn_frontdoor_origin_group
- Utwórz źródło usługi Front Door, które odwołuje się do aplikacji usługi App Service przy użyciu azurerm_cdn_frontdoor_origin.
- Utwórz trasę usługi Front Door przy użyciu azurerm_cdn_frontdoor_route.
- Utwórz plan usługi App Service przy użyciu azurerm_service_plan.
- Utwórz aplikację usługi App Service przy użyciu azurerm_windows_web_app.
Wymagania wstępne
Implementowanie kodu narzędzia Terraform
Uwaga
Przykładowy kod tego artykułu znajduje się w repozytorium GitHub programu Azure Terraform. Możesz wyświetlić plik dziennika zawierający wyniki testu z bieżących i poprzednich wersji programu Terraform.
Zobacz więcej artykułów i przykładowego kodu pokazującego, jak zarządzać zasobami platformy Azure za pomocą narzędzia Terraform
Utwórz katalog, w którym chcesz przetestować przykładowy kod narzędzia Terraform i ustawić go jako bieżący katalog.
Utwórz plik o nazwie
providers.tf
i wstaw następujący kod:terraform { required_version = ">=1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }
Utwórz plik o nazwie
main.tf
i wstaw następujący kod: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 }
Utwórz plik o nazwie
app-service.tf
i wstaw następujący kod: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" } } }
Utwórz plik o nazwie
variables.tf
i wstaw następujący kod: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." } }
Utwórz plik o nazwie
outputs.tf
i wstaw następujący kod:output "resource_group_name" { value = azurerm_resource_group.rg.name } output "frontDoorEndpointHostName" { value = azurerm_cdn_frontdoor_endpoint.my_endpoint.host_name }
Inicjowanie narzędzia Terraform
Uruchom narzędzie terraform init , aby zainicjować wdrożenie narzędzia Terraform. To polecenie pobiera dostawcę platformy Azure wymaganego do zarządzania zasobami platformy Azure.
terraform init -upgrade
Kluczowe punkty:
- Parametr
-upgrade
uaktualnia niezbędne wtyczki dostawcy do najnowszej wersji, która jest zgodna z ograniczeniami wersji konfiguracji.
Tworzenie planu wykonania programu Terraform
Uruchom plan terraform, aby utworzyć plan wykonania.
terraform plan -out main.tfplan
Kluczowe punkty:
- Polecenie
terraform plan
tworzy plan wykonania, ale nie wykonuje go. Zamiast tego określa, jakie akcje są niezbędne do utworzenia konfiguracji określonej w plikach konfiguracji. Ten wzorzec umożliwia sprawdzenie, czy plan wykonania jest zgodny z oczekiwaniami przed wprowadzeniem jakichkolwiek zmian w rzeczywistych zasobach. - Opcjonalny
-out
parametr umożliwia określenie pliku wyjściowego dla planu. Użycie parametru-out
gwarantuje, że sprawdzony plan jest dokładnie tym, co jest stosowane.
Stosowanie planu wykonywania narzędzia Terraform
Uruchom narzędzie terraform, aby zastosować plan wykonania do infrastruktury chmury.
terraform apply main.tfplan
Kluczowe punkty:
- Przykładowe
terraform apply
polecenie zakłada, że wcześniej uruchomionoterraform plan -out main.tfplan
polecenie . - Jeśli określono inną nazwę pliku parametru
-out
, użyj tej samej nazwy pliku w wywołaniu metodyterraform apply
. - Jeśli parametr nie został użyty, wywołaj metodę
-out
terraform apply
bez żadnych parametrów.
Weryfikowanie wyników
Uzyskaj punkt końcowy usługi Front Door:
terraform output -raw frontDoorEndpointHostName
Wklej punkt końcowy do przeglądarki.
Czyszczenie zasobów
Jeśli zasoby utworzone za pomocą narzędzia Terraform nie są już potrzebne, wykonaj następujące czynności:
Uruchom plan terraform i określ flagę
destroy
.terraform plan -destroy -out main.destroy.tfplan
Kluczowe punkty:
- Polecenie
terraform plan
tworzy plan wykonania, ale nie wykonuje go. Zamiast tego określa, jakie akcje są niezbędne do utworzenia konfiguracji określonej w plikach konfiguracji. Ten wzorzec umożliwia sprawdzenie, czy plan wykonania jest zgodny z oczekiwaniami przed wprowadzeniem jakichkolwiek zmian w rzeczywistych zasobach. - Opcjonalny
-out
parametr umożliwia określenie pliku wyjściowego dla planu. Użycie parametru-out
gwarantuje, że sprawdzony plan jest dokładnie tym, co jest stosowane.
- Polecenie
Uruchom narzędzie terraform zastosuj, aby zastosować plan wykonania.
terraform apply main.destroy.tfplan
Rozwiązywanie problemów z programem Terraform na platformie Azure
Rozwiązywanie typowych problemów podczas korzystania z narzędzia Terraform na platformie Azure