インフラ

[Terraform]moduleを使ってVPCを作成してみる moduleを使用するメリット

terraform module

今回は、VPCをmoduleを使ってtfファイルを分割してみます。

「Cloud9ではじめるTerraform入門 AWS上にVPCを作ってみる」の続きです。

Contents

moduleを使うメリット

ひとつのtfファイルにすべてのリソースを書いてしまうと
ファイルが長大になり見通しが悪くなってしまいます。
また、tfファイルを再利用するのも難しくなります。

そこで、moduleを使います。

moduleを使うこと下記のメリットが得られます。

  • tfファイルを分割してコードを管理しやすくする
  • tfファイルの再利用が可能になる(本番とテスト環境で同様のmoduleを使える)
  • github上のmoduleを使用できる

Terrafrom Module

VPCをmodule分割する

フォルダ構成

環境を分けることを想定して、devディレクトリを作っています。

[code lang=text]
terraform
┣env
┃┗dev
┃ ┣.terraform
┃ ┣main.tf
┃ ┣terrform.tfvars
┃ ┗terrform.tfstate
┗modules
┗vpc
┣main.tf
┣outputs.tf
┗valiables.tf
[/code]

分割前

/env/dev/main.tf
フォルダを作成したら、以前作成したファイルを「/env/dev/」配下に移動します。

分割後

/env/dev/main.tf
resourceだったところが、moduleに変わっています。
moduleでは作成リソースのパラメータの実際の値を定義します。

/modules/vpc/valiables.tf
moduleで定義した値を、valiablesで宣言してmodulesディレクトリの
「main.tf」で使えるようにします。

/modules/vpc/main.tf
valiableで宣言した値を使って、リソースの設定値を設定します。

/modules/vpc/outputs.tf
他のリソースで使うときのために、vpc.idとcidr.blockをアウトプットしています。
セキュリティグループを作成するときなどにこちらのvpc.idを使用します。

terraformコマンド実行時の注意点

「/env/dev/」ディレクトリに移動して、terraformコマンドを実行してください。

例)
prod環境を作る場合。

  1. 「env」ディレクトリ内に新しく「prod」ディレクトリを作成する。
  2. 作成した「/env/prod」ディレクトリに移動して、terraformコマンドを実行する。

まとめ

module分割の方法についてでした。

分割すると、ファイルがいろいろ増えて面倒そうですが環境が大きくなると
必須なんだと思いました。

参考

公式のモジュールを参考にしました。

https://github.com/terraform-community-modules/tf_aws_vpc

関連記事

Cloud9ではじめるTerraform入門 AWS上にVPCを作ってみる
「DevOpsを支える今話題のHashiCorpツール群について」参加メモ