Azureで初めてのTerraform(インストール、デプロイ、削除)
Azureを対象にTerraformのインストールからリソースのデプロイから削除までの一連の操作手順について纏めてみました。
-
- WindowsへのTerraformインストール
- Terraformの構成ファイル説明
- Terraformの基本コマンドの説明
- リソースグループを例にデプロイから削除までの一連の手順を確認
- tfstateファイルの確認
※Windows10を利用しています。Terraformはv1.5.7を利用しています。
Terraform関連で実施した内容はこちらに纏めています。
併せて見て頂けると幸いです。
※2023年9月に加筆修正しています。Terraformのバージョンも新しくしています。
WindowsにTerraformをインストール
Terraformとは?
TerraformとはHashiCorp社が提供するIaC(Infrastructure as Code)ツールになります。
コードを利用してAzureなどのパブリッククラウドのリソースをデプロイする事が出来ます。
AWS、Azure、GCP、OCI多くのパブリッククラウドだけではなくDockerなど多くのプロバイダーに対応しています。
Terraformはクラウド版としても提供されています。
Terraformをダウンロードしてインストール
Window10端末へTerraformをインストールします。
※Terraformにはクラウド版もあります。
TerraformのPATH設定
Terraformはコマンドラインで実行します。
TerraformインストールディレクトリへのPATH設定します。
Azure CLIをインストール
Terraformを使ってAzureリソース操作を行う為にはAzureへのサインイン(認証)が必要です。
対話形式での認証を行う場合はAzure CLIを利用します。
Azure CLIのインストールについてはこちらを参照願います。
Visual Studio CodeでTerraformのファイルを扱う
Visual Studio Code(VSCode)ではTerraformの拡張機能が提供されています。
拡張機能をインストールしておくと作業が便利になります。
拡張機能追加 | |
左側のメニューで拡張機能を選択します。 |
Visual Studio Code(VSCode)自体のインストールはこちらを参照ください。
—–
Terraformの基本コマンドやファイルの記述方式
基本コマンド(初期化、計画、デプロイ、削除)
Teraformを使ってリソース操作する場合の大きな流れは、初期化、デプロイ(構文チェック、計画、デプロイ)、削除になります。
- 初期化:initでTerraform初期化して必要なモジュールをダウンロード
- デプロイ:planでリソースデプロイ計画確認、applyでAzureリソースをデプロイ
- 削除:destroyで作成したAzureリソースを削除
基本コマンド | |
terraform init |
Terraform利用開始時に実行するコマンドです。 |
terraform validate |
Terraformの構文チェックのコマンドです。 |
terraform plan |
リソースデプロイ計画確認コマンドです。 |
terraform apply |
Terraformのリソースデプロイ実行コマンドです。 リソースブロックに指定した設定内容に基づきリソースをデプロイします。 リソースデプロイ前にterraform planも実行されます。 |
terraform destroy | Terraformのリソース削除コマンドです。 リソースブロックに指定した設定内容に基づきリソースを削除します。 リソース削除前にterraform planも実行されます。 |
※実際の運用上で利用するコマンドは様々あります。今回はオプションを含めて最低限の利用にしております。
tfファイルの記述方式(HCL形式)
Terraformでデプロイするリソースの情報はtfファイルに記載します。
独自 DSL である HCL 形式(HashiCorp Configuration Language=HashiCorp 構成言語)にて記載します。
Block単位で定義します。
-
-
- Block Type:そのブロックが何を指すのかと言う意味
- Block Labels:ブロックの定義
- Arguments:定義された値
-
各プロバイダー単位でリソースの作成方法は定義されています。
Azureの場合はAzure Providerに記載されています。
リソースグループの場合に関する書き方についても記載があります。
リソースの記述例 | |
Block typeがresourceとなっています。 |
|
—–
Terraformを使ってリソースグループをデプロイ
必要なブロック構成について
最低限必要なTerraform ブロック構成は3つに分けられます。
Azureリソースグループを例に記載します。
-
- Terraform Block
- Terraform自体の動作を指定するブロックです
- Terraform自体で使用するバージョン等を記載します
- Provider Block
- 使用するプロバイダーを指定します
- 今回の場合はAzureを指定しています。
- Resource Block
- 実際に作成するリソースを定義します
- 今回の場合はリソースグループ名やリージョン等を定義します
- Terraform Block
リソースグループデプロイ用のTerraform構成ファイル
リソースグループをデプロイする場合の構成ファイルです。
今回は1つのファイルにすべて纏めています。
ファイルの拡張子は.tfとします。
Terraformはコマンド実行ディレクトリの拡張子が.tfのファイルを読み込んで実行します。
今回はC:\Program Files\Terraform-1_5_7配下にtestというディレクトリを作成して保管しています。
ファイル名はrg.tfとしています。
※Terraformの管理ディレクトリはterraform.exeの保管先と関係なく任意で指定可能です。
※今回はazurermのバージョンを3.74にしています。バージョンは対象のリソースに合わせて指定します。
プロバイダーはazurerm
TerraformでAzureのリソースを操作する場合はazurermのプロバイダー利用します、
最新バージョンはHashiCorp社のサイトで確認出来ます。
※最新バージョンだとエラーになるケースもあるので適時バージョンは指定するようにします。
最新バージョン | |
最新バージョンはHashiCorp社のサイトに記載があります。 ※version = “>=3.74.0″と記載すると指定のバージョン以上が適用されます。 |
Azureテナントへサインイン(認証)
Terraformを使ってAzureリソースを操作する場合、Azureテナントへのサインイン(認証)が必要です。
サインイン(認証)には対話形式と非対話形式があります。
-
- 対話形式ログイン画面を表示してログインする
- 非対話形式:ログイン画面を表示せず自動ログインする
CI/CD等の場合にはサービスプリンシパル等の非対話形式のログイン方法を利用します。
認証方法 | |
対話形式 |
Azure CLIを使用してコマンドラインで認証します。 |
非対話形式 |
Azureサービスプリンシパルを利用してコードの中で認証します。 |
非対話形式 マネージドID(Managed identities)を使用したサインイン(認証) |
AzureマネージドIDを利用してコードの中でします。 ※テナント内リソース(仮想マシン(Azure VM)等)からアクセスする場合にのみ使用可能です。テナント外の場合はサービスプリンシパルを利用します。 |
AzureマネージドIDを利用した認証はこちらを参照願います。
Azure サービスプリンシパルの作成についてはこちらを参照願います。
初期化からリソースデプロイまで
Terraformを使ってリソースグループをデプロイします。
事前にAzure CLI(az loginコマンド)を使ってAzureテナントへサインインておく必要があります。
ログイン後はコマンドを順番に実行するだけです。
※az group listと入力してリソースグループの一覧が表示されればAzure CLIを使ってログインが完了しています。
※マネージドIDを使って認証を行う方法はこちらを参照ください。
実施手順 | ||
terraform initを実行します。
|
|
|
Terraform has been successfully initialized!と表示されていれば成功です。 |
||
Terraform関連のファイルがダウンロードされています。 |
||
terraform planを実行します。 実行計画が表示されます。 作成されるリソースが確認出来ます。 |
|
|
terraform applyでリソースを作成します。 確認メッセージ(Enter a value:)が表示されます。 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はこのファイルをリソースの状態と認識してリソースの操作を行います。
他の方が更新した場合など実環境のリソースの最新情報と実際の情報に差分が発生したりという事になります。
複数環境からTerraformを使ったリソース管理を行う場合は差分が発生しないようにtfstateファイルを共有する必要があります。
実運用環境ではtfstateファイルは共有ディレクトリなどに保管するようにします。
※デフォルトではterraform.tfstateというファイル名になります。
※リソースの差分はTerraform以外でリソース操作した場合にも発生します。
tfstateファイル | |
tfasteファイルが生成されています。 |
|
ファイルの内容を確認するとリソース情報が確認出来ます。 |
tfstateファイル等はストレージアカウント等共有ディレクトリにファイルを置いて実施する事が推奨されています。
ストレージアカウントへの保管についてはこちらで試しています。
既存のリソース情報をtfstateファイルに反映させるためにはimportコマンドを利用します。
terraform apply -refresh-onlyを利用したterraform.tfstateの更新はこちらに纏めています。
destroyコマンドでリソースグループを削除
Terraformを使ってリソースグループを削除します。
削除はterraform destroyを使います。
※削除可能なリソースはTerraform で管理されているリソース(tfstateに存在するリソース)のみになります。
削除確認 | ||
terraform destroyを実行します。tfファイルに記載のリソースが削除対象となります。
|
|
|
Destroy complete! Resources: 1 destroyed.と表示されていれば成功です。 |
最後に
Terraformを初めて使う想定でAzureのリソースグループを例に手順を確認纏めてみました。
インストールなどの環境設定からデプロイ、削除と言う基本的なところの手順を纏めています。
Terraform公式サイトでテンプレートも公開されており、活用しながらAzureリソースの作成できます。
リソース変更内容が事前に確認出来る点も操作ミスを防ぐ意味でも良いなと思います。
今後もTerraformを使って色々やってみたいと思います。
Azure VM仮想マシンのデプロイや変数の利用と言ったTerraform関連の記事はこちらに記載しております。
その他にやっているTerraform関連の記事はこちらを参照願います。