今回は、VPCをmoduleを使ってtfファイルを分割してみます。
「Cloud9ではじめるTerraform入門 AWS上にVPCを作ってみる」の続きです。
moduleを使うメリット
ひとつのtfファイルにすべてのリソースを書いてしまうと
ファイルが長大になり見通しが悪くなってしまいます。
また、tfファイルを再利用するのも難しくなります。
そこで、moduleを使います。
moduleを使うこと下記のメリットが得られます。
- tfファイルを分割してコードを管理しやすくする
- tfファイルの再利用が可能になる(本番とテスト環境で同様のmoduleを使える)
- github上の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環境を作る場合。
- 「env」ディレクトリ内に新しく「prod」ディレクトリを作成する。
- 作成した「/env/prod」ディレクトリに移動して、terraformコマンドを実行する。
まとめ
module分割の方法についてでした。
分割すると、ファイルがいろいろ増えて面倒そうですが環境が大きくなると
必須なんだと思いました。
参考
公式のモジュールを参考にしました。
https://github.com/terraform-community-modules/tf_aws_vpc
関連記事
Cloud9ではじめるTerraform入門 AWS上にVPCを作ってみる
「DevOpsを支える今話題のHashiCorpツール群について」参加メモ