🤚

Terraformの最初の使い方をまとめてみた

に公開

はじめに

こんにちは!
この記事では、Terraformを使ってAzure上にリソースを作成する方法を学習していただきたいと思います。本記事は以下の方を対象としています。

  • IaCとは何かを知りたい人
  • Terraformとは何かを知りたい人
  • Terraformを使ってみたい人

IaCとは

IaCを使うメリット

AWSやAzureなどのクラウドサービス上にEC2や仮想マシン(VM)などのリソースを作成する方法はいくつかあります。多くの人が最初にやる方法としては、Azure PortalなどのGUIから作成する方法があります。このやり方であれば、直感的で簡単に操作してリソースを作成できます。しかし、このGUIベースのやり方は次のようなデメリットがあります。

  • 人の手で操作するので、ミスが発生する可能性がある
  • 大量のリソースを作成する場合、時間と手間がかかる
  • 現在のインフラ状態がわかりにくい
  • GUIだと変更できない設定項目がある

そこで、プログラミングのようにコードでリソースの名前やディスク容量、VMなどの性能等を記述して、書いたコードを実行することで自動でリソースを作成するIaC(Infrastructure as Code)が役立ちます。コードからリソースを作成すれば、人為的ミスを減らしたり、一度にたくさんのリソースを同時に作成できます。

Terraformの特徴

IaCの代表的なツールとしてTerraformがあります。Terraformでは、作成したいリソースの完成形の状態をコードで記述します。一度リソースを作成した後も、コードを修正して再度実行すれば、リソースの設定を変更することができます。例としては、VMのサイズを変えたりディスクの容量を増やしたりするなどができます。

Terraformが注目されている理由として、複数のクラウドで使えるというメリットがあります。Azureで使えるARMテンプレートもIaCツールのひとつですが、Azureのみで使うことができ、AWSやGoogle Cloudでは別のIaCツールを使う必要があります。Terraformを使うことで、AWSやAzureなど複数のクラウドのリソースの情報を同じ構文で記述することができます。

Terraformでリソースを作成する手順

Terraformでリソースを作成するには、以下の手順で行います。

  1. Terraformをインストールする
  2. コードを記述する
  3. Terraformのコマンドを実行する

Terraformをインストールする

以下のサイトからインストールできます。
https://developer.hashicorp.com/terraform/install
Mac版やWindows版などがありますが、自分の環境に合わせたものをインストールします。

コードを記述する

Terraformでは拡張子が.tfのtfファイルにリソースの情報などを記述します。
記述する内容によって、ファイルを以下のように分けます(実際には分けずにひとつのファイルにすべて記述してもOK)。そして、記述したファイルを1つのフォルダに入れておきます。

  • main.tf : 主に作成するリソースの情報を記述する
  • variables.tf : 変数を宣言する
  • output.tf : 主にmoduleを使うときに使う(ここでは解説しない)
  • provider.tf : 使うクラウドプロバイダーの情報を記述する

最初のうちは、main.tfにはリソースの情報を書いて、provider.tfには使うクラウドの情報を書くと理解すればOKです。

Azureでリソースグループと仮想ネットワークを作成する

簡単な例として、Azureにリソースグループと仮想ネットワークを作成するコードを書いてみます。

main.tf
# リソースグループ
resource "azurerm_resource_group" "sample_rg" {
  name     = "sample-tf-rg"
  location = "japaneast"
}

# 仮想ネットワーク
resource "azurerm_virtual_network" "sample_vnet" {
  name                = "sample-vnet"
  location            = azurerm_resource_group.sample_rg.location
  resource_group_name = azurerm_resource_group.sample_rg.name
  address_space       = [ "10.110.0.0/17" ]
}
provider.tf
terraform {
  required_version = ">=1.0"
  
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~>4.0"
    }
  }
}

provider "azurerm" {
  # ここに作成先のサブスクリプションIDを入力
  subscription_id = "12345678-aaaa-bbbb-cccc-123456789012"
  
  features {
  
  }
}

各リソースはresourceブロックで宣言します。
resource "リソースの種類" "コード内での名前"と書いて、{}内でリソースグループ名やリージョンなどのパラメータなどを記述します。
例えば、nameはリソース名、locationはリージョン、resource_group_nameは作成先のリソースグループ名です。この3つはほとんどのリソースで記述が必要なパラメータとなっています。
この記事では詳しいコードの書き方は省略しますが、resourceブロックでリソースの種類とパラメータを記述すると覚えておいてください。

terraformブロックとproviderブロックでは、使うクラウドプロバイダーの情報を記述します。ここは基本的にテンプレートとなっていて、Azureを使う場合は、これをコピペして使えば大丈夫です。

Terraformのコマンドを実行する

コードを作成したら、コマンドを実行してリソースを作成しましょう。

事前準備

以下の準備をしておきます。

  • PowerShell 7.X(背景が黒いほう)のインストール
  • Azure CLIのインストール

以下のリンクを参考にインストールをしておいてください。
https://learn.microsoft.com/ja-jp/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.5
https://learn.microsoft.com/ja-jp/cli/azure/install-azure-cli

準備が終わったら以下のコマンドを順番に実行していきます。

コマンドの実行

  • Azure CLIでAzureにログイン(すでにログイン済みなら不要)
az login
  • tfファイルが格納されているフォルダに移動
cd "フォルダ名"
  • Terraformの初期化を実行
terraform init -upgrade

このコマンドは最初だけ実行すればOKです。

  • リソース作成の計画を作成
terraform plan -out main.tfplan

実行後にエラーなどがなければ、リソース一覧の画面が出てきます。ここで作成されるリソースを確認できます。

  • リソース作成の適用
terraform apply main.tfplan

実際にリソースが作成されます。問題なく作成できた場合は、「Apply Completed」と表示されます。

基本的に、init(最初のみ)→plan→applyの順でコマンドを実行することで、リソースを作成できます。
apply時にエラーが出た場合は、再びplan→applyの順でコマンドを実行します(applyだけだとエラーがでる)。

リソースの削除

作業が終わったら、以下のコマンドを順番に実行してリソースを削除します。

  • 削除の計画
terraform plan -destroy -out main.destroy.tfplan
  • 削除の適用
terraform apply main.destroy.tfplan

まとめ

最後までご覧いただきありがとうございます!この記事では以下の内容を紹介しました。

  • IaCとは何か
  • Terraformとは何か
  • Terraformでのコードの書き方
  • Terraformでリソースを作成するコマンド

Terraformの簡単な始め方を紹介しましたが、Terraformを使ってAzure上で仮想マシンを作成するのも簡単にできます。また、コードの書き方を学習することで、条件分岐や複数のリソースをまとめて作成することなどができます。
様々なリソースを作成する方法や、詳しいコードの書き方などは改めて記事にしようと思います。

Discussion