はじめに
最近のAzureプロジェクトでTerraformを使った実装を行う機会が増え、私自身Terraformを触ったことがなかったため入門程度ですが触ってみました。
感想としては「めちゃくちゃ楽しい!」「GUIで触れないとCUIは触れないと思っていたけど、CUIの方が明示的に関連性などを指定しないとエラーとなるため勉強になる」が率直な感想です。特に後者は経験の浅いメンバーには、まずAzureポータル上でとアドバイスしてましたが、ある程度触ったら即Terraformに移行してもいいなと思いました。
そんな私ですが、まずは入門ということでTerraform経由でAzure上にリソース作成ができるところまで触りました。ですので変数などはまだ触っておりません。
また以下Udemyの講座を用いて学習しました。こちらは簡単なWebアプリをTerraformを用いて実装していく内容となりますが、初心者の私でも大変分かりやすく学習できたため、非常におすすめです!
https://www.udemy.com/course/hashicorp-terraform-azure-devops-iac/?couponCode=ST21MT30625G2
本ブログでは、Terraformの基本の基本を触った際にメモ書きした内容をまとめようと思います。
概要
実行環境セットアップ(Mac)
- iTerm:Terminal(Macの標準アプリ)に代わるコマンドラインツール。TerminalはMacに標準で入っているシンプルなターミナルであることに対して、iTermは開発者向けの高機能ターミナルアプリになります。今回はiTermよりterraformコマンドを実行し、Azure環境を構築しました。
- Homebrew:macOS(またはLinux)用のパッケージマネージャーです。Homebrewを使うことにより、macOSに初期から入っていないPython、Node.jsといったパッケージやGoogle Chrome、SlackやZoomといったアプリケーションをインストールすることができます。
- brew(コマンド):Homebrewの操作インターフェースになります。
環境構築
Terraform関連
- サービスプリンシパル(アカウント)
- TerraformはAzure上でVMやネットワークなどのリソースをAPI経由で作成・変更します。
- そのAPIを呼び出すには、誰が操作しているか(認証)と、何ができるか(権限)が必要です。
- サービスプリンシパルは、Terraform用の「アプリケーション実行ユーザ」のようなもので、必要な権限だけを割り当てられ、安全に自動操作できます。
"az login"との違い
"az login"は人が使う一時ログイン、サービスプリンシパルはツールが使う自動実行用アカウント。Terraformなどの自動化用途ではサービスプリンシパルを使うのがベストプラクティスです。
- クライアントシークレットパスワード
- サービスプリンシパルがAzureにログインするためのパスワード
- 作成直後のみ表示され、それ以降は二度と表示されません。分からなくなった場合はサービスプリンシパルの再発行が必要となる。(Azureは平文でパスワードを保存しない設計になっており、漏洩リスクを最小限に抑えるため)
- TerraformやCLIなどの非対話的ログインに利用
- 必ず安全な場所に保存することが推奨されている(例:Key Vaultなど)
- プロバイダ(provider.tf)
- このTerraformでAzureを触ると定義する必要があり、それを記載するのが
provider.tf
。 - https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs
- このTerraformでAzureを触ると定義する必要があり、それを記載するのが
- azコマンド
- Azureを操作するためのコマンドラインインターフェース(CLI)です。これにより、Webポータルを使わずにAzureのサービスを作成・更新・削除・管理できます。
terraformコマンド
- fmt
- Terraformコードをフォーマットする
- 簡単に言うと、コードを綺麗に整えること
- init
- プロジェクトの初期設定、プロバイダのダウンロード(初期化)
- 新しいバージョンのダウンロードが必要な時、新しいプロジェクトディレクトリに移動した時などに都度実施が必要
- plan
- コマンド実行前に何が変更されるかを確認できる(計画)
- apply
- 実際にリソースを作成・更新・削除する(適用)
- destroy
- 作成したリソースをすべて削除する(破棄)
- tfenv
- Terraformのバージョンを簡単に管理・切り替えできるCLI ツールです。Terraformはプロジェクトによってバージョンの互換性が重要なため、
tfenv
を使えば複数バージョンを共存させ、簡単に切り替えることができます。
- Terraformのバージョンを簡単に管理・切り替えできるCLI ツールです。Terraformはプロジェクトによってバージョンの互換性が重要なため、
Azure関連
- ALBの仕様で1つのALBルールに対して複数のバックエンドアドレスプールを割り当てる可能性があるため、Terraform側もリスト型で受け付ける必要がある。(1件の場合でも)
- 例:
backend_address_pool_ids = [ azurerm_lb_backend_address_pool.lb_backend_pool.id ]
- 例:
- locals.tf
- 変数一覧
- Registry(Azure)
- Azureのリソース作成を進めるにあたり、コマンド定義がまとめられたマニュアル。コピペして中身を書き換えれば、リソース作成においてはほぼなんでもできちゃいます。
- https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs