Azureで初めてのTerraform(インストールからリソースデプロイ、削除まで)
TerraformとはHashiCorp社が提供するコードを利用してクラウドなどのリソースをデプロイする為のIaC(Infrastructure as Code)ツールになります。
IaCはインフラの構成管理やプロビジョニングをコードを使って自動化するとか言われたりします。
IaCをシンプルに表現すると、設定ファイル作っておくと、コマンド1つでリソース作れて、何度も同じ事をAzure Portalでポチポチしなくても良くなる便利なツール。という感じになります。(省略しまくった表現です。)
初めての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自体のインストールはこちらを参照ください。
Azureリソース操作する為にTerraformで必要な事
TerraformをAzureで利用する場合には認証が必要
TerraformでAzureを扱う場合にはAzureの認証処理が必要になります。
CI/CD等の場合にはサービスプリンシパル等の非対話形式のログイン方法を利用します。
実施手順 | |
Azure CLI(Microsoft アカウント)を使用した認証 |
Azure CLIを使用してコマンドラインで認証します。 az loginコマンドで認証します(対話形式(ログイン画面が表示されてログインする形))。 |
Azure サービス プリンシパルを使用した認証 |
Azureサービスプリンシパルを利用してコードの中で非対話形式(自動ログイン)する形式になります。 |
マネージドID(Managed identities)を使用した認証 |
AzureマネージドIDを利用してコードの中で非対話形式(自動ログイン)する形式になります。 ※テナント内のAzure VMからアクセスする場合にのみ使用可能です。(テナント外の場合はサービスプリンシパルを利用する形になります。) |
AzureマネージドIDを利用した認証はこちらを参照願います。
Azure サービスプリンシパルの作成についてはこちらを参照願います。
Terraformの基本コマンド
Teraformの基本コマンドになります。
最初にinitで初期化した後に、plan、applyを利用してデプロイを実施しています。
最後にterraform destroyで作成したリソースを削除しています。
Terraformのコマンド | |
terraform init |
terraformを実行する為に一番最初に実行するコマンド。 実際に確認するとAzureにデプロイする為に必要となる、terraform-provider-azurerm_v2.46.0_x5.exeというファイルがダウンロードされていました。 |
terraform validate |
Terraformの構文が正しいかのチェックを行います。 |
terraform plan |
Terraformを実行した際に何がデプロイ(変更)されるのかを確認するコマンドになります。 |
terraform apply |
Terraformを利用してリソースをデプロイするコマンドになります。 |
terraform destroy | Terraformを利用してリソースを削除するコマンドになります。 |
※実際の運用上で利用するコマンドは様々あります。今回はオプションを含めて最低限の利用にしております。
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 Blockでrequired_versionとrequired_providersを指定しています。 provider Blockでazurermの情報を指定します。今回は指定してませんが、デプロイするデフォルトリージョンやタグ等の指定を行います。 resource BlockでAzureリソースグループを指定しています。name、locationで設定値を規定しています。
|
|
|
|
Terraformを使ってAzureリソースグループをデプロイ
Terraformを使ってAzureリソースグループをデプロイしてみます。
事前にAzure CLI(az loginコマンド)を使ってログインしておく必要があります。
ログイン後はコマンドを順番に実行するだけです。
※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を使って作成したAzureリソースグループを削除
Terraformを使ってAzureリソースグループを削除してみます。
削除にはterraform destroyを使います。
※削除可能なのはTerraform で管理されているリソースのみになります。
削除手順 | ||
terraform destroyを実行します。 リソースグループのみが削除されますので、1 to destroyとなります。削除確認メッセージが表示されますのでyesと入力します。
|
|
|
Destroy complete! Resources: 1 destroyed.と表示されていれば成功です。 |
最後に
今回はAzureリソースのデプロイにTerraformを初めて使う想定で、Terraformの環境設定、Azureリソースグループのデプロイ、削除と言う基本的なところをやってみました。
実際に使ってみるとTerraform公式サイトでテンプレートも公開されていてAzureリソースの作成が簡単に出来る事が分かります。
事前に変更になるリソースも分かって非常に便利かと思いました。
今後もTerraformを使って色々やってみたいと思います。
VMデプロイ等のTerraform関連の記事はこちらに記載しております。併せて見て頂ければと。