5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Terraform で Azure VM を構築してみた! ~はじめての IaC 入門(前半)~

Posted at

1.はじめに

普段は基礎をしっかり学んでから実践するタイプですが、今回は「まず手を動かしてみる」を優先します。

きっかけは社内の若手の方の一言です。

「実際に手を動かしてみることが、理解を深める近道ですよね」

この言葉を聞いて、自分も挑戦してみることにしました。

今回挑戦するのは、苦手意識のある IaC(Infrastructure as Code)。
中でも Terraform は名前を聞いたことがある程度で、実際に触るのは今回が初めてです。

この記事は、これから IaC に触れてみたい方と一緒に理解を深めながら手を動かすスタイルで進めます。

使用する環境は Windows + PowerShell、最終的なゴールは Azure VM 1台の作成とシンプルです。

1-1.記事で学べること(前半・後半)

本記事は前半・後半の2部構成です。

前半

  • Terraform のインストールと環境準備方法(Windows + PowerShell)
  • 構成ファイル(provider.tf / main.tf)の作成方法
  • リソースグループ作成までの基本操作(terraform init / terraform plan / terraform apply

後半

  • 構成ファイル(variables.tf / terraform.tfvars)を活用したコード整理
  • 段階的なリソース追加によるコード差分の理解
  • Azure VM を含む関連リソース作成までの基本操作

本記事は 2025年11月時点の環境をもとに作成しています。

Terraform や Azure のアップデートにより、一部の手順や挙動が変更される場合があります。その場合は適宜読み替えてご活用ください。

2.事前準備

「まず手を動かしてみる」ことが大切ですが、作業をスムーズに進めたり、他者へ説明や共有しやすくするためにも最低限の事前準備をしておきます。
ここでは、「Azure VM を Terraform で作成する」ための全体構成イメージや実行環境、作成ステップを簡単に整理します。

2-1.全体構成イメージ

今回は、以前の記事で紹介した基本的な構成を実際に Terraform を使って作成してみます。
Resource Group、Managed Disk といった作成に必要なリソースも含めています。

本記事での呼び名
(サービス名称)
リソース名 SKU・サイズ
(スペック)
アドレス範囲 機能
1 Resource Group rg-terraform - - Azure リソースをまとめる単位
2 VNet
(Azure Virtual Network)
vnet-terraform - 192.168.1.0/24(192.168.1.0 ~ 192.168.1.255) ネットワーク全体の枠組み
3 Subnet snet-terraform - 192.168.1.0/25(192.168.1.0 ~ 192.168.1.127) VNet を細かく区切ったエリア
4 VM
(Azure Virtual Machine)
vm-terraform Standard_B2s(2 vCPU・4GB メモリ) - サービスを動かす仮想マシン
5 NIC
(Network Interface Card)
nic-vm-terraform - 192.168.1.4/32(192.168.1.4) VM に割り当てるネットワーク情報
6 Disk
(Managed Disk)
disk-vm-terraform Standard_SSD_LRS(128 GiB) - VM に割り当てるディスク情報
7 NSG
(Azure Network Security Group)
nsg-terraform - - 通信の通過を制御
8 NAT Gateway
(Azure NAT Gateway)
natgw-terraform - - VM がインターネットに出ていくための出口

全体構成イメージを簡単に示すと、以下のような構成図になります。

001.png

補足:Subnet のアドレス範囲の考え方

今回の構成では、Subnet のアドレス範囲(サブネットサイズ)に特に制限はありません。
自由に設定できますが、リソースによっては最小サイズや条件がある場合があります。

必要に応じて、公式ドキュメントや推奨値を確認してみると安心です。

2-2.実行環境

今回の実行環境は以下の通りです。

項目 内容
PC ・OS:Windows 11
・Terraform(バージョン:1.13.5
・Azure CLI(バージョン:2.79.0
・Azure RM(バージョン:4.x
Azure 無償利用の環境(Azure 無料アカウント)
・無償のサブスクリプション

補足:シンプルさを重視し、(Visual Studio Code)などのエディタは使用せず、コマンドライン環境(今回は PowerShell)だけで操作します。

実行環境の情報を全体構成イメージに反映しました。
この全体構成イメージ通りに構築(=Azure VM 1台の作成)を進めていきます。

002.png

2-3.作成ステップ

次のステップで進めていきます。

前半

後半

  • 6.Terraform 構成ファイル(追加分)の作成
  • 7.VNet・Subnet の作成
  • 8.Azure VM を含む残リソースの作成

3.実行環境の準備

Terraform を使って Azure VM を作成するにあたり、まずは実行環境(PC)を準備します。
ここからは、実際に手を動かしていきます。

なお、Azure サブスクリプションは事前に作成済みである前提です。
現在の構成イメージは以下の通りで、赤枠で示した設定を順に進めていきます。

003.png

3-1.Terraform のインストール

まずは、Terraform をインストールします。

1.公式サイト(URL)にアクセスし、「Operating Systems」>「Windows」>「AMD64」の「Download」ボタンをクリックし、ZIP ファイル(以降、ZIP)をダウンロードします。1

004.png

2.ZIP を展開したファイルを格納するフォルダを作成します。(例:C:\Program Files\Terraform2

3.ZIP を展開したファイルをそのまま「3」で作成したフォルダにドラッグ&ドロップします。3

005.png

3-2.環境変数 PATH の追加

Terraform をプログラム名だけで実行できるように、環境変数 PATH に Terraform のパスを追加します。「PATH ってなに?」と思った方は、こちらの方の記事が参考になります。

1.「スタートメニュー」>「システム環境変数の編集」と検索し、「システム環境変数の編集」をクリックします。

  

2.「システムのプロパティ」の画面右下の「環境変数(N)…」をクリックします。

3.「<ユーザー名>のユーザー環境変数(U)」欄から「Path」を選択して「編集(E)…」をクリックします。4

4.「新規(N)」をクリックし、Terraform を配置したパス(例:C:\Program Files\Terraform)を追加します。

5.「OK」をクリックし、設定を保存します。(「3」環境変数および「2」システムのプロパティの画面が開いた状態のため、同様に「OK」で設定を保存)

6.設定した環境変数 PATH が正しく反映されているか確認します。
PowerShell を開き、以下のコマンドを実行して Terraform のバージョンが表示されれば、プログラム名だけで Terraform を実行できる状態です。5

PS C:\Users\<ユーザー名>> terraform -v
Terraform v1.13.5
on windows_amd64

3-3.作業用フォルダの準備

Terraform で作業を行うには、作業用フォルダが必ず必要です。
Terraform でリソースを作ったり管理したりするのに必要なファイルをまとめて格納します。

1.デスクトップ上2に任意の名前の作業用フォルダを作成します(例:Terraform_Test)。

006.png

2.PowerShell で以下のコマンドを実行し、作業用フォルダに正しく移動できていることを確認します。

PS C:\Users\<ユーザー名>> cd C:\Users\<ユーザー名>\Desktop\Terraform_Test

PS C:\Users\<ユーザー名>\Desktop\Terraform_Test>

3-4.Azure CLI のインストール

Terraform で Azure リソースを操作するために、Azure CLI をインストールしておくと便利です。6
公式サイト(URL)からダウンロードしてインストールできます。

1.PowerShell から直接インストールする場合は、以下のコマンドを実行します。

PS C:\Users\<ユーザー名>> $ProgressPreference = 'SilentlyContinue'; Invoke-WebRequest -Uri https://aka.ms/installazurecliwindowsx64 -OutFile .\AzureCLI.msi; Start-Process msiexec.exe -Wait -ArgumentList '/I AzureCLI.msi /quiet'; Remove-Item .\AzureCLI.msi

2.インストール後、PowerShell で以下のコマンドを実行し、バージョン情報が表示されれば Azure CLI が利用できる状態です。

PS C:\Users\<ユーザー名>> az version
{
  "azure-cli": "2.79.0",
  "azure-cli-core": "2.79.0",
  "azure-cli-telemetry": "1.1.0",
  "extensions": {}
}

3-5.Azure へのサインイン

Terraform で Azure リソースを操作するには、事前に Azure へのサインインが必要です。
ここでいう「サインイン」とは、Terraform を実行する環境(PC)が Azure 上でユーザーとして識別(認証)され、必要な操作権限(認可)を持つ状態になることを指します。

「認証・認可ってなに?」と思った方は、こちらの記事をご覧ください。

1.既にアカウントや環境にサインインしていた場合、誤ってリソースを操作する可能性があります。安全のため、以下のコマンドでサインアウト処理を行います。

PS C:\Users\<ユーザー名>> az logout

2.PowerShell を開き、以下のコマンドを実行します。

PS C:\Users\<ユーザー名>> az login

3.コマンド実行後、自動でブラウザが開きます。対象のアカウントを選択して「続行」をクリックします。

4.ブラウザでサインイン後、PowerShell に以下のメッセージが表示された場合は、何も変更せず Enter キーを押します。

Select a subscription and tenant (Type a number or Enter for no changes):

5.(オプション)複数のサブスクリプションを使用している場合は、以下のコマンドで対象のサブスクリプションを指定します。

PS C:\Users\<ユーザー名>> az account set --subscription "サブスクリプション ID"

6.現在有効なサブスクリプションを確認するには、以下のコマンドを実行します。

PS C:\Users\<ユーザー名>> az account show
{
  "environmentName": "AzureCloud",
  "homeTenantId": "xx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "id": "xx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", #サブスクリプション ID
  "isDefault": true,
  "managedByTenants": [],
  "name": "xxxxxxxxxx", #サブスクリプション名
  "state": "Enabled",
  "tenantDefaultDomain": "xxx.onmicrosoft.com",
  "tenantDisplayName": "既定のディレクトリ",
  "tenantId": "xx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "user": {
    "name": "xxx@xxx.com",
    "type": "user"
  }
}

4.Terraform 構成ファイルの作成

Terraform で Azure リソースを作成する前に、まずはどのようなファイルで構成されるのかを整理します。

4-1.基本構成

Terraform では、主に次のファイル(.tf.tfvars)を使って環境を定義します。

作業用フォルダ(例:Terraform_Test
├── provider.tf
├── main.tf
├── variables.tf
├── outputs.tf
└── terraform.tfvars

4-2.各ファイルの役割

Terraform の構成ファイルにはそれぞれ役割があり、分けて管理することで、後から見直したりチームで編集したりする際の可読性やメンテナンス性が向上します。

ファイル名 主な役割 補足ポイント
provider.tf Terraform が Azure と通信するための設定を定義 使用するプロバイダー(クラウドサービス)の指定やバージョン、認証情報を記述します。
main.tf Azure 上にデプロイするリソース情報を定義 Azure リソースの定義を記述します。
variables.tf main.tf 内で利用する変数を宣言 変数名・型・説明をまとめて記述します。
outputs.tf 作成したリソース情報を出力 作成したリソースの状態や属性(例:ID、IP アドレスなど)を出力します。
terraform.tfvars 宣言した変数に値を割り当て 変数に対する具体的な値を記述します。

4-3.空ファイルを作成する

3-3」で作成したフォルダに移動し、Terraform 用のファイルを空の状態で作成します。

前半の記事では、Resource Group 作成の最小構成として provider.tfmain.tf の2ファイルのみを使用(作成)します。その他ファイル(variables.tf や terraform.tfvars など)は、リソースが増えたり構成が複雑になった場合に必要となるため、後半の記事で扱います。

PS C:\Users\<ユーザー名>> cd C:\Users\<ユーザー名>\Desktop\Terraform_Test

PS C:\Users\<ユーザー名>\Desktop\Terraform_Test> ni provider.tf -ItemType File
PS C:\Users\<ユーザー名>\Desktop\Terraform_Test> ni main.tf -ItemType File

現在の作業用フォルダの例:

作業用フォルダ(例:Terraform_Test
├── provider.tf
├── main.tf

5.Resource Group の作成

まずは Terraform を使って Azure 上に Resource Group を作成します。

リソースを一度に全部作ると構造が複雑になり理解が追いつきにくいため、今回は段階的に追加していきます。こうすることで、Terraform の操作を少しずつ体感しながら、理解を確実に積み重ねられます。

5-1.provider.tf の編集

1.Terraform が Azure と通信できるように、使用するプロバイダーを設定します。
このサンプルコードはほぼ固定のテンプレートとして覚えておきます。

# --- Terraform 全体で使用するプロバイダーを宣言 ---
terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~>4.0"
    }
  }
}
# --- ここまで ---

# --- Azure への接続設定を定義 ---
provider "azurerm" {
  features {}
  subscription_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
# --- ここまで ---
記述箇所 内容 補足ポイント
terraform ブロック Terraform 全体で使用するプロバイダーを宣言 Terraform がどのクラウドプロバイダーを使うかを指定します。
azurerm =:Azure 用のプロバイダー名(固定)
source = "hashicorp/azurerm":HashiCorp 公式配布の Azure RM プロバイダーを利用する指定
version = "~> 4.0":4.x 系の最新版の Azure RM プロバイダーを使用する指定
provider "azurerm" ブロック Azure への接続設定を定義 Terraform が Azure にアクセスするための設定です。7
features {}:AzureRM プロバイダーでは必須の空ブロック(固定)
subscription_id = "":接続先のサブスクリプション ID を指定

provider.tf 内でプロバイダーのバージョンや認証情報を指定することで、自身の Azure 環境に対して操作を指示できるようになります。
現在の構成イメージは以下の通りです。

007.png

2.サンプルコードのsubscription_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"を今回の Azure 環境に合わせて次のように修正します。

# --- Terraform 全体で使用するプロバイダーを宣言 ---
terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~>4.0"
    }
  }
}
# --- ここまで ---

# --- Azure への接続設定を定義 ---
provider "azurerm" {
  features {}
  subscription_id = "12345678-test-test-test-test12345678"
}
# --- ここまで ---

subscription_id = """" の中には、自身がリソースを作成するサブスクリプションの ID を指定します。
(参考:Azure サブスクリプションを検索する

3.「4-3」で作成した provider.tf を右クリックし、「メモ帳で編集」を選択します。コピーしたコードを貼り付けて、保存します。

008.png

5-2.main.tf の編集

5-2-1.ベースコードの入手方法

Terraform で各リソース(今回は Resource Group)を定義する際は、公式リファレンスサイト(Terraform Registry) からベースコードを確認します。

以下の手順で確認します。

1.画面左上の検索欄に作成したい Azure リソース名を入力します(例:Resource Group)。

009.png

2.「Base」>「Resources」>「azurerm_resource_group」をクリックします。

3.「Example Usage」の欄の「Copy」をクリックします。

010.png

以下は、公式リファレンスのサンプルコードです。

resource "azurerm_resource_group" "example" {
  name     = "example"
  location = "West Europe"
}

5-2-2.コードの書き換え

1.サンプルコードのリソース名やリージョンなどを今回の Azure 環境に合わせて次のように修正します。

resource "azurerm_resource_group" "rg_main" {
  name     = "rg-terraform"
  location = "japaneast"
}
記述箇所 内容 補足ポイント
resource "azurerm_resource_group" "rg_main" Azure 上に Resource Group を作成するリソース定義 azurerm_resource_group:リソースタイプ(固定)
"rg_main":Terraform 内での識別名(同一構成内で一意となる名称を指定)
name 作成する Resource Group 名 Azure Portal で入力していた「Resource Group 名」に相当
location 配置するリージョン名 Azure Portal で選択していた「リージョン名(例:japaneast)」に相当

2.「4-3」で作成した main.tf を右クリックし、「メモ帳で編集」を選択します。コピーしたコードを貼り付けて、保存します。

011.png

5-3.リソースを作成してみる

ここまでで Terraform の構成ファイル(provider.tfmain.tf)が準備できました。

いよいよ、Terraform コマンドを使って実際に Azure に Resource Group を作成します。
現在の構成イメージは以下の通りで、赤枠で示した設定を進めていきます。

012.png

Terraform では、基本的に以下の3ステップで作成が完了します。

STEP コマンド 主な機能
STEP① terraform init
(初期化)
作業フォルダを Terraform 用に準備します。必要なプロバイダーやプラグインをダウンロードし、Terraform の実行環境を整えます。
STEP② terraform plan
(計画)
構成ファイル(.tf)を解析し、Terraform がどのリソースを作成・変更・削除するかを確認します。まだクラウド上には変更は加えられません。
STEP③ terraform apply
(適用)
terraform plan の内容をもとに、クラウド上のリソースを作成・変更・削除します。確認プロンプトが表示されるので、実行前に内容をチェックできます。

STEP①.terraform init(初期化)

1.作業フォルダ内で Terraform を使えるように、以下のコマンド(terraform init)を実行します。

PS C:\Users\<ユーザー名>\Desktop\Terraform_Test> terraform init

2.実行結果の最後に次のようなメッセージが表示されれば成功です。

Terraform has been successfully initialized!

補足:terraform init 後に自動生成されるファイル/フォルダ

terraform init を実行すると、作業フォルダに以下のファイルやフォルダが自動生成されます。この2つは Terraform が内部で管理するため、手動編集する必要はありません。

名称 種別 主な役割 補足ポイント
.terraform フォルダ 使用するプロバイダーやモジュールのキャッシュを格納 Terraform が内部的に管理するフォルダで、手動での編集は不要です。
.terraform.lock.hcl ファイル プロバイダーのバージョンを固定して環境の再現性を保つ Terraform が自動生成・管理するファイルで、チームで同じバージョンを利用する際に重要です。

現在の作業用フォルダの例:

作業用フォルダ(例:Terraform_Test
├── provider.tf
├── main.tf
├── .terraform
└── .terraform.lock.hcl

STEP②.terraform plan(計画)

1.構成ファイルの内容をもとに、Terraform がどのリソースを作成・変更・削除するかを確認するため、以下のコマンド(terraform plan)を実行します。

PS C:\Users\<ユーザー名>\Desktop\Terraform_Test> terraform plan

2.実行結果の最後に次のようなメッセージが表示されれば成功です。

Plan: 1 to add, 0 to change, 0 to destroy.

STEP③.terraform apply(適用)

1.terraform plan で確認した内容をもとに、実際に Azure 上にリソースを作成するため、以下のコマンド(terraform apply)を実行します。

PS C:\Users\<ユーザー名>\Desktop\Terraform_Test> terraform apply

2.実行すると次のような確認メッセージが表示されます。

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value:

3.yes と入力して Enter キーを押すと、Terraform が Azure にアクセスしてリソースを作成します。完了すると次のようなメッセージが表示されます。

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

補足:terraform apply 後に自動生成されるファイル/フォルダ

terraform apply を実行すると、作業フォルダに以下のファイルが自動で生成されます。
手動編集は、原則行いません。

ファイル 種別 主な役割 補足ポイント
terraform.tfstate ファイル リソースの状態情報を管理 このファイルをもとに Terraform は既存リソースの差分を検出し、作成・変更・削除を判断します。

現在の作業用フォルダの例:

作業用フォルダ(例:Terraform_Test
├── provider.tf
├── main.tf
├── .terraform
└── .terraform.lock.hcl
└── .terraform.tfstate

5-4.リソースを確認してみる

Azure Portal にアクセスして、リソースが正しく作成されたか確認します。

1.Azure Portal にアクセスし、サインインします。

2.サインイン後、ホーム画面の検索欄で「リソース グループ」と入力して検索するか、Azure サービス内に「リソース グループ」のアイコンがあればクリックします。

013.png

3.指定した「リソース グループ」が存在することを確認します。

014.png

前半記事で構築した最終構成イメージは以下の通りです。

015.png

おわりに(前半の部)

ここまでで、Terraform を使った Azure 環境構築の基本的な流れを一通り体験できました。

Terraform のインストールから環境準備(Windows + PowerShell)、構成ファイル(provider.tf / main.tf)の作成、そしてコマンド操作(terraform init / terraform plan / terraform apply)による Resource Group の作成までを実践しました。

Terraform を使った Azure リソース作成の感覚や手順の流れが掴めたと思います。

後半の記事(絶賛執筆中)では、variables.tfterraform.tfvars を活用し、より実務に近い形でコードを整理しながら、「Azure VM 1台の作成」をゴールに進めます。

皆さん、快適な Azure ライフを!

We Are Hiring!

  1. 386(32 ビット版)と AMD64(64 ビット版)の2種類があります。ほとんどの現代 PC は 64 ビット環境なので、通常は AMD64 をご選択ください。

  2. ファイル格納用または作業用フォルダの場所は基本的に自由ですが、次の点にご注意ください。
    - パスにスペースや日本語など特殊文字が多い場所はトラブルの原因になることがある。 2

  3. PC の再起動は不要です。

  4. ユーザー環境変数は、現在ログイン中のユーザーのみが対象です。Terraform をそのユーザーだけで使用する場合は、ユーザー環境変数を編集します。全ユーザーで利用する場合は、システム環境変数をご編集ください(管理者権限が必要です)。

  5. PC の再起動は不要です。既に開いているコマンドライン環境(PowerShell)は古い環境変数のままですが、新しく開けば変更が反映されます。

  6. Terraform では Azure への認証情報が必要です。今回の Windows + PowerShell 環境では、Azure CLI(ユーザー情報)を利用して az login で認証済みの状態を Terraform で利用します。サービスプリンシパルやマネージド ID 情報を使うことで、Azure CLI を使わずに認証することも可能です。

  7. このブロックを通じて、Azure CLI でサインイン済みの資格情報を自動的に利用します(Azure CLI でサインインしていない場合は、明示的に認証情報を指定)。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?