开始在Azure上使用Terraform

我已经使用Terraform开始管理Azure资源,目前只完成了创建资源组的部分。

Azure側的準備工作

假设Azure租户和订阅已经创建完成。

创建一个 tfstate 存放位置

如果处理Azure资源,我认为最好处理整个特定资源组,这样更容易理解。在这种情况下,tfstate文件的存储位置应该与该资源组不同。

    1. 创建用于tfstate的资源组

名称使用{项目名称}-tfstate

创建存储账户

名称必须在整个Azure中是唯一的,且最多只能使用24个字符,这让人感到困惑
暂时将其命名为tfstate{随机数字}

创建Blob容器

名称设置为tfstate

2. 创建用于Terraform的服务主体

为了让 Terraform 创建资源,需要授予权限,并准备相应的服务主体。

    1. 创建服务主体

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
广告
将在 10 秒后关闭
bannerAds