それまでにAzureポータルを介してAzure VMを作成したことがありますか?もしそうなら、それを行うのに何回のクリックが必要でしたか?それを何度も何度も行って、特定の標準を満たすために正確な入力値を提供することができますか?おそらくできません。プロセスを自動化する必要があります。TerraformでAzure VMを作成しましょう!
HashicorpのTerraformは、オンプレミスまたはクラウド上のシンプルから複雑なインフラストラクチャを作成するユーティリティです。Terraformは構成ファイルを読み取り、状態を作成して、インフラストラクチャがその状態で作成され、維持されることを確認する単一のバイナリファイルです。
この記事では、Azure VMを作成することでTerraformの使い方を学びます。このチュートリアルは素晴らしいTerraform Azureの例になります。
前提条件
このチュートリアルに従って進める場合、以下の準備が整っていることを確認してください:
- Azure CLIが既にAzureサブスクリプションに認証済みであること
このチュートリアルでは、macOSでPowerShell Coreを実行していますが、同じ手順はWindows 10でPowerShell Core、Windows PowerShell、またはWindowsコマンドプロンプトを使用して実行することもできます。
Terraformのインストール
まずはじめに、Terraformをダウンロードする必要があります。これには、あなたの好みによりますが、多くの方法があります。このチュートリアルではmacOSを使用しているため、brew install terraform
を実行してHomeBrewを使用できます。また、直接Terraformダウンロードページにアクセスするか、Windowsをお使いの場合はChocolateyを使用することも可能です。
Azure Cloud ShellにはTerraformがプリインストールされていることをご存知でしたか?
Terraformをダウンロードしたら、パスのあるフォルダにコピーし、terraform
を実行します。以下のように使用方法の説明が表示されます。これが表示されたら、次に進む準備が整っています。

Azureへの認証
Terraformはプロバイダを使用して各種のオンプレミスとクラウドベンダーと通信します。この場合、Terraform Azureプロバイダを設定する必要があります。Azure CLIをインストールし、既にAzureに認証済みであることを前提に、まずサービスプリンシパルを作成する必要があります。Terraformはこのサービスプリンシパルを使用して認証し、Azureサブスクリプションへのアクセスを取得します。
サービスプリンシパルの作成
コンソールで、Azure CLIを使用してサービスプリンシパルを作成します。その方法は次のとおりです。
まず、以下のaz account list
コマンドを使用してサブスクリプションIDを見つけます。
サブスクリプションIDを取得したら、サブスクリプションにスコープされたContributorロールを使用してサービスプリンシパルを作成します。
Azure CLIはAzureにアクセスして以下のようにパスワードを持つAzure ADアプリケーションを作成します。上記の$sp
変数に出力を割り当てるため、appId
とpassword
は変数に保存され、後で使用できます。

環境変数を設定します。
Terraformは、Azureに正常に接続するために4つの異なる構成項目を知る必要があります。
- AzureのサブスクリプションID
- サービスプリンシパルのAzure ADアプリケーションID
- サービスプリンシパルのパスワード
- Azure ADテナント
Terraformにこの情報を提供する方法の1つは、環境変数を使用することです。このチュートリアルではPowerShellコンソール内で作業しているため、$env:
を使用してこれらの環境変数を設定できます。TerraformがAzureに接続しようとするときにTerraformが探す各環境変数が表示されます。
az ad sp create-for-rbac
の出力が前もって$sp
変数に保存されているため、プロパティをコピーして貼り付ける代わりに、単純にプロパティを参照できます。
環境変数を定義したら、TerraformはAzureに接続する準備ができです!
構成ファイルを作成します。
すべてのTerraformの設定は通常、1つのフォルダにモジュール名で作成されます。このチュートリアルでは、モジュールを作成するわけではありませんが、同じ方法を続けます。
PowerShellコンソールで、TerraformTestingという名前のフォルダを任意の場所に作成し、そのディレクトリに移動します。
次に、main.tfという構成ファイルを作成します。これは、TerraformでAzure VMを構築するための構成が格納される場所です。これは最も一般的に「メイン」構成ファイルと呼ばれる構成ファイルです。このファイルには、構成が管理するすべてのインフラストラクチャのプロバイダとリソースの宣言が含まれます。
構文(HCL)について詳しく学びたい場合は、Michael Levanと私のNo BS Azure and DevOps eBookにTerraformに関する素晴らしい章があります。
main.tfという新しいファイルを、以下のようにTerraformtestingディレクトリ内に作成してください。
Terraformを初期化する
Terraformは、リソースを作成しようとする際に使用するプロバイダの種類を事前に知る必要があります。これは、作業しているフォルダと同じ場所にこれらのプロバイダをダウンロードするためです。
メインの設定ファイルで定義されているazurerm
リソースプロバイダを実行することで、terraform init
を実行してダウンロードします。これを行うと、以下に似た出力が表示されます。

設定の検証
作成した構成は完璧ではないかもしれません。信じられないでしょうが、Terraformは構成内の構文エラーを検証する必要があります。そのためには、terraform plan
コマンドを実行します。このコマンドはディレクトリ内の構成ファイルを読み込み、エラーを報告します。
インフラストラクチャを実際にプロビジョニングする前に、
terraform plan
が表示するエラーを修正してください!
Azure VMの構築
最後に、Azure VMを実際に構築するためにterraform apply
を実行します。terraform apply
を実行すると、Terraformはディレクトリ内の構成ファイルを読み込み、確認を求めます。”yes”と入力すると、TerraformはAzureに接続し、VMおよび関連するリソースの構築を開始します。

画面下部に明るく輝く緑色のApply complete!
テキストが表示されたら、Terraformはリソースを正常に構築しました!
クリーンアップ
これはデモンストレーション用であり、おそらくこのVMを保持するつもりはないため、自分自身のために行ったすべてを削除してください。
TerraformがAzureに認証するためにサービスプリンシパルを作成しました。以下のaz ad sp delete
コマンドでそれを削除できます。
次に、terraform destroy
を使用して、作成したAzure VMおよび構成ファイル内の他のすべてのリソースを削除します。構成を検証し、実際にterraform destroy
を実行した場合の動作をテストする場合は、terraform plan -destroy
も実行できます。
結論
Terraformは、さまざまな分野でインフラストラクチャを構築するための素晴らしい無料ツールです。HCLの構文を学ぶことがTerraformの中で最も難しい部分ですが、正直なところ、HCLは直感的な言語です。もしもTerraformやARMテンプレートなどのツールを使用しようと考えているのであれば、Terraformを学んでみてください!
Terraformは現在、多くの人々がサポートしており、多くのコミュニティサポートもあります。