ハマログ

株式会社イーツー・インフォの社員ブログ

Terraformのディレクトリ構成を他記事を参考に考えてみる。

  • 環境ごとにディレクトリを分けて、moduleを参照する
    • メリット
      • 再利用性が高い。
      • 可読性が高い。
      • 採用事例が多く、記事になっている。
    • デメリット
      • 本番環境と検証環境に差分が発生する可能性がある。
  • 環境毎にディレクトリで分けず、workspaceを使う
    • メリット
      • 実装漏れを防ぐ。
      • 本番環境と検証環境を同一の構成にしかできないので環境による不具合をなくす。
    • デメリット
      • 環境毎にサブネットCIDRやインスタンスタイプなどパラメータの差分があるとき、条件分岐を書かなければならない。可読性に欠ける。これが煩わしいようで、環境ごとにディレクトリを分けてmoduleを参照する構成が多く採用されている印象。

以下、記事の構成が全体の見通しが良く、他プロジェクトでも再利用しやすそうなので採用してみる。しかしmoduleを2層にすることで実装コストが上がってしまう。

1.
複数プロジェクトを管理しているが、案件によって作りたいリソースは異なるのでプロジェクト毎に新しいものを作るようにする。

2.
provider.tfに関して、本番環境と検証環境で異なるproviderやバージョンを使うことは現状無いので、dev/shared/provider.tfprod/shared/provider.tfで分ける必要がない。
provider.tfは一つだけを用意し、各コンポーネントのディレクトリ内からシンボリックリンクで参照する。

3.
ディレクトリ名を変更
project  → env
usecase  → component
elements → service

.
├── env
│   ├── shared
│   │    └── provider.tf
│   ├── dev(tfstate管理)
│   │   ├── main.tf
│   │   ├── variables.tf
│   │   ├── aws.tf
│   │   ├── terraform.tf
│   │   ├── provider.tf -> ../../shared/provider.tf
│   └── prod(tfstate管理)
│                       ︙
├── component
│       ├── network
│       │       ├── main.tf
│       │       ├── outputs.tf
│       │       └── variables.tf
│       ├── cicd
│       ├── api
│       ├── db
│       ︙
└── service
        ├── vpc
        │    ├── main.tf
        │    ├── outputs.tf
        │    └── variables.tf
        ├── rds
        ├── s3
        ├── security_group
        ├── subnet
        ├── wafv2
        ︙

  kusano   2021年4月19日


関連記事

Amazon Simple Queue Service をPHPで使ってみる

皆様、お疲れ様です。 uminchuです 今回は前回軽く触れたAWSの機能の一つ…

すごいぞAWS。美味いぞ鬼金棒。

都内某所(言いたいだけ)で 行われた、AWS Solutions Trainin…

AppEngineでphpMyAdminを動かす

データベースにMySQLを利用することが多いのですが、GCPで環境を作るときにG…


← 前の投稿

次の投稿 →