最后审核时间:2026年5月
使用原生 Terraform 构建 AZ-305 考试中的 AWS 服务——每次构建一个代码块,并紧扣考试领域。相同的代码可在 OpenTofu 上运行。
在本实验结束时,您将使用纯粹的 Terraform 预置 AZ-305 参考架构的核心组件——即一个中心辐射型 VNet 拓扑(一个中心、一个辐射,已对等)、一个用于全球 HTTPS 入口的 Azure Front Door、一个用于密钥和证书管理(采用 RBAC 授权)的 Key Vault,以及每个架构师专家设计都假定的诊断管道。每个模块都与 AZ-305 的设计领域相关联。
将这些代码片段放入一个 main.tf 文件中,运行 terraform init,然后逐步运行 terraform apply。
>= 1.5 或 OpenTofu >= 1.6。az login)。整个堆栈空闲时每月约 $36。Front Door 是成本陷阱——如果您不积极测试,请立即销毁它。
标准的 Azure 开场白。AZ-305 期望您在任何“双区域”问题中选择 eastus / westus 配对——它们是用于延迟测试和配对区域故障转移场景的 AZ-305 规范区域对。
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
}中心辐射型是 AZ-305 的参考网络设计:一个中央 中心 VNet 托管共享服务(防火墙、VPN 网关、DNS),而 辐射 VNet 托管工作负载。辐射 VNet 与中心 VNet 双向对等;辐射到辐射的流量通过中心 VNet 传输。考试会不断测试这种拓扑结构,因为它是任何多工作负载 Azure 登陆区域的基础。
我们构建了最简单的中心辐射型:一个中心 VNet (10.0.0.0/16),一个辐射 VNet (10.1.0.0/16),以及双向对等互连。实际的中心辐射型设计会在中心 VNet 中添加 Azure 防火墙,并使用 next_hop_in_ip_address 路由表强制辐射流量通过它——这在概念上有所涵盖,但此处为降低成本而跳过(Azure 防火墙空闲时约为每小时 $1)。
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 是 AZ-305 中密钥和证书的基本服务。考试会测试两个重要的架构决策:RBAC vs 访问策略 (RBAC 是现代默认选项;访问策略是遗留选项),以及软删除 + 清除保护 (软删除默认启用;清除保护使软删除窗口不可覆盖——某些合规性制度要求)。
我们启用 RBAC 授权,并将当前的 Terraform 主体分配为 Key Vault 管理员,以便后续的密钥/证书资源能够正常工作。AZ-305 中关于“应用程序无法读取其数据库密码”的问题,90% 的情况最终都归结为“因为托管标识在 Key Vault 上没有 Key Vault 秘密用户权限”。
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 是 AZ-305 中 全球负载均衡器 + WAF + CDN 的解决方案。考试会将其与三种替代方案进行比较:Application Gateway(区域第 7 层)、Traffic Manager(基于 DNS,无流量传输)和 Load Balancer(区域第 4 层)。对于任何“全球分布式用户 + HTTPS + WAF + 缓存”的场景,Front Door 都是正确的答案。
我们预置一个 Front Door 配置文件 + 一个终结点 + 一个存根源站组。在生产环境中,您会把 Web App 或 AKS 入口作为源站;对于本实验,AZ-305 考查的是拓扑结构。标准层支持考试所期望的安全和路由功能(WAF、自定义规则、会话亲和性);高级层增加了专用链接源站,用于完全私有的后端访问。
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
}
}AZ-305 的“设计数据存储和集成”领域以及“设计业务连续性”都依赖于架构组件的可观测性。我们创建一个 Log Analytics 工作区,并将 Front Door 访问日志 + Key Vault 审计日志连接到其中。
随着诊断管道的到位,AZ-305 参考架构的形状已定:全球入口 (Front Door) → 中心辐射型网络 → 工作负载辐射 VNet → 密钥层 (Key Vault) → 可观测性结构 (Log Analytics)。每一个额外的架构添加(Front Door 后面的 Application Gateway、辐射 VNet 中的 Cosmos DB、中心 VNet 中的 Logic Apps)都将插入这个基础架构中。
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 会销毁所有资源。Front Door 配置文件是 24/7 计费的项目(约 $35/月)。如果您不打算探索它,请立即销毁。此处的 Key Vault 具有 7 天软删除功能(可配置为最多 90 天);我们在 provider 中设置了 purge_soft_delete_on_destroy = true,因此销毁操作会实际清除 Key Vault,而不是保留命名空间。
AZ-305 涵盖了庞大的架构领域——Application Gateway、Azure Firewall、VPN Gateway + ExpressRoute、Private Link / Private Endpoints、Azure Active Directory B2B / B2C、条件访问、特权身份管理、大规模 AKS 架构、Service Fabric、Azure API Management、多区域配对部署、地理复制的 Cosmos / SQL / Storage、BCDR 设计(Site Recovery)、大规模成本管理、登陆区域设计和 Azure Policy 计划。
我们坚持 四个基础原语,因为它们是每个 AZ-305 多组件设计所假定的基础。App Gateway 位于第 2 步的中心辐射型网络中。AKS 部署到辐射 VNet 中。Cosmos DB 将私有终结点暴露给辐射 VNet。Defender for Cloud 读取 Log Analytics 工作区。架构是组合;本实验为您提供了基本形状。
对于未预置的区域,此认证页面的 浏览、手册 和 Editorial 部分提供了概念性材料。