Closed2

[terraform] ディレクトリ構成について

myabaoumyabaou

現状以下構成で運用しております。

├── 00_S3_tfstate
│   ├── provider.tf
│   ├── s3_tfstate.tf
│   ├── terraform.tfstate
│   └── variables.tf
├── production
│   ├── Makefile
│   ├── backend.tf
│   ├── data.tf
│   ├── ec2_cloud9
│   │   ├── alpha.tf
│   │   ├── ansible
│   │   ├── ansible.zip
│   │   ├── eventbridge.tf
│   │   ├── main.tf
│   │   ├── outputs.tf
│   │   ├── readme.md
│   │   ├── s3.tf
│   │   ├── script
│   │   └── variables.tf
│   ├── ec2_cloud9.tf
│   ├── main.tf
│   ├── readme.md
│   ├── security_group
│   │   ├── main.tf
│   │   ├── outputs.tf
│   │   └── variables.tf
│   ├── security_group.tf
│   ├── variables.tf
│   ├── vpc_peer
│   │   ├── data.tf
│   │   ├── locals.tf
│   │   ├── main.tf
│   │   ├── outputs.tf
│   │   ├── provider.tf
│   │   └── variables.tf
│   └── vpc_peer.tf
├── staging
│   ├── Makefile
│   ├── backend.tf
│   ├── data.tf
│   ├── ec2_cloud9
│   │   ├── alpha.tf
│   │   ├── ansible
│   │   ├── ansible.zip
│   │   ├── eventbridge.tf
│   │   ├── main.tf
│   │   ├── outputs.tf
│   │   ├── readme.md
│   │   ├── s3.tf
│   │   ├── script
│   │   └── variables.tf
│   ├── ec2_cloud9.tf
│   ├── main.tf
│   ├── readme.md
│   ├── security_group
│   │   ├── main.tf
│   │   ├── outputs.tf
│   │   └── variables.tf
│   ├── security_group.tf
│   ├── variables.tf
│   ├── vpc_peer
│   │   ├── data.tf
│   │   ├── locals.tf
│   │   ├── main.tf
│   │   ├── outputs.tf
│   │   ├── provider.tf
│   │   └── variables.tf
│   └── vpc_peer.tf
├── development
│   ├── backend.tf
│   ├── main.tf
│   └── variables.tf
├── common
│   ├── backend.tf
│   ├── main.tf
│   └── variables.tf
├── Makefile
└── readme.md

ただ、module系のコードがやはり冗長なので
よく見かける以下構成に切り替えようかと考えています。

├── environment
│   ├── common
│   │   └── main.tf
│   ├── development
│   │   └── main.tf
│   ├── production
│   │   └── main.tf
│   └── staging
│       └── main.tf
└── modules
    ├── api
    │   └── main.tf
    ├── cache
    │   └── main.tf
    ├── cdn
    │   └── main.tf
    ├── db
    │   └── main.tf
    ├── s3
    │   └── main.tf
    └── web
        └── main.tf

懸念点としてステージング環境のみ必要なリソースとかであれば
読み込み元のenvironment側で調整が効くと思うのですが、
同一moduleを利用しており、staging側で検証中ものをcommitした状態で
本番環境での変更要件が発生した場合検証中ものが
本番環境で反映されてしまうことを気にしております。

上記の構成にて運用している場合において
どのような運用ルールを設けているなどがあれば
アドバイスいただけると幸いです。

stagingコミット時は即本番反映する
-target をオプションを利用し、変更中のmoduleには影響がないようにする。
など

上記構成で問題ないのであればworkspaceでの運用も可能な気もしています。
公式では非推奨ですが、。

myabaoumyabaou

後者の構成にして運用できる見込みができたのでクローズします。

このスクラップは2021/12/20にクローズされました