【Azure】进行Terraform的初始设置和创建虚拟网络

首先

1-1 你好。

初次见面,我叫井村。
我对基础设施自动化很感兴趣,所以开始学习Terraform。
通过阅读官方文档和前辈们的文章,我了解到有许多不同的写法。

本篇文章的目的如下所示。

    • 初期セットアップのエビデンス(基本的には1度だけなので、忘れないようにです。)

 

    今の知識をとりあえずまとめたい

1-2 目标读者

    • Azureに興味がある

 

    Terrafromに興味がある

1-3 运行环境

我們將使用 Windows 10 作為執行環境。需要在這台設備上安裝 Azure CLI、Terraform 和 Visual Studio Code。
※請確認您已經事先建立了 Azure 帳戶。

1-4 个项目产出

我们将在Azure上创建一个虚拟网络。

2. 准备搞定翻译任务

将在Terraform执行环境中的设备上进行环境配置。

设置 Azure CLI 2.1

为了从终端连接到Azure,我们需要建立Azure CLI的设置。

从Windows的2-1-1位置下载Azure CLI安装程序。

启动 2-1-2 安装程序,安装 Azure CLI。

打开命令提示符并运行”az”命令,确认命令列表被显示出来。

cmd-az.png

2-2 Terraform的安装配置

为了在终端上执行Terraform,我们需要进行Terraform的设置。

下载Terraform的执行文件的方法是2-2-1。

将“terraform.exe”存储在任意文件夹中(这次存储在“C:\terraform”目录下)。

terraform-exe.png

將上述路徑(本次為 “C:\terraform”)新增至2-2-3環境變數。
※修改環境變數方法為按下「Win」+「R」鍵同時按下 → 輸入「sysdm.cpl」 → 從系統內的屬性處進行調整。

打開命令提示符窗口,并执行命令”terraform -v”,确保版本信息被显示出来。

terraform-v.png

2-3 设定 Visual Studio Code

为了防止Terraform中的编写错误,设置好Visual Studio Code。

从Visual Studio Code下载执行文件。

运行 2-3-2 安装程序,进行安装。

从2-3-3扩展中安装”Azure Terraform”(概述:安装Azure Terraform Visual Studio Code扩展)。

创建2-4个服务负责人。

我可以在个人用户账户上进行操作,但我将创建一个专用于Terraform的服务主体账户。
※服务主体是一个包含身份验证凭据和权限分配的账户。

打开2-4-1命令提示符,运行“az login”,使用个人用户登录。成功登录后,将登录信息的输出进行备忘,”id”: “AAAAAAAA-AAA-AAAA-AAAA-AAAAAAAA”。

# 以下が出力値の例です。
[
  {
    "cloudName": "AzureCloud",
    "homeTenantId": "********-****-****-****-*********",
    "id": "AAAAAAAA-AAA-AAAA-AAAA-AAAAAAAA",
    "isDefault": true,
    "managedByTenants": [],
    "name": "*******",
    "state": "Enabled",
    "tenantId": "****************************",
    "user": {
      "name": "**********@*****",
      "type": "user"
    }
  }
]

使用以下的命令来创建服务主体。请使用之前记录的id,并将输出值记录下来。
–角色贡献者将成为协作者的权限。
–范围”~”是服务主体的权限范围。这次是订阅。
–“app-terra”是服务主体的名称(可选)。

# 以下が実行コマンドの例です。
az ad sp create-for-rbac --role Contributor --scopes "/subscriptions/AAAAAAAA-AAA-AAAA-AAAA-AAAAAAAA" --name "app-terra"

# 以下が出力値の例です。
{
  "appId": "BBBBBB-BBBB-BBB-BBB-BBBBBBBB",
  "displayName": "app-terra",
  "password": "CCCCCCCCCCCCCCCCCCCCCCCCCCC",
  "tenant": "DDDDDDD-DDD-DDDD-DDDD-DDDDDDDD"
}

为了确认,我们将使用服务主体登录到Azure。请使用此前记下的id。
-u 是您的用户帐户。
-p 是您的密码。
-t 是您的租户。

# 以下が実行コマンドの例です。
az login --service-principal -u BBBBBB-BBBB-BBB-BBB-BBBBBBBB -p CCCCCCCCCCCCCCCCCCCCCCCCCCC -t DDDDDDD-DDD-DDDD-DDDD-DDDDDDDD

3. 创建tf文件

tf文件是Terraform使用的文件。文件结构在这里是一个很大的问题。每个人都有自己的方式,不一样呢。
这次我尽量理解并采用了简单的结构。我会按照Azure服务来分割文件。
另外,这次的tf文件我在桌面上创建了一个名为” Terraform “的文件夹,并将其存储其中。

创建3-1 「probider.tf」

「probider.tf」中记录了Terraform的版本、使用Terraform与Azure、以及服务主体的验证信息。
将上述所记录的各种信息粘贴到“Terraform 供应商块”中来指定服务主体的凭据。

# probider.tf
terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "=3.0.0"
    }
  }
}

provider "azurerm" {
  features {}
  subscription_id = "AAAAAAAA-AAA-AAAA-AAAA-AAAAAAAA"
  tenant_id       = "DDDDDDD-DDD-DDDD-DDDD-DDDDDDDD"
  client_id       = "BBBBBB-BBBB-BBB-BBB-BBBBBBBB"
  client_secret   = "CCCCCCCCCCCCCCCCCCCCCCCCCCC"
}

创建 “locals.tf” 文件。

「locals.tf」文件用于记录变量信息。通过使用变量,可以简化Terraform的管理。

# locals.tf
locals {
  # ロケーション
  location = "japaneast"

  # リソースグループ名
  rg_name = "rg-terra"

  # 仮想ネットワーク名
  vnet_name = "vnet-terra"

  # パブリックサブネット名
  snet_name_pub = "snet-terra-pub"

  # プライベートサブネット名
  snet_name_pri = "snet-terra-pri"
}

3-3 创建「rg.tf」。

在这里,「rg.tf」是用于创建资源组的文件。
作为参考,这里的”name”是从「locals.tf」中获取”rg_name”(位置也是相同的)。

# rg.tf
resource "azurerm_resource_group" "rg" {
  name     = local.rg_name
  location = local.location
}

创建3-4个名为「network.tf」的文件。

「network.tf」是一个用于创建虚拟网络和子网的文件。
在这里,我们以 “name” 作为参考来源自 “locals.tf”。
那么,接下来我们如何获取资源组的名称呢?正确答案是不是 “locals.tf” 而是 “rg.tf”。
在创建 Azure 虚拟网络之前,需要先创建资源组。因此,从 “locals.tf” 获取它将失去优势。同样的道理,在子网中我们也不会从 “locals.tf” 获取虚拟网络名称。

# network.tf
resource "azurerm_virtual_network" "vnet" {
  name                = local.vnet_name
  location            = azurerm_resource_group.rg.location
  resource_group_name = azurerm_resource_group.rg.name
  address_space       = ["10.0.0.0/16"]
}

resource "azurerm_subnet" "public" {
  name                 = local.snet_name_pub
  resource_group_name  = azurerm_resource_group.rg.name
  virtual_network_name = azurerm_virtual_network.vnet.name
  address_prefixes     = ["10.0.1.0/24"]
}

resource "azurerm_subnet" "private" {
  name                 = local.snet_name_pri
  resource_group_name  = azurerm_resource_group.rg.name
  virtual_network_name = azurerm_virtual_network.vnet.name
  address_prefixes     = ["10.0.2.0/24"]
}

执行Terraform

那么,让我们执行以下命令吧。

# Terraformフォルダへ移動
cd C:\Users\"ユーザ名"\Desktop\terraform

# tfファイルの存在確認
dir /b

# terraformの初期化
terraform init

# tfファイルの記述および実行後のAzureサービス成果物の確認
terraform plan

# Terraformの実行
terraform apply

Enter a value:yes

请务必在Azure门户上确认一下!

5. 最后

在最后,非常感谢您读完本文。
在黄金周的闲暇时间,我尝试了一下Terraform,以提升身心健康。然后我意识到有很多事情需要去做,需要去理解。处理权限、编写其他Azure服务的描述以及考虑生产环境和测试环境的问题将是我近期要解决的挑战。

6. 参考文献。

Windows での Azure CLI のインストール

Download Terraform

Download Visual Studio Code

概要: Azure Terraform Visual Studio Code 拡張機能をインストールする

az ad sp

Terraform プロバイダー ブロックでサービス プリンシパルの資格情報を指定する

Terraform公式ドキュメント Azure Provider

Terraform公式ドキュメント リソースグループ

Terraform公式ドキュメント 仮想ネットワーク

Terraform公式ドキュメント サブネット

Terraform公式ドキュメント 変数

bannerAds