Closed2
[terraform] ディレクトリ構成について
![myabaou](https://res.cloudinary.com/zenn/image/fetch/s--woNMEAOx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/55b4d82b08.jpeg)
現状以下構成で運用しております。
├── 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での運用も可能な気もしています。
公式では非推奨ですが、。
![myabaou](https://res.cloudinary.com/zenn/image/fetch/s--woNMEAOx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/55b4d82b08.jpeg)
後者の構成にして運用できる見込みができたのでクローズします。
このスクラップは2021/12/20にクローズされました