Zuletzt überprüft: Mai 2026
Erstellen Sie die AWS-Dienste der AZ-305-Prüfung mit reinem Terraform — ein Block nach dem anderen, jeweils abgestimmt auf eine Prüfungsdomäne. Derselbe Code funktioniert auch mit OpenTofu.
Am Ende dieses Labs haben Sie mit reinem Terraform den Kern der AZ-305-Referenzarchitektur bereitgestellt: eine Hub-Spoke-VNet-Topologie (ein Hub, ein Spoke, gepaart), eine Azure Front Door für den globalen HTTPS-Zugang, einen Key Vault für die Geheimnis- und Zertifikatsverwaltung mit RBAC-Autorisierung und die Diagnoseinfrastruktur, die jedes Architect-Expert-Design voraussetzt. Jeder Block ist einem AZ-305-Designbereich zugeordnet.
Fügen Sie die Snippets in eine einzige main.tf ein, führen Sie terraform init aus und anschließend terraform apply Schritt für Schritt.
>= 1.5 oder OpenTofu >= 1.6.az login).Der gesamte Stack kostet im Ruhezustand ca. 36 $/Monat. Front Door ist die Kostenfalle – löschen Sie es umgehend, wenn Sie nicht aktiv testen.
Standard-Azure-Eröffnung. AZ-305 erwartet, dass Sie für jede „Zwei-Regionen“-Frage das Paar eastus / westus wählen – sie sind das kanonische AZ-305-Regionspaar für Latenztests und Failover-Szenarien in gepaarten Regionen.
terraform {
required_version = ">= 1.5"
required_providers {
azurerm = { source = "hashicorp/azurerm", version = "~> 4.0" }
random = { source = "hashicorp/random", version = "~> 3.6" }
}
}
provider "azurerm" {
features {
key_vault {
purge_soft_delete_on_destroy = true
}
}
}
resource "random_id" "suffix" {
byte_length = 3
}
data "azurerm_client_config" "current" {}
locals {
tags = {
Project = "certlabpro-az-305"
ManagedBy = "terraform"
}
}
resource "azurerm_resource_group" "main" {
name = "certlabpro-az-305-rg"
location = "eastus"
tags = local.tags
}Hub-Spoke ist das AZ-305-Referenznetzwerkdesign: Ein zentrales Hub-VNet hostet gemeinsame Dienste (Firewall, VPN Gateway, DNS), und Spoke-VNets hosten Workloads. Spokes sind bidirektional mit dem Hub verbunden; Spoke-zu-Spoke-Verkehr läuft über den Hub. Die Prüfung testet diese Topologie endlos, weil sie die Grundlage jeder Multi-Workload Azure Landing Zone ist.
Wir bauen das einfachstmögliche Hub-Spoke auf: ein Hub-VNet (10.0.0.0/16), ein Spoke (10.1.0.0/16), bidirektionales Peering. Echte Hub-Spoke-Designs fügen die Azure Firewall im Hub und Routentabellen mit next_hop_in_ip_address hinzu, die den Spoke-Verkehr durch diese erzwingen – das wird konzeptionell behandelt, hier aber aus Kostengründen übersprungen (Azure Firewall kostet im Ruhezustand ca. 1 $/Stunde).
resource "azurerm_virtual_network" "hub" {
name = "certlabpro-az-305-hub"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
address_space = ["10.0.0.0/16"]
tags = local.tags
}
resource "azurerm_subnet" "hub_shared" {
name = "shared"
resource_group_name = azurerm_resource_group.main.name
virtual_network_name = azurerm_virtual_network.hub.name
address_prefixes = ["10.0.1.0/24"]
}
resource "azurerm_virtual_network" "spoke" {
name = "certlabpro-az-305-spoke"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
address_space = ["10.1.0.0/16"]
tags = local.tags
}
resource "azurerm_subnet" "spoke_app" {
name = "app"
resource_group_name = azurerm_resource_group.main.name
virtual_network_name = azurerm_virtual_network.spoke.name
address_prefixes = ["10.1.1.0/24"]
}
resource "azurerm_virtual_network_peering" "hub_to_spoke" {
name = "hub-to-spoke"
resource_group_name = azurerm_resource_group.main.name
virtual_network_name = azurerm_virtual_network.hub.name
remote_virtual_network_id = azurerm_virtual_network.spoke.id
allow_forwarded_traffic = true
}
resource "azurerm_virtual_network_peering" "spoke_to_hub" {
name = "spoke-to-hub"
resource_group_name = azurerm_resource_group.main.name
virtual_network_name = azurerm_virtual_network.spoke.name
remote_virtual_network_id = azurerm_virtual_network.hub.id
allow_forwarded_traffic = true
}Key Vault ist das AZ-305-Grundelement für Geheimnisse und Zertifikate. Zwei wichtige architektonische Entscheidungen, die in der Prüfung getestet werden: RBAC vs. Zugriffsrichtlinien (RBAC ist der moderne Standard; Zugriffsrichtlinien sind veraltet) und Soft-Delete + Purge Protection (Soft-Delete ist standardmäßig aktiviert; Purge Protection macht das Soft-Delete-Fenster unüberschreibbar – für einige Compliance-Regime erforderlich).
Wir aktivieren die RBAC-Autorisierung und weisen dem aktuellen Terraform-Prinzipal die Rolle des Key Vault-Administrators zu, damit nachfolgende Geheimnis-/Zertifikatsressourcen funktionieren. AZ-305-Fragen über „die Anwendung kann ihr Datenbankpasswort nicht lesen“ enden zu 90 % der Zeit mit „weil die verwaltete Identität nicht über die Berechtigung Key Vault Secrets User für den Vault verfügte“.
resource "azurerm_key_vault" "main" {
name = "kv-az305-${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
tenant_id = data.azurerm_client_config.current.tenant_id
sku_name = "standard"
enable_rbac_authorization = true
soft_delete_retention_days = 7 # 7 minimum; 90 for purge protection in production
purge_protection_enabled = false # set true for production / compliance
public_network_access_enabled = true
tags = local.tags
}
resource "azurerm_role_assignment" "kv_admin_self" {
scope = azurerm_key_vault.main.id
role_definition_name = "Key Vault Administrator"
principal_id = data.azurerm_client_config.current.object_id
}Front Door ist die AZ-305-Antwort für globalen Load Balancer + WAF + CDN. Die Prüfung testet es gegen drei Alternativen: Application Gateway (regionaler Layer-7), Traffic Manager (DNS-basiert, kein Traffic-Transit) und Load Balancer (regionaler Layer-4). Front Door ist die richtige Antwort für jedes Szenario mit „global verteilten Benutzern + HTTPS + WAF + Caching“.
Wir stellen ein Front Door-Profil + Endpoint + eine Stub-Origin-Gruppe bereit. In der Produktion würden Sie eine Web App oder einen AKS Ingress als Origin anschließen; für das Labor ist die Topologieform das, was AZ-305-Fragen testen. Der Standard-Tier unterstützt die Sicherheits- und Routingfunktionen, die in der Prüfung erwartet werden (WAF, benutzerdefinierte Regeln, Session Affinity); Premium fügt private-link origins für vollständig privaten Backend-Zugriff hinzu.
resource "azurerm_cdn_frontdoor_profile" "main" {
name = "certlabpro-az-305-fd"
resource_group_name = azurerm_resource_group.main.name
sku_name = "Standard_AzureFrontDoor"
tags = local.tags
}
resource "azurerm_cdn_frontdoor_endpoint" "main" {
name = "certlabpro-az-305-${random_id.suffix.hex}"
cdn_frontdoor_profile_id = azurerm_cdn_frontdoor_profile.main.id
tags = local.tags
}
resource "azurerm_cdn_frontdoor_origin_group" "main" {
name = "app-origins"
cdn_frontdoor_profile_id = azurerm_cdn_frontdoor_profile.main.id
session_affinity_enabled = false
load_balancing {
sample_size = 4
successful_samples_required = 3
}
health_probe {
path = "/"
request_type = "HEAD"
protocol = "Https"
interval_in_seconds = 30
}
}Der AZ-305-Bereich „Datenspeicherung und -integration entwerfen“ sowie „Geschäftskontinuität entwerfen“ hängen beide von der Beobachtbarkeit der Architekturkomponenten ab. Wir erstellen einen Log Analytics-Arbeitsbereich und leiten Front Door-Zugriffsprotokolle + Key Vault-Überwachungsprotokolle dorthin weiter.
Mit der eingerichteten Diagnoserohrleitung ist die AZ-305-Referenzarchitektur geformt: globaler Eingang (Front Door) → Hub-Spoke-Netzwerk → Workload-Spoke → Geheimnisebene (Key Vault) → Beobachtbarkeitsstruktur (Log Analytics). Jede zusätzliche architektonische Ergänzung (Application Gateway hinter Front Door, Cosmos DB im Spoke, Logic Apps im Hub) fügt sich in diese Basis ein.
resource "azurerm_log_analytics_workspace" "main" {
name = "certlabpro-az-305-logs"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
sku = "PerGB2018"
retention_in_days = 30
tags = local.tags
}
resource "azurerm_monitor_diagnostic_setting" "key_vault" {
name = "diag"
target_resource_id = azurerm_key_vault.main.id
log_analytics_workspace_id = azurerm_log_analytics_workspace.main.id
enabled_log {
category = "AuditEvent"
}
metric {
category = "AllMetrics"
enabled = true
}
}
resource "azurerm_monitor_diagnostic_setting" "front_door" {
name = "diag"
target_resource_id = azurerm_cdn_frontdoor_profile.main.id
log_analytics_workspace_id = azurerm_log_analytics_workspace.main.id
enabled_log {
category = "FrontDoorAccessLog"
}
enabled_log {
category = "FrontDoorHealthProbeLog"
}
}terraform destroy reißt alles ab. Das Front Door-Profil ist der Kostenfaktor, der 24/7 abgerechnet wird (ca. 35 $/Monat). Löschen Sie es umgehend, wenn Sie es nicht aktiv erkunden. Key Vault hat hier eine 7-tägige Soft-Delete-Frist (konfigurierbar bis zu 90 Tage); wir setzen purge_soft_delete_on_destroy = true im Provider, sodass das Löschen den Vault tatsächlich bereinigt, anstatt den Namespace reserviert zu lassen.
AZ-305 deckt einen enormen architektonischen Bereich ab – Application Gateway, Azure Firewall, VPN Gateway + ExpressRoute, Private Link / Private Endpoints, Azure Active Directory B2B / B2C, Conditional Access, Privileged Identity Management, AKS im architektonischen Maßstab, Service Fabric, Azure API Management, Multi-Region-Paired-Deployments, geo-replizierte Cosmos / SQL / Storage, BCDR-Designs (Site Recovery), Kostenmanagement im großen Maßstab, Landing Zone-Designs und Azure Policy-Initiativen.
Wir konzentrieren uns auf die vier grundlegenden Primitive, da sie das Substrat sind, das jedes AZ-305-Multi-Komponenten-Design voraussetzt. App Gateway sitzt im Hub Spoke aus Schritt 2. AKS wird im Spoke VNet bereitgestellt. Cosmos DB stellt private Endpoints im Spoke bereit. Defender for Cloud liest den Log Analytics workspace. Architektur ist Komposition; dieses Labor vermittelt Ihnen die Grundformen.
Für eine Abdeckung der nicht bereitgestellten Bereiche finden Sie konzeptionelles Material in den Abschnitten Durchsuchen, Handbuch und Editorial dieser Zertifizierungsseite.