Azureで初めてのTerraform(インストール、デプロイ、削除)
Azureを対象に、Terraformのインストールからリソースのデプロイおよび削除までの一連の操作手順をまとめました。
-
- WindowsへのTerraformインストール手順
- Terraformの構成ファイルの説明
- Terraformの基本コマンドの説明
- リソースグループを例に、デプロイから削除までの手順の確認
- tfstateファイルの確認方法
※本記事ではWindows 10環境でTerraformの動作を確認しています。
※Terraformのバージョンはv1.5.7を利用しています。
Windows環境にerraformをインストールする手順
Terraformとは?
Terraformとは、HashiCorp社が提供するIaC (Infrastructure as Code) ツールです。
コードを利用してAzureなどのパブリッククラウドのリソースをデプロイすることができます。
AWS、Azure、GCP、OCIなど多くのパブリッククラウドだけでなく、Dockerなど多数のプロバイダーにも対応しています。
Terraformはクラウド版(Terraform Cloud)としても提供されています。
Windows環境でのTerraform インストール手順
Windows環境へTerraformをインストールします。
TerraformインストールディレクトリへのPATHを設定
Terraformはコマンドラインで実行します。
TerraformのインストールディレクトリをPATHに設定します。
インストールディレクトリは、Terraform.exeがあるディレクトリになります。
Azure CLIをインストール
TerraformでAzureリソースを操作するためには、Azureへのサインイン(認証)が必要です。
対話形式で認証を行う場合は、Azure CLIを利用します。
Azure CLIのインストール方法については、こちらで紹介しています。
Visual Studio CodeにTerraformの拡張機能をインストール
Visual Studio Codeでは、Terraformの拡張機能が提供されています。
拡張機能をインストールしておくと、作業がより便利になります。
拡張機能をインストール | |
左側のメニューで拡張機能を選択します。 |
![]() |
Visual Studio Codeのインストール手順は、こちらで紹介しています。
—広告—
Terraformの基本コマンドやファイルの記述方式
Terraformで使う基本コマンド(初期化、計画、デプロイ、削除)
Terraformを使ってリソース操作を行う場合の主な流れは、初期化、デプロイ(構文チェック、計画、デプロイ)、削除になります。
-
- 初期化: initでTerraformを初期化し、必要なプロバイダーやモジュールをダウンロード
- デプロイ: planでリソースのデプロイ計画を確認し、applyでAzureリソースをデプロイ
- 削除: destroyで作成したAzureリソースを削除
基本コマンド | |
terraform init |
Terraform利用開始時に実行するコマンドがinitです。 |
terraform validate |
Terraformの構文チェックを行うコマンドがvalidateです。 ※terraform planでも構文エラーがあればエラーが表示されます。 |
terraform plan |
リソースのデプロイ計画を確認するコマンドがplanです。 |
terraform apply |
リソースデプロイを実行するコマンドがapplyです。 リソースブロックで指定した設定内容に基づいてリソースを作成・変更・削除します。 terraform applyの実行時には、自動的に計画が表示され、ユーザーが内容を確認したうえで実行することになります。 terraform applyを実行した際は、planの処理が実行されます。 |
terraform destroy | ソース削除を実行するコマンドがdestroyです。 リソースブロックで管理しているリソースを削除します。 terraform destroyを実行すると、削除計画(plan)が表示され、実行前に内容を確認できます。 削除はユーザーの確認後に行われます。 |
※実際の運用では様々なコマンドやオプションが利用されます。今回は基本的な利用方法に絞り、最低限必要なコマンドと主なオプションのみを利用しています。
tfファイルの記述方式(HCL形式)
Terraformでデプロイするリソースの情報は.tfファイルに記載します。
独自DSLであるHCL形式(HashiCorp Configuration Language=HashiCorp構成言語)にて記述します。
各設定はBlock(ブロック)単位で定義されます。
-
- Block Type:そのブロックが何を表すかを指定
- Block Labels:ブロックの追加情報(名前やタイプ)を指定
- Arguments:ブロック内で設定するパラメータや値を記述
各プロバイダーごとにリソースの作成方法が定義されています。
Azureであれば、Azure Providerに詳細なリソース定義方法が記載されています。
リソースグループの作成方法についても、Azure Providerのドキュメントに記載があります。
リソースの記述例 | |
Block typeがresourceとなっています。 |
|
—広告—
Terraformを使ってリソースグループをデプロイ
T最低限必要なブロック構成
最低限必要なTerraformのブロック構成は3つに分けられます。
Azureリソースグループを例にすると、このような形になります。
-
- Terraform Block
- Terraform自体の動作を指定するブロック
- Terraformのバージョンや必要なプロバイダーのバージョンなどを記載
- Provider Block
- 使用するプロバイダーを指定
- 今回の場合はAzureプロバイダー(azurerm)を指定
- Resource Block
- 作成するリソースを定義
- 今回の場合はリソースグループ名やリージョンなどを定義
- Terraform Block
リソースグループをデプロイするためのTerraform構成ファイル
リソースグループをデプロイする場合の構成ファイル例です。
今回は、すべての設定を1つのファイルにまとめて記載しています。
terraform block reference
Provider Configuration
Resource Blocks
Azureのリソース設定については、こちらを参照しています。
ファイルの拡張子は.tfとします。
Terraformは、コマンドを実行するディレクトリ内の拡張子が.tfのファイルをすべて読み込んで実行します。
今回は、C:\Program Files\Terraform-1_5_7配下にtestというディレクトリを作成し、その中にファイル名をrg.tfとして保管しています。
※Terraformで管理する作業ディレクトリは、terraform.exeの保管場所とは関係なく任意で指定可能です。
※今回はazurermプロバイダーのバージョンを3.74にしています。プロバイダーのバージョンは対象となるリソースや要件に合わせて指定します。
Azureのリソースを操作する場合のプロバイダーはazurerm
TerraformでAzureのリソースを操作する場合は、azurermプロバイダーを利用します。
最新バージョンはHashiCorp社の公式サイトで確認できます。
※最新バージョンを使用するとエラーが発生する場合もあるようです。プロバイダーのバージョンは適宜指定するしたほうが良さそうです。
最新バージョン | |
最新バージョンはHashiCorp社の公式サイトに記載されています。 ※version = “>=3.74.0″と記載すると、3.74.0以上のバージョンが適用されます。 |
![]() |
Terraformを使ってAzureリソースを操作する場合の認証方法
Terraformを使ってAzureリソースを操作する場合、Azureテナントへのサインイン(認証)が必要です。
サインイン(認証)には、対話形式と非対話形式があります。
-
- 対話形式:ログイン画面を表示して認証を行う方法
- 非対話形式:ログイン画面を表示せず、自動的に認証を行う方法
CI/CDなどの場合には、サービスプリンシパルなどを利用した非対話形式の認証方法を利用します。
認証方法 | |
対話形式 |
Azure CLIを使用してコマンドラインで認証します。 |
非対話形式 |
Azureサービスプリンシパルを利用して、コード内で認証を行います。 |
非対話形式 マネージドIDを使用した認証方法 |
AzureマネージドIDを利用して、コード内で認証を行います。 ※マネージドIDは、テナント内のリソース(仮想マシン(Azure VM)など)からアクセスする場合にのみ使用できます。テナント外からアクセスする場合はサービスプリンシパルを利用します。 |
マネージドIDを利用して認証する方法は、こちらで紹介しています。
Azure サービスプリンシパルの作成手順については、こちらで紹介しています。
Terraformの初期化からリソースデプロイまでの手順
Terraformを使ってリソースグループをデプロイします。
事前にAzure CLI(az loginコマンド)を使ってAzureテナントへサインイン(認証)しておく必要があります。
サインイン(認証)後は、Terraformのコマンドを順番に実行します。
※az group listと入力してリソースグループの一覧が表示されれば、Azure CLIによるログインが完了しています。
実施手順 | ||
Terraform initを実行します。
|
|
|
Terraform has been successfully initialized!と表示されていれば成功です。 |
||
Terraform関連のファイルがダウンロードされています。 |
||
terraform planを実行します。 実行計画が表示され、作成・変更・削除されるリソースを確認できます。 |
|
|
terraform applyでリソースを作成します。確認メッセージが表示されるので、yesと入力します。 |
|
|
デプロイが完了すると、Apply complete! Resources: 1 added, 0 changed, 0 destroyed.と表示されます。 |
||
リソースグループが作成されていることが確認できます。 | ![]() |
作成、削除、変更されるリソースはデプロイ前に確認できる
Terraform planやapply実行時に、変更内容に関するメッセージが表示されます。
-
- to add:追加されるリソース
- to change:変更されるリソース
- to destroy:削除されるリソース
事前に変更内容を確認できるので、意図しないリソースの削除などを防ぐことができます。
tfstateファイルとは何?
デプロイ後はxxx.tfstateというファイルが生成されます。
Terraform実行ディレクトリ内(今回の場合はC:\Program Files\Terraform-1_5_7\test)に作成されます。
Terraformが管理しているリソースの状態を表すファイルです。
ファイルを確認すると、JSON形式で記述されていることがわかります。
Terraformはこのファイルをもとにリソースの状態を認識し、リソースの操作を行います。
他の作業者が別の環境から更新した場合など、実際のリソースとtfstateファイルの内容に差分が発生することがあります。
複数の環境からTerraformでリソース管理を行う場合は、差分が発生しないようにtfstateファイルを共有する必要があります。
実運用環境では、tfstateファイルは共有ディレクトリやリモートバックエンド(例:Azure Blob Storageなど)に保管するようにします。
※デフォルトではterraform.tfstateというファイル名になります。
※リソースの差分は、Terraform以外でリソースを操作した場合にも発生します。
tfstateファイルを確認 | |
tfstateファイルが生成されています。 |
|
tfstateファイルにリソース情報が記載されていることがわかります。 |
tfstateファイルなどは、ストレージアカウントなどの共有ディレクトリやリモートバックエンド(例:Azure Blob Storageなど)に保管して運用することが推奨されています。
tfstateファイルをストレージアカウントに保管する手順については、こちらで紹介しています。
既存のリソース情報をtfstateファイルに反映させるためには、importコマンドを利用します。
Terraform importコマンドの利用手順については、こちらで紹介しています。
terraform apply -refresh-onlyを利用したterraform.tfstateの更新手順については、こちらで紹介しています。
destroyコマンドでリソースを削除
Terraformを使って作成したリソースグループを削除します。
削除にはterraform destroyコマンドを使用します。
※削除可能なリソースは、Terraformで管理されているリソース(tfstateに存在するリソース)のみです。
※Terraformで管理されているリソースの依存関係にあるリソースは注意が必要です。関連するリソースが同時に削除される場合があります。
削除確認 | ||
terraform destroyを実行します。
|
|
|
Destroy complete! Resources: 1 destroyed.と表示されていればリソースの削除完了です。 |
—広告—
最後に
Azureのリソースグループを例に、初めてTerraformを使うための手順を簡単にまとめてみましました。
インストールなどの環境設定からデプロイ、削除といった基本的な手順を整理しています。
Terraformの公式サイトでもテンプレートも公開されており、それらを活用しながらAzureリソースの作成が可能です。
リソースの変更内容を事前に確認できる点も、操作ミスを防ぐうえで便利だと感じました。
引き続き、いろいろ試してみたいと思います。
Terraformを利用して仮想マシン(Azure VM)手順については、こちらで紹介しています。