【Terraform】モジュールを用いた同構成リソースの複数構築

システムを作る中で冗長性を上げるために同構成の仮想マシンを2つ作る、といったことはよくあると思いますが、同じものを何度も手動で作り上げるのは大変です。
また、IaCで構築する際も、同じ内容のものをいくつも書いていると、コードが冗長になったり、パラメータに修正があったときに何か所も変更しなければなりません。
そのため、今回はモジュール化を用いて同構成のリソースを簡単に複製する方法について紹介します。モジュールを使うことで、コードの冗長化を防ぎ、パラメータの修正も1か所するだけで済むようになります。

フォルダ構成

実行するプログラムをmainフォルダに、呼び出し先のプログラムをmoduleフォルダに分け、mainプログラムからmoduleプログラムを呼び出すような構成にします。
こうすることで、実行部分(main)と細かいパラメータの実装部分(module)を分けて管理することができ、コードが見やすく保守性も高まります。

root
|
|__main
|   |___main.tf
|
|__module
|   |___module.tf
|   |___module2.tf

module

まずはmoduleファイルについてです。moduleファイルでは通常通りresourceブロックを作成し、パラメータを埋め込んでいきます。その中でリソースごとに変更したいパラメータ(リソース名など)は変数化しておきます。

resource "azurerm_virtual_machine" "vm" {
  name                  = var.vm_name #リソースごとに名前を変えたいので変数化しておく
  location              = "japan east"
  vm_size               = "Standard_B1ls" 
....
  tags = {
    Name = var.vm_name 
  }
}

variable "vm_name"{} #変数定義

moduleファイル内では複数サービスを定義することができ、同時に呼び出すことができます。VMを作成する際はnicが必要になるので、同ファイルに定義する、といったことができます。

#nic
resource "azurerm_network_interface" "nic" {
  name                = var.nic_name
  location            = "japan east"
...
}

#vm
resource "azurerm_virtual_machine" "vm" {
  name                  = var.vm_name #リソースごとに名前を変えたいので変数化しておく
  location              = "japan east"
  vm_size               = "Standard_B1ls" 
....
  tags = {
    Name = var.vm_name 
  }
}

variable "nic_name"{} #変数定義
variable "vm_name"{} 

モジュールの呼び出し(main.tf)

モジュールを作成できたらあとは呼び出すだけです。ここではソースとなるファイルを指定し、変数化していた部分にパラメータを定義します。

module "vm1"{
source = "../module/module.tf" #ソースファイル呼び出し
nic_name = "nic1" #事前定義していた変数に値を入力
vm_name = "vm1"
}

module "vm2"{
source = "../module/module.tf"
nic_name = "nic2"
vm_name = "vm2"

これで準備は完了です。あとはmainフォルダ内で「terraform apply」を実行すれば同構成のマシンを作成することができます。

おわりに

今回はリソースをモジュール化し、同構成のリソースを複数構築する方法について紹介しました。手動で作成するよりかなり楽ですし、コードも短くきれいになるのでぜひ利用してみてください

著者について
hk7をフォローする

クラウドに強いによるエンジニアブログです。

SCSKでは、自社クラウドと3大メガクラウドの強みを活かし、ハイブリッドクラウド/マルチクラウドのソリューションを展開しています。業界の深い理解をもとに、お客様の業務要件に最適なアーキテクチャをご提案いたします。サービスサイトでは、お客様のDX推進をワンストップで支援するサービスの詳細や導入事例を紹介しています。

その他技術ナレッジ
シェアする
タイトルとURLをコピーしました