Azureで初めてのTerraform(インストールからリソースデプロイ、削除まで)
TerraformとはHashiCorp社が提供するコードを利用してクラウドなどのリソースをデプロイする為のIaC(Infrastructure as Code)ツールになります。
IaCをざっくり一言で表現すると、”事前に設定ファイル作っておくと、コマンド1つでパブリッククラウドやSaaSのリソースが何度でも作れて同じ事をしなくても良くなる便利ツール。”という感じになります。
今回は初めてのTerraformと言う事でインストールからTerraformを利用したAzureリソースのデプロイから削除までを実際にやってみました。
Terraform の理解を目的にしていますので、Azureリソースは一番シンプルなリソースグループを例に実施しています。
操作端末はWindows10を利用しています。
今回の作業にあたっては、こちらのサイトを参考に実施しております。
Azure 上の Terraform のドキュメント(MS社公式)
Azure Provider(HashiCorp)
※今回はすべてのファイルをローカルにおいて作業しております。
tfstateファイル等はストレージアカウント等共有ディレクトリにファイルを置いて実施する事が推奨されています。ストレージアカウントへの保管についてはこちらで試しています。
※今回はTerraform v0.15.3で実施しています。
その他にもAzure+Terraformを使った構成で色々試してみてます。併せて見て頂けると幸いです。
TerraformをWindows10へインストール
Window10でTerraformを使ってみます。
Terraformをダウンロードしてパスを通す、Azure CLIのインストール等が必要になります。
Terraformをダウンロードしてインストール
Window10端末へのインストールですが、exeファイルのダウンロード、OSでのパス設定と簡単に出来ました。
※Terraformにはクラウド版もあります。
WindowsでTerraformへのパスを設定
Terraformはコマンドラインで実行します。
Terraformのコマンドを認識させる為に、Windows OS上でTerraformインストールディレクトリへのパス設定を行います。
これでTerraform本体のインストールは完了です。
Azure CLIをインストール
Terraformを使ってAzureリソース操作を行う為にはAzureへのサインイン(認証)が必要になります。
今回は対話形式でのAzureの認証を行います。
対話形式での認証はAzure CLIで行いますので事前にインストールします。
Azure CLIのインストールについてはこちらを参照願います。
Visual Studio CodeでTerraformのファイルを扱う
Visual Studio CodeにTerraformの拡張機能があります。
拡張機能をインストールしておくと作業が便利になります。
拡張機能追加 | |
Visual Studio Codeの拡張機能で検索欄にTerraformと入力します。HashiCorp TerraformとAzure Terraformをインストールします。 |
![]() |
Visual Studio自体のインストールはこちらを参照ください。
Terraformを使ってAzureリソース操作する為の事前準備
Terraformを使ってAzureリソースを操作する場合はサインイン(認証)が必要
Terraformを使ってAzureリソースを操作する場合にはAzureテナントへのサインイン(認証)が必要になります。
サインイン(認証)には対話形式と非対話形式があります。
CI/CD等の場合にはサービスプリンシパル等の非対話形式のログイン方法を利用します。
認証方法 | |
Azure CLI(Microsoft アカウント)を使用したサインイン(認証) |
Azure CLIを使用してコマンドラインで認証します。 |
Azure サービス プリンシパルを使用したサインイン(認証) |
Azureサービスプリンシパルを利用してコードの中で非対話形式(自動ログイン)する形式になります。 |
マネージドID(Managed identities)を使用したサインイン(認証) |
AzureマネージドIDを利用してコードの中で非対話形式(自動ログイン)する形式になります。 ※テナント内のAzure VMからアクセスする場合にのみ使用可能です。(テナント外の場合はサービスプリンシパルを利用する形になります。) |
AzureマネージドIDを利用した認証はこちらを参照願います。
Azure サービスプリンシパルの作成についてはこちらを参照願います。
Terraformの基本コマンド
Teraformの基本コマンドを使った大まかな流れは、初期化、デプロイ、削除になります。
最初にinitでTerraform初期化(必要なモジュールをダウンロード)します。
Terraform初期化後にplan、applyを利用してAzureリソースをデプロイします。
最後にdestroyで作成したAzureリソースを削除します。
基本コマンド | |
terraform init |
Terraform利用時、一番最初に実行するコマンドです。 ※確認するとterraform-provider-azurerm_v2.46.0_x5.exeというファイルがダウンロードされていました。 |
terraform validate |
Terraformの構文チェックのコマンドです。 |
terraform plan |
Terraformのリソースデプロイ確認コマンドです。 |
terraform apply |
Terraformのリソースデプロイ実行コマンドです。 リソースブロックに指定した設定内容に基づきリソースをデプロイします。 リソースデプロイ前にterraform planも実行されます。 |
terraform destroy | Terraformのリソース削除コマンドです。 リソースブロックに指定した設定内容に基づきリソースを削除します。 リソース削除前にterraform planも実行されます。 |
※実際の運用上で利用するコマンドは様々あります。今回はオプションを含めて最低限の利用にしております。
Terraformの記述方式
独自 DSL である HCL 形式(HashiCorp Configuration Language=HashiCorp 構成言語)にて記載されます。
Blockと言うかたまりで定義されます。ざっくり言うとこんな感じかなぁと思っています。
-
-
- Block Type:そのブロックが何を指すのかと言う意味
- Block Labels:ブロックの定義
- Arguments:定義された値
-
リソースグループの例 | |
Azure リソースグループの例です。 Block typeがresourceと言う事で作成するリソースを定義するブロックであることを示しています。 |
|
※Terraformで扱えるAzureのリソースの書き方についてはAzure Provider(HashiCorp)にて定義されています。
Terraformを使ってAzureリソースグループをデプロイ
Terraformファイルで必要なブロックの構成について
最低限必要なTerraform ブロック構成を記載するとこのような感じになります。
今回はAzureリソースグループを例に記載します。
-
- Terraform Block:Terraform自体の動作を指定するブロックになります。Terraform自体が使用しているバージョン等を記載します。
- Provider Block:使用するプロバイダーを指定します。今回の場合はAzureを指定しています。
- Resource Block:実際に作成するリソースを記載します。
Azure リソースグループを作成用の構成ファイル
Azureリソースグループをデプロイする場合の構成ファイルです。
今回は1つのファイルにすべて纏めています。
Terraformで利用するファイルの拡張子は.tfになります。。
Terraformはコマンド実行ディレクトリの拡張子が.tfであるファイルを読み込んで実行します。
今回はC:\Temp\terraform配下に保管します。
Terraform コマンドもC:\Temp\terraformで実行しています。
TerraformでAzureのリソースを扱う場合のプロバイダー(required_providers)はazurermになります。
azurermの最新バージョン等は公式サイトを確認します。
リソースグループの例 | ||
terraform Blockでrequired_versionとrequired_providersを指定します。 provider Blockでazurermの情報を指定します。 resource Blockでデプロイすリソースを規定します。
|
|
|
|
Terraformを使ってAzureリソースグループをデプロイ
Terraformを使ってAzureリソースグループをデプロイします。
事前にAzure CLI(az loginコマンド)を使ってAzureテナントへサインインておく必要があります。
ログイン後はコマンドを順番に実行するだけです。
※az group listと入力してリソースグループの一覧が表示されればAzure CLIを使ってログインが完了しています。
※マネージドIDを使って認証を行う方法はこちらを参照ください。
実施手順 | ||
terraform initを実行します。
|
|
|
Terraform has been successfully initialized!と表示されていれば成功です。 |
||
terraform planを実行します。 実行計画が表示されます。 ここで作成されるリソースが確認出来ます。 |
|
|
terraform applyでリソースを作成します。 確認メッセージが表示されますのでyesを入力します。 |
|
|
Enter a value: という確認メッセージが表示されます。作成を継続する場合はyesと入力します。(”Y”等ではなく、yesと入力する必要があります。) Apply complete! Resources: 1 added, 0 changed, 0 destroyed.と表示され、リソース作成が成功して事がメッセージから分かります。 |
||
Azure Portalで作成後のリソース確認すると出来ている事が分かります。 |
Terraform Plan(Apply)実行時に作成、削除、変更されるリソースが分かる
Terraform PlanやApply実行時に変更内容に関するメッセージが表示されます。
-
- to add:追加されるリソース
- to change:変更されるリソース
- to destroy:削除されるリソース
事前に変更内容を確認出来るので意図しないリソース削除とか防ぐ事が出来ます。
Terraformを使ってデプロイしたら.tfstateというファイルが出来てました
デプロイが完了するとxxx.tfstateと言うファイルが出来ています。これは何でしょうか。
一言でいうとTerraformが管理しているリソースの状態を表すファイルになります。
実際に中身を確認すると、ARMテンプレートと同じようなJSON形式のファイルが出来ています。
![]() |
Terraformはこのファイルをリソースの状態と認識してデプロイの操作等を行います。
他の方がTerraformを使って更新されたりして最新化されていないものを参照した場合は、実環境のリソースの最新情報と実際の情報に差分が発生したりという事になります。
これがtfstateファイルの保管には共有ディレクトリを使ってねと言われる理由の1つになってたりします。
Terraformを使った仮想マシンのデプロイも併せて見て頂けると大変有難いです。
Terraformを使って作成したAzureリソースグループを削除
Terraformを使ってAzureリソースグループを削除します。
削除にはterraform destroyを使います。
※削除可能なのはTerraform で管理されているリソースのみになります。
削除手順 | ||
terraform destroyを実行します。 リソースグループのみが削除されますので、1 to destroyとなります。削除確認メッセージが表示されますのでyesと入力します。
|
|
|
Destroy complete! Resources: 1 destroyed.と表示されていれば成功です。 |
最後に
今回はAzureリソースのデプロイにTerraformを初めて使う想定で、Terraformの環境設定、Azureリソースグループのデプロイ、削除と言う基本的なところをやってみました。
実際に使ってみるとTerraform公式サイトでテンプレートも公開されていてAzureリソースの作成が簡単に出来る事が分かります。
事前に変更になるリソースも分かって非常に便利かと思いました。
今後もTerraformを使って色々やってみたいと思います。
Azure VM仮想マシンのデプロイや変数の利用と言ったTerraform関連の記事はこちらに記載しております。
併せて見て頂けると大変有難いです。