モジュールの使い方 - Terraformのきほんと応用
ていねいを心掛けたTerraform記事です。スクリーンショット満載でやった気になれます。
Terraformといえばクラウドリソースの作成ですが、この記事ではローカルPC上のリソース作成で済むように工夫しています。
Terraform関連の他の記事は「Terraformのきほんと応用」からどうぞ。
概要
Terraformを使用しているとコードを再利用したくなります。インストールするソフトウェアが違うだけのサーバーを複数作成する場合などです。ファイルをコピーして対応しても良いのですが、変更が発生した場合に複数修正が必要になってしまい面倒です。
このような場合にはモジュール機能を使用します。この記事では、ローカルにファイルを作成するコードをモジュール化します。
ゴール
ファイル作成モジュールを使って、2つのファイルを作成します。
必要なもの
- 作業時間:15分
- Terraformを実行できる環境
モジュールとは
Terraformではソースコードをモジュール化することで、テンプレートとして使うことができるようになります。テンプレートとは何でしょうか?日本語では定型文やひな形という意味になり、何かを作成する際の基礎にできる物をさします。
Terraformでは、サーバーを作成するソースコードをモジュール化してテンプレートにすることで、同じサーバーを1つのソースコードから複数つくる事ができます。
また、テンプレートにはパラメーターを指定することができるため、ほとんど同じだけど少し設定が異なるサーバーを1つのソースコードとして管理することができるのです。
モジュールの使い方
モジュールは親となるソースコードから呼び出します。
異なる親から同じモジュールを呼び出すこともできます。
モジュールの呼び出し時にパラメーターを使うことで、ふるまいを制御することもできます。
モジュールを呼び出すコードは以下のように書きます。
module "リソースの名前" {
source = "モジュールを定義したフォルダのパス"
パラメーター名 = "パラメーター値"
}
モジュールの作り方
-
モジュールの構造
モジュールは以下の3つで成り立っています。- パラメーター
- 本体
- 戻り値
-
パラメーターを定義する
パラメーターを定義することにより、親から受け取った値を本体で使用することができます。
パラメーターは「variable」で定義します。variable "parameter_name" { }
複数のパラメーターを定義することもできます。
variable "parameter_1" { } variable "parameter_2" { }
-
パラメーターを使用する
パラメーターを本体で使用する場合は「var.パラメーター名」を使用します。resource "リソース定義名" "リソース名" { item_a = var.parameter_1 item_b = var.parameter_2 }
-
戻り値について
戻り値を定義すると、モジュールを呼び出した親でその値を使用することができます。
戻り値は「output」で定義します。output "debug_print" { value = "create from module with ${var.parameter_1}." }
本記事では戻り値については詳細に説明しません。
モジュール化したファイル作成コードで複数のファイルを作成する
-
terraformコード作成する
最終的なファイル構成は以下の通りです。terraform/ ├─ main1.tf ├─ main2.tf ├─ terraform.exe └─ modules/ └─ helloworld.tf
順番にファイルを作成します。
main1.tfmodule "module_sample_main" { source = "./modules" content = "hello world!" filename = "hello.txt" }
main2.tfmodule "module_sample_foobar" { source = "./modules" content = "foo bar!" filename = "foobar.txt" }
modules/helloworld.tfvariable "content" { } variable "filename" { } resource "local_file" "helloworld" { content = var.content filename = var.filename } output "debug_print" { value = "${var.content} to ${var.filename}" }
-
実行結果を事前確認する
実行結果を事前確認するために「plan」コマンドを実行します。terraform plan
ファイル foobar.txt と hello.txt が作成されそうです。
-
実行してファイルを作成する
ファイルを作成するために「apply」コマンドを実行します。terraform apply
以下の通り2つのファイルが作成されました。
ファイルの内容もパラメーターで指定した通りです。
サンプルコード
この記事で作成したコードはgithub上に公開しています。
参考ページ
- Terraformオフィシャルの入力変数の説明
次はこれをやろう
Terraform関連の他の記事は「Terraformのきほんと応用」からどうぞ。
Discussion