Mac OS にTerraform をインストールしAzure 用の設定をする
今回はMac OS でパブリッククラウドなどのプロビジョニングツール・Terraform のインストール方法からTerraform でAzure リソースをプロビジョニングするための各種準備を行う方法について説明します。

実行環境
Terraform | 1.6.6 |
|---|---|
Azure CLI | 2.50.0 |
前提条件
- Mac PC にHomebrew がインストールされていること
- Azure アカウント、Terraform 用のサブスクリプションがあること
- ローカルPC にAzure CLI がインストールされていること
Terraform とは
Terraform はHashiCorp が提供しているドメイン特化言語のプロビジョニングツールです。設定管理ツールやプロビジョニングツールには汎用言語とドメイン特化言語があり、汎用言語はChef やPulumi のようにプログラミング言語をベースに設定やリソースを定定義し、ドメイン特化言語はYAML ファイルや独自の言語を使って設定やリソースを定義します。Terraform はHCL (Hashicorp Configuration Language) という独自の言語を利用したドメイン特化言語のツールとなります。Terraform はAWS、Azure、GCP などのパブリッククラウドリソースから仮想マシン、コンテナなどのプロビジョニングと幅広い分野で利用できるため、多くの開発者が利用しています。
Terraform はローカルPC などにTerraform をインストールし、コマンド操作を行うことで拡張子・tf ファイルに定義され内容に沿ってリソースのプロビジョニングを行います。ローカルPC 上でのインストールを行いたくない、共同でTerraform を利用したいなどの場合は、クラウド上からTerraform を実行できるマネージドサービス・Terraform Cloud もあります。
Terraform のインストール・アップデート
Mac OS ではHomebrew を利用しTerraform をインストールできるため、Homebrew からTerraform の最新版をインストールします。
# HomebrewからTerraformをインストールする
brew tap hashicorp/tap
brew install hashicorp/tap/terraformTerraform のインストール後、バージョンが最新ではない場合はHomebrew のパッケージを最新バージョンにアップデートし、Terraform の最新版をインストールします。インストール段階で既に最新バージョンであればこの手順はスキップします。
# Homebrewをアップデートする
brew update
Terraformを最新バージョンにアップデートする
brew upgrade hashicorp/tap/terraformTerraform のインストールを確認するため、CLI からterraform コマンドのバージョン確認コマンドを実行します。コマンド実行後、Terraform のバージョンが表示されることを確認します。
# Terraformのバージョンを表示するterraform --versionhogehoge@machost ~ % terraform --versionTerraform v1.6.6on darwin_amd64tfenv などを使い複数のTerraform バージョンをインストールしている場合、terraform コマンドが存在しないエラーが発生することがあります。その場合はbrew link terraform コマンドでterraform コマンドの実行場所を設定すると解消されることがあります。terraform コマンドの配置場所やリンクに問題ない場合は環境変数・PATH が正しく設定されているかを確認します。
Terraform インストール後、タブ補完をしてくれるオートコンプリートパッケージをインストールします。今回はZsh での設定方法とします。
# Terraformのオートコンプリートパッケージをインストールするterraform -install-autocompleteZsh で補完機能の初期設定が行われていない場合は以下コマンドを実行し初期化および有効化をします。
# Zshの補完機能を初期化する
安全でないディレクトリを無視するかどうかを聞かれるため「y」を入力する
autoload -Uz compinit && compinit -ucomplete -C /usr/local/bin/terraform terraformただし、autoload コマンドはシェルを閉じると再度実行が必要なため、.zprofile にこちらのコマンドを追記しシェル起動時に実行されるようにしておくと便利です。
# Autocomplete configurationautoload -Uz compinit && compinit -uパッケージのインストールおよび補完機能の設定後はシェルの再起動を行い、terraform コマンドのタブ補完が行えることを確認します。
hogehoge@machost ~ % terraform <ここでタブを押す>apply get metadata show versionconsole graph output state workspacedestroy import plan taintenv init providers testfmt login push untaintforce-unlock logout refresh validateAzure サブスクリプションID の確認
Terraform の準備完了後、Azure リソースのプロビジョニングを行う準備をします。今回はサブスクリプションに対しTerraform の実行を行うため、事前にAzure CLI でコマンドを実行しサブスクリプションID を取得します。
# Azureアカウントにログインするaz login
Azure サブスクリプションのID を確認する
出力されたサブスクリプションIDを控える
az account show -n [Subscription名] --query "id" -o tsvサービスプリンシパルの作成
Terraform からAzure に接続するにはサービスプリンシパルを作成し、サービスプリンシパルの内容を環境変数として設定します。Subscription_id は先程控えたサブスクリプションID の値を入力します。サービスプリンシパル作成後のappId、password、tenant の値を控えます。
# サービスプリンシパルを作成するaz ad sp create-for-rbac -n TerraformDemo --role="Contributor" --scopes="/subscriptions/[SubscriptionのID]"{ "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "displayName": "TerraformDemo", "password": "-Tf8QQEgtPtpSvzDeoQtlLffeQKIntLD9v8aaC", "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"}今回は環境構築用にContributor の権限を付与していますが、実務などで利用する場合は適切な権限に絞ったロールを与えるようにします。サービスプリンシパル作成後、サービスプリンシパル作成時に控えた値を環境変数として設定します。Zshの場合は「.zprofile」、Bashの場合は「.bash_profile」に登録します。
# Terraform service principal configurationexport ARM_CLIENT_ID="[appIdの値]"export ARM_CLIENT_SECRET="[passwordの値]"export ARM_SUBSCRIPTION_ID=[SubscriptionのID]"export ARM_TENANT_ID="[tennantの値]"設定後、.zprofile を再読込します。
# .zprofileを再読込するsource ~/.zprofile動作確認
環境設定後、TerraformでAzure リソースを作成できるか確認します。
# 動作確認用のディレクトリを作成し移動するmkdir terraform_demo && cd terraform_demoディレクトリ作成後、main.tf を作成し以下内容を記載します。
# Azure Providerを設定するterraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = "> 3.0.2" } }
required_version = ">= 1.1.0"}
provider "azurerm" { features {}}
resource "azurerm_resource_group" "rg" { name = "terraformdemorg" location = "japaneast"}main.tf 作成後、Terraform の構成を初期化します。
# Terraformの構成を初期化するterraform initTerraform 構成の初期化後、構文のフォーマット、構文チェックをします。構文チェックで「Success! The configuration is valid.」と表示されることを確認します。
# Terraformの構文のフォーマットをするterraform fmt
Terraformの構文チェックをする
「Success! The configuration is valid.」と表示されること
terraform validateTerraform の構文チェックで問題なければ、Terraform の構成を適用します。適用時に確認の入力を求められるため、問題なければ「yes」を入力します。
# Terraformの構成を適用する
実行して良いか問われるため、問題なければ「yes」を入力する
terraform apply実行後、Azure リソースを確認します。
# リソースグループを確認する
リソースグループ名・terraformdemorgが表示され、リージョンがjapaneastであること
az group show -n terraformdemorg -o tableTerraform は構成を承認するとterraform.tfstate に状態を書き込みます。Terraform のstate 状態を確認するにはterraform show コマンドで確認できます。状態ファイルはリソースの状態によって変更されるため、Git などでバージョン管理を行う場合は「.gitignore」に「.terraform」「.tfstate」「tfstate.backup」を設定します。
# Terraformの状態を検査するterraform show動作確認後、Terraformで作成したリソースを破棄します。リソースの破棄はterraform destroy コマンドで行います。破棄時に確認の入力を求められるため、問題なければ「yes」を入力します。
# Terraformのリソースを破棄する
実行して良いか問われるため、問題なければ「yes」を入力する
terraform destroyVSCode の拡張機能・Azure Terraform
Visual Studio Code の拡張機能・Azure Terraform を利用すると、Visual Studio Code 上からAzure CloudShell を利用しリモートでTerraform の実行を行うことができます。設定方法については以下ドキュメントを参照してください。
Azure Terraform Visual Studio Code 拡張機能のインストール
まとめ
- Terraform はHashiCorp が提供しているドメイン特化言語のプロビジョニングツール、HCL という独自言語を使って定義する
- Mac OS はHomebrew を使ってTerraform の最新版をインストールできる
- Terraform でAzure リソースを作成するためにはサービスプリンシパルを作成し設定する必要がある
