🦌

社内向けにterraformモジュールを共有する

2021/04/05に公開

社内向けにterraformモジュールを共有したかった。
TerraformCloudは使わせて貰えなさそうだった。
gitでがんばることにした。

どうやってやるか

git の submodule という機能を使うことにした。
システム全体を定義したgitリポジトリの中にモジュールgitリポジトリをネストする構成を作る。
submoduleを使うにあたって、昔は色々設定が必要だったみたいだけど、いまは1コマンドを実行するだけ。cloneと同じ感覚で使える。

リポジトリ内のディレクトリ構成

モジュールディレクトリ(リポジトリ)

以下の通り作成する。
この中でmodulesディレクトリを作ると使う時に深くなるので、いきなりモジュールが露出するようにする。

$ tree tfm-network/
.
├── README.md
├── vpc/
│   ├── main.tf
│   ├── variables.tf
│   ├── .../
├── endpoint/
│   ├── main.tf
│   ├── variables.tf
│   ├── .../

プロジェクトディレクトリ(リポジトリ)

モジュールを使う側のプロジェクトディレクトリ設定。
一応、ローカルのモジュールとリモートのモジュールを分けるようにしてみた。

$ tree complete-module/
.
├── README.md
├── env/
│   ├── production/
│   │   ├── README.md
│   │   ├── variables.tf
│   │   ├── main.tf
│   │   ├── outputs.tf
│   ├── develop/
│   ├── .../
├── modules/
│   ├── localmoduleA/
│   │   ├── README.md
│   │   ├── variables.tf
│   │   ├── main.tf
│   │   ├── outputs.tf
│   ├── localmoduleAB/
│   ├── .../
├── modules-remote/
│   ├── tfm-network/
│   │   ├── vpc/
│   │   │   ├── main.tf
│   │   │   ├── variables.tf
│   │   │   ├── .../
│   │   ├── endpoint/
│   │   │   ├── main.tf
│   │   │   ├── variables.tf
│   │   │   ├── .../

参考URL

https://www.terraform.io/docs/language/modules/develop/structure.html
https://www.d-wood.com/blog/2014/05/22_6257.html

Discussion