你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure 登陆区域 Terraform 模块
Azure 提供用于生成 Azure 登陆区域的本机服务。 其他工具也可以帮助完成这项工作。 客户和合作伙伴经常用来部署登陆区域的一个工具是 HashiCorp 的 Terraform。
本模块不介绍资源到应用程序登陆区域的部署。 有关部署方法和工具的选择由负责应用程序的团队决定。
Azure 登陆区域 Terraform 模块提供了使用 Terraform 大规模管理 Azure 登陆区域所需的平台资源的快速实现。 该模块旨在简化连接和管理订阅中管理组层次结构、策略和资源的部署。
先决条件
如果你不熟悉 Terraform,并且想要了解如何安装和使用它,请参阅 HashiCorp Learn 上的 Install Terraform 教程。
有关如何设置 Terraform 提供程序并使用 Azure 进行身份验证的信息,请参阅 Terraform 网站上的 AzureRM 提供程序指南 。 若要了解如何设置提供程序以跨多个订阅进行部署,请参阅 “提供程序配置 Wiki”页。
使用标准模块的重要性
重用组件是基础结构即代码的一项基本原则。 模块有助于在环境内部和跨环境的资源部署中定义标准和一致性。
Azure 登陆区域 Terraform 模块发布到官方 Terraform 注册表 ,由 HashiCorp 验证。
从 Terraform Registry 部署模块可以:
- 在环境中加速交付 Azure 登陆区域。
- 提供最新模块版本的已测试升级路径,以及严格的版本控制。
使用模块的好处
使用 Azure 登陆区域 Terraform 模块的好处包括:
- 通过管理组的订阅组织的托管和可扩展核心资源层次结构。
- 通过 Azure 标识和访问管理 (IAM) 控件提供可缩放的安全治理和合规性,并提供可供分配的广泛自定义定义库。
- 通过管理组继承跨订阅强制执行策略。
- 管理和连接登陆区域的受管理资源。 这些资源提供:
- 通过紧密集成模块管理的资源和相应的策略分配来确保策略合规性。
- 资源之间的集成可减少管理开销并提供改进的用户体验,例如为 Azure 专用 DNS 自动创建虚拟网络链接。
提示
模板库通过 Azure/Enterprise-Scale GitHub 存储库以编程方式更新。 若要及时了解最新的原型配置、策略和角色,请确保使用的是最新版本的模块。
资源部署
你可以配置模块以部署与 Azure 登陆区域中的以下关键设计领域一致的资源集。 自定义这些资源以满足组织的要求。
资源类别 | 关键设计领域 |
---|---|
核心资源 | 资源组织 安全 治理 |
管理资源 | 管理与监视 |
连接资源 | 网络拓扑和连接 |
标识资源 | 标识和访问管理 |
通过将这些功能打包到单个 Terraform 模块中,在大规模运行时可以更轻松地在 Azure 平台上构建和强制实施一致性。
这些资源与 Azure 登陆区域概念体系结构保持一致:
可以使用模块块上的提供程序配置跨多个订阅部署这些资源。
以下部分概述了资源类型和配置选项。
核心资源
本模块的核心功能为 Azure 登陆区域部署概念体系结构的基础,重点介绍中心资源组织。
启用核心资源的部署(默认已启用)时,该模块会部署并管理以下资源类型:
该模块创建的资源的确切数量取决于模块配置。 对于默认配置,该模块预期会创建大约 180
个资源。
提示
这些资源都不会部署在订阅范围内,但 Terraform 仍需使用订阅才能与 Azure 建立经过身份验证的会话。 有关使用 Azure 进行身份验证的详细信息,请参阅 Azure 提供程序:对 Azure 文档进行身份验证。
管理资源
该模块提供了一个选项,用于从 Azure 登陆区域的概念体系结构部署到指定订阅中的管理和监视资源,如提供程序配置 Wiki 页中所述。 该模块还可以确保将指定的订阅置于正确的管理组中。
启用管理资源的部署时,该模块会部署并管理以下资源类型(取决于配置):
资源 | Azure 资源类型 | Terraform 资源类型 |
---|---|---|
资源组 | Microsoft.Resources/resourceGroups |
azurerm_resource_group |
Log Analytics 工作区 | Microsoft.OperationalInsights/workspaces |
azurerm_log_analytics_workspace |
Log Analytics 解决方案 | Microsoft.OperationsManagement/solutions |
azurerm_log_analytics_solution |
自动化帐户 | Microsoft.Automation/automationAccounts |
azurerm_automation_account |
Log Analytics 链接服务 | Microsoft.OperationalInsights/workspaces /linkedServices |
azurerm_log_analytics_linked_service |
除了部署上述资源外,该模块还提供与相应策略分配的原生集成,以确保完全符合策略。
有关如何使用此功能的详细信息,请参阅 “部署管理资源 ”wiki 页。
连接资源
该模块提供了一个选项,用于将网络拓扑和连接资源从 Azure 登陆区域的概念体系结构部署到当前订阅上下文中。 它还可以确保将指定的订阅置于正确的管理组中。
此功能支持基于传统 Azure 网络拓扑(中心辐射型)和虚拟 WAN 网络拓扑(Microsoft 管理)的任意组合部署多个中心网络。
该模块还可以创建 DDoS 网络保护并将其链接到虚拟网络,以及管理集中式公共和专用 DNS 区域。
传统 Azure 网络拓扑(中心辐射型)
该模块可以选择性地基于传统 Azure 网络拓扑(中心辐射型)部署一个或多个中心网络。
注意
该模块当前仅为连接订阅配置网络中心和相关资源。 虽然我们提供了用于支持从中心到支路的出站虚拟网络对等互连的选项,但用户仍需启动从中心到分支的对等互连。 这是由于 AzureRM 提供程序如何针对特定的订阅进行部署的限制造成的。
基于传统 Azure 网络拓扑(中心辐射型)部署资源时,该模块会部署并管理以下资源类型(取决于配置):
有关如何使用此功能的详细信息,请参阅“ 部署连接资源 ”wiki 页。
虚拟 WAN 网络拓扑(Microsoft 托管)
该模块可以选择性地基于虚拟 WAN 网络拓扑(Microsoft 管理)部署一个或多个中心网络。
注意
由于虚拟 WAN 网络资源与传统网络资源的功能不同,在使用此功能时,虚拟 WAN 支路的对等互连是双向的。
基于虚拟 WAN 网络拓扑(Microsoft 管理)部署资源时,该模块会部署并管理以下资源类型(取决于配置):
有关如何使用此功能的详细信息,请参阅“部署虚拟 WAN资源 wiki”页。
DDoS 防护计划
该模块可以选择部署 DDoS 网络保护,并根据需要将虚拟网络链接到计划。
注意
由于平台限制,只能为传统虚拟网络启用 DDoS 防护计划。 虚拟中心支持目前不可用。
重要
Azure 登陆区域指南建议启用 DDoS 网络保护来提高对 Azure 平台的保护。 为了防止非生产和 MVP 部署中产生意外成本,此功能在 Azure 登陆区域 Terraform 模块中已禁用,因为此资源会产生相关成本。
对于生产环境,我们强烈建议启用此功能。
启用部署 DDoS 防护计划资源的部署时,该模块会部署并管理以下资源类型(取决于配置):
资源 | Azure 资源类型 | Terraform 资源类型 |
---|---|---|
资源组 | Microsoft.Resources/resourceGroups |
azurerm_resource_group |
DDoS 防护计划 | Microsoft.Network/ddosProtectionPlans |
azurerm_network_ddos_protection_plan |
DNS
该模块可以选择性地部署专用 DNS 区域以支持专用终结点并将其链接到中心和/或支路虚拟网络。 还可以根据需要部署和链接用户指定的公共和专用 DNS 区域。
启用 DNS 资源的部署时,该模块会部署并管理以下资源类型(取决于配置):
资源 | Azure 资源类型 | Terraform 资源类型 |
---|---|---|
资源组 | Microsoft.Resources/resourceGroups |
azurerm_resource_group |
DNS 区域 | Microsoft.Network/dnsZones |
azurerm_dns_zone |
专用 DNS 区域 | Microsoft.Network/privateDnsZones |
azurerm_private_dns_zone |
专用 DNS 区域虚拟网络链接 | Microsoft.Network/privatednszones/virtualnetworklinks |
azurerm_private_dns_zone_virtual_network_link |
标识资源
该模块提供用于配置与标识和访问管理登陆区域相关的策略的选项。 它还可以确保将指定的订阅置于正确的管理组中。
注意
此功能不会部署任何资源。 如果你想要更新与标识管理组相关的策略设置,请使用 configure_identity_resources
输入变量。
有关如何使用此功能的详细信息,请参阅“ 部署标识资源 ”wiki 页。
入门
模块入门的要求记录在 “入门 Wiki”页面上。
为了简化入门,该模块已发布到 Terraform 注册表。 可以直接在代码中引用它,如本文稍后的简单示例中所示。 运行 terraform init
将自动下载模块和所有依赖项。
可以在 Terraform 注册表的“ 依赖项 ”选项卡上查看最新的模块和提供程序依赖项。
重要
某些 Terraform 和 AzureRM 提供程序版本组合存在已知问题。 可以通过升级到最新的 Terraform 和 AzureRM 提供程序版本来解决一些已知问题。 其他已知问题是暂时性错误,通常可以通过重新运行部署来修复这些错误。
通常建议将其固定到特定版本,并在升级前进行彻底的测试。
当需要进行更改时,我们将发布该模块的新版本。 新版本将确保与最新的 Terraform 和 AzureRM 提供程序版本兼容。 有关详细信息,请参阅我们的 模块版本 指南。
若要获取最新功能,请确保将模块版本设置为最新版本。 如果要升级到更高版本的模块,请运行 terraform init -upgrade
。
简单示例
此示例代码从企业级参考体系结构部署建议 的最低管理组和订阅组织 。 启动并运行此简单示例后,就可以开始自定义部署了。
提示
即使 root_parent_id
是模块中的唯一必须变量,但我们也建议设置 root_id
。 更改 root_id
值将启动由模块管理的所有资源的完全重新部署,包括下游依赖项。
以下代码是 main.tf
根模块的简单启动配置:
# Configure Terraform to set the required AzureRM provider
# version and features{} block.
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = ">= 2.77.0"
}
}
}
provider "azurerm" {
features {}
}
# Get the current client configuration from the AzureRM provider.
# This configuration is used to populate the root_parent_id variable with the
# current tenant ID used as the ID for the "Tenant Root Group"
# management group.
data "azurerm_client_config" "core" {}
# Use variables to customize the deployment
variable "root_id" {
type = string
default = "es"
}
variable "root_name" {
type = string
default = "Enterprise-Scale"
}
# Declare the Terraform Module for Cloud Adoption Framework
# Enterprise-scale and provide a base configuration.
module "enterprise_scale" {
source = "Azure/caf-enterprise-scale/azurerm"
version = ">= 1.0.0"
providers = {
azurerm = azurerm
azurerm.connectivity = azurerm
azurerm.management = azurerm
}
root_parent_id = data.azurerm_client_config.core.tenant_id
root_id = var.root_id
root_name = var.root_name
}
后续步骤
用于云采用框架企业规模的 Terraform 模块提供了一个加速的路径,用于构建企业规模登陆区域。 它还可以灵活地扩展和自定义部署,同时利用简化方法来管理每个登陆区域的配置。
若要了解详细信息, 请查看 Terraform 注册表 上的模块,并浏览 GitHub 上的模块文档 。 在文档中,可以找到有关如何自定义部署的更多示例和教程。
了解如何 通过 HashiCorp Learn 部署 Azure 登陆区域 Terraform 模块 。 在那里,你还可以了解该模块的某些部分的工作原理。