Zuletzt überprüft: Mai 2026
Erstellen Sie die AWS-Dienste der AZ-204-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 die kanonische Azure PaaS Web-App bereitgestellt – einen App Service Plan + Linux Web App mit verwalteter Identität, ein Cosmos DB-Konto für den Status, einen Application Insights-Arbeitsbereich für Telemetrie und ein Speicherkonto, das die App für Blob-/Dateiarbeiten verwenden kann. Fünf Blöcke; die AZ-204-Referenzarchitektur.
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).az webapp deploy). Dieses Lab stellt die Infrastrukturshell bereit – die Code-Bereitstellung gehört zum AZ-204-Bereich Implement DevOps und liegt außerhalb von Terraform.Der gesamte Stack kostet im Leerlauf mit dem B1-Plan ca. $13/Monat. Wechseln Sie für kostenlose Tests zu F1 (entfernen Sie die verwaltete Identität in Schritt 3) oder zerstören Sie die Ressourcen umgehend.
Standard-Azure-Einstieg. Namen von App Service-Web-Apps müssen global eindeutig sein (per DNS als <name>.azurewebsites.net veröffentlicht) – random_id vermeidet Kollisionen.
terraform {
required_version = ">= 1.5"
required_providers {
azurerm = { source = "hashicorp/azurerm", version = "~> 4.0" }
random = { source = "hashicorp/random", version = "~> 3.6" }
}
}
provider "azurerm" {
features {}
}
resource "random_id" "suffix" {
byte_length = 3
}
locals {
tags = {
Project = "certlabpro-az-204"
ManagedBy = "terraform"
}
}
resource "azurerm_resource_group" "main" {
name = "certlabpro-az-204-rg"
location = "eastus"
tags = local.tags
}AZ-204 erwartet, dass Sie Cosmos DB verwenden, wann immer die Frage von einstelligen Millisekunden bei Skalierung, global verteilt oder NoSQL mit SQL-ähnlicher Abfrage spricht. Der Serverless-Kapazitätsmodus ist die standardmäßige Kostenoptimierung – Zahlung pro RU, $0 im Leerlauf, im Examen als die richtige Wahl für Umgebungen mit geringem Volumen / Entwicklung getestet.
Wir erstellen das Konto, eine Datenbank darunter und einen Container mit einem Partitionsschlüssel. Die Wahl des Partitionsschlüssels (/userId hier) ist die am häufigsten getestete AZ-204-Cosmos-Frage – schlechte Partitionsschlüssel verursachen Hot Partitions; gute verteilen die Last gleichmäßig. Die Prüfung testet dieses Muster mit Kardinalitätsszenarien.
resource "azurerm_cosmosdb_account" "main" {
name = "certlabpro-az-204-${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
offer_type = "Standard"
kind = "GlobalDocumentDB"
capabilities {
name = "EnableServerless"
}
consistency_policy {
consistency_level = "Session"
}
geo_location {
location = azurerm_resource_group.main.location
failover_priority = 0
}
tags = local.tags
}
resource "azurerm_cosmosdb_sql_database" "app" {
name = "appdb"
resource_group_name = azurerm_resource_group.main.name
account_name = azurerm_cosmosdb_account.main.name
}
resource "azurerm_cosmosdb_sql_container" "users" {
name = "users"
resource_group_name = azurerm_resource_group.main.name
account_name = azurerm_cosmosdb_account.main.name
database_name = azurerm_cosmosdb_sql_database.app.name
partition_key_paths = ["/userId"]
}Die AZ-204-Domänen Azure-Sicherheit implementieren und Überwachen, Problembehandlung und Optimieren stützen sich beide auf Application Insights – den APM-Dienst für verteilte Traces, Abhängigkeitsverfolgung, Fehlererfassung und Live-Metriken. Moderne App Insights-Instanzen erfordern einen Log Analytics-Arbeitsbereich als Daten-Backend (der arbeitsbereichsbasierte Modus; der klassische Modus ist veraltet).
Wir erstellen beide, und der Instrumentierungsschlüssel + die Verbindungszeichenfolge werden als App Insights-Attribute ausgegeben – in Schritt 4 über App-Einstellungen mit dem App Service verbunden.
resource "azurerm_log_analytics_workspace" "main" {
name = "certlabpro-az-204-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_application_insights" "main" {
name = "certlabpro-az-204-appi"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
workspace_id = azurerm_log_analytics_workspace.main.id
application_type = "web"
tags = local.tags
}App Service ist die bevorzugte AZ-204 PaaS-Web-Host-Lösung. Der App Service Plan ist der Compute-Container (man denke an EC2 unter der Abstraktion); Web-Apps darin teilen sich die Rechenleistung des Plans. Wir verwenden einen Linux B1-Plan und eine einzelne Web-App mit der Node.js 20-Laufzeit – wechseln Sie zu python, dotnet, java oder php, um Ihren Stack anzupassen.
Die systemzugewiesene verwaltete Identität ist die AZ-204-Antwort für passwortlose Anmeldeinformationen, mit der die App auf andere Azure-Dienste (Key Vault, Storage, Cosmos DB) zugreift. Sobald RBAC-Rollen für diese Ressourcen zugewiesen wurden, ruft der App Service sie mit von Entra ausgestellten Token auf – keine Verbindungszeichenfolgen in den App-Einstellungen.
Der app_settings-Block injiziert Umgebungsvariablen: App Insights-Verbindungszeichenfolge, Cosmos-Endpunkt und ein Flag. Die Web-App startet als leere Hülle – der Code wird separat bereitgestellt. Im Lab geht es darum, die Infrastruktur korrekt einzurichten.
resource "azurerm_service_plan" "main" {
name = "certlabpro-az-204-plan"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
os_type = "Linux"
sku_name = "B1"
tags = local.tags
}
resource "azurerm_linux_web_app" "main" {
name = "certlabpro-az-204-${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_service_plan.main.location
service_plan_id = azurerm_service_plan.main.id
https_only = true
site_config {
always_on = true
application_stack {
node_version = "20-lts"
}
}
identity {
type = "SystemAssigned"
}
app_settings = {
APPLICATIONINSIGHTS_CONNECTION_STRING = azurerm_application_insights.main.connection_string
COSMOS_ENDPOINT = azurerm_cosmosdb_account.main.endpoint
WEBSITES_ENABLE_APP_SERVICE_STORAGE = "false"
}
tags = local.tags
}
# Grant the web app's managed identity Cosmos DB data-plane access
# (Cosmos DB Built-in Data Contributor — the AZ-204 password-less pattern).
resource "azurerm_cosmosdb_sql_role_assignment" "webapp" {
resource_group_name = azurerm_resource_group.main.name
account_name = azurerm_cosmosdb_account.main.name
role_definition_id = "${azurerm_cosmosdb_account.main.id}/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002"
principal_id = azurerm_linux_web_app.main.identity[0].principal_id
scope = azurerm_cosmosdb_account.main.id
}Jede Azure PaaS Web-App benötigt irgendwann Blob-/Dateispeicher – hochgeladene Dateien, Benutzer-Avatare, generierte PDFs, verarbeitete Bilder. Wir stellen das Konto mit standardmäßigen sicheren Voreinstellungen bereit und gewähren der verwalteten Identität der App die Rolle Storage Blob Data Contributor, damit die App Blobs ohne Verbindungszeichenfolge lesen/schreiben kann.
Dies schließt den AZ-204-Zyklus Azure Compute Solutions entwickeln: App + Zustand (Cosmos) + Telemetrie (App Insights) + Blob-Speicher, alles über verwaltete Identität anstelle von Geheimnissen verbunden. Jedes zusätzliche AZ-204-Muster (Service Bus-Warteschlange, Event Grid-Thema, Key Vault-Geheimnisse, Logic App-Integration) wird auf dieselbe Weise angefügt – weisen Sie der verwalteten Identität die richtige Rolle im richtigen Umfang zu.
resource "azurerm_storage_account" "app_blobs" {
name = "az204app${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
account_tier = "Standard"
account_replication_type = "LRS"
account_kind = "StorageV2"
https_traffic_only_enabled = true
min_tls_version = "TLS1_2"
allow_nested_items_to_be_public = false
tags = local.tags
}
resource "azurerm_role_assignment" "webapp_blobs" {
scope = azurerm_storage_account.app_blobs.id
role_definition_name = "Storage Blob Data Contributor"
principal_id = azurerm_linux_web_app.main.identity[0].principal_id
}terraform destroy reißt alles ab. Der App Service Plan B1 ist der Posten, der 24/7 (~$13/Monat) abgerechnet wird. Der Plan verbleibt in der Ressourcengruppe, selbst wenn die Web-App entfernt wird, wenn Sie falsch herunterskalieren – terraform destroy entfernt beides. Cosmos DB serverless und App Insights stellen die Abrechnung sofort nach der Zerstörung ein.
AZ-204 behandelt weitere Entwicklerdienste, die dieses Lab nicht abdecken kann – Azure Functions (ereignisgesteuerte Serverless), Container Apps, AKS, Service Bus, Event Grid, Event Hubs, Logic Apps, Durable Functions, API Management, Front Door, CDN, Notification Hubs, SignalR und Azure Key Vault zur Speicherung von Geheimnissen (ein häufiger AZ-204-Nachfolger nach verwalteter Identität).
Wir halten uns an die Basis App Service + Cosmos + App Insights + Storage, da dies die am häufigsten getestete PaaS-Web-App-Form im Examen ist – und jedes andere AZ-204-Muster (Functions, Service Bus, Key Vault) über verwaltete Identität + RBAC an diese Basis angebunden wird.
Für die oben genannten Bereiche siehe die Abschnitte Durchsuchen, Handbuch und Editorial dieser Zertifizierungsseite.