开始在Azure上使用Terraform
我已经使用Terraform开始管理Azure资源,目前只完成了创建资源组的部分。
Azure側的準備工作
假设Azure租户和订阅已经创建完成。
创建一个 tfstate 存放位置
如果处理Azure资源,我认为最好处理整个特定资源组,这样更容易理解。在这种情况下,tfstate文件的存储位置应该与该资源组不同。
-
- 创建用于tfstate的资源组
名称使用{项目名称}-tfstate
创建存储账户
名称必须在整个Azure中是唯一的,且最多只能使用24个字符,这让人感到困惑
暂时将其命名为tfstate{随机数字}
创建Blob容器
名称设置为tfstate
2. 创建用于Terraform的服务主体
为了让 Terraform 创建资源,需要授予权限,并准备相应的服务主体。
-
- 创建服务主体
Microsoft Entra ID > 注册应用程序
名称设定为 {项目名称}-terraform
创建客户端密码
(1.创建的应用程序) > 证书和密码 > 客户端密码
保存创建的客户端密码
授予协作者角色
订阅 > 访问控制 (IAM) > 添加 > 添加分配的角色
指定协作者角色,并指定成员为先前创建的应用程序 (服务主体)
写Terraform代码并应用
Terraform 代码
variable "project_name" {
type = string
}
variable "region" {
type = string
}
variable "azure" {
type = object({
tenant_id = string
subscription_id = string
service_principal = object({
client_id = string
client_secret = string
})
})
}
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~>2.0"
}
}
backend "azurerm" {}
}
provider "azurerm" {
features {}
tenant_id = var.azure.tenant_id
subscription_id = var.azure.subscription_id
client_id = var.azure.service_principal.client_id
client_secret = var.azure.service_principal.client_secret
}
resource "azurerm_resource_group" "rg" {
name = var.project_name
location = var.region
}
resource_group_name = "my-project-tfstate"
storage_account_name = "tfstate01234567"
container_name = "tfstate"
key = "production.tfstate"
project_name = "my-project-production"
region = "japaneast"
azure = {
tenant_id = "..."
subscription_id = "..."
service_principal = {
client_id = "..."
client_secret = "..."
}
}
执行Terraform命令
$ terraform init -backend-config=production.tfbackend
$ terraform plan -var-file=production.tfvars
$ terraform apply -var-file=production.tfvars
$ terraform destroy -var-file=production.tfvars
仅提供一种中文的翻译选项:
请查阅资料
-
- Azure に対して Terraform を認証する | Microsoft Learn
- リソースにアクセスできる Microsoft Entra アプリケーションとサービス プリンシパルを作成する | Microsoft Learn