😄
Terraformのモジュールについてのメモ
Terraformのモジュールについてのメモ
モジュールとは複数のリソースをひとまとめにしたパーツのようなものでこれを使用することで再利用性が可能になる。
→ Reactのコンポーネントのようなもの?
作り方
フォルダ内にmain.tf, variables.tf, outputs.tfを作成するだけで基本的にはOK。1つのフォルダが1つもモジュールとして認識される。
variable, outputみたいに単数形にしてあるとこも見かけたことがあったが基本的には複数形が正しいらしい
main.tf
リソースを定義する。1つの場合はここに書き、複数ある場合は分割するのが良いらしい。すべて置くのはNG
variables.tf
rootから渡される入力変数を定義する。デフォルトの入力値も指定することができる。もちろんvalueがある場合はそちらが優先される
variable "入力変数名" {
default = ""
value = ""
}
outputs.tf
呼び出し元に返す返り値を定義する。これを利用するとモジュールのリソースのidやarnを呼び出し元が使用できる
output "返り値名" {
value = ""
}
呼び出し方
sourceにはモジュールがあるパスを渡す。rootモジュールから見た相対パスで渡すことが多い。
VSCodeを使用している場合、Terraform(Anton Kulikov)とHashiCorp Terraform(HashiCorp)という公式の拡張機能をインストールしておくと候補のパスを挙げてくれるので便利です
// 二重引用符必要です
module "モジュール名" {
source = "./modules/モジュールのフォルダのパス"
入力変数 = ""
}
実際に作ってみる
簡単に作る。今回はVPCをモジュールで作ってみる
- モジュール作成
resource "aws_vpc" "shomotsu_development_vpc" {
cidr_block = var.cidr_block
enable_dns_hostnames = true
enable_dns_support = true
tags = {
Name = var.vpc_name
Environment = var.env
}
}
- rootモジュールから呼び出す
module "vpc" {
source = "../modules/vpc"
cidr_block = "10.0.0.0/16"
vpc_name = "test_vpc"
env = "development"
}
- 実行
以下のコマンドを実行すると作成予定が1つあることを確認できる。
terraform plan
// 結果
Plan: 1 to add, 0 to change, 0 to destroy.
────────────────────────────────────────────────────────────────────────
Note: You didn't use the -out option to save this plan, so Terraform
can't guarantee to take exactly these actions if you run "terraform
apply" now.
あとは
terraform apply
参考
最後に
間違っていることがあれば、コメントに書いていただけると幸いです。
よろしくお願いいたします。
Discussion
間違ってるわけじゃないけど、モジュールについて書くなら、スタイルガイドじゃなくてその下のほうにある module development を参考にしたほうが。
コメントありがとうございます。たしかに参考にするドキュメントが間違ってました。ありがとうございます。