知り合いが、構築をIaCで行っているそうで、関連知識を深めようと思います。
続きで、構築パターンとしては、手書きで各リソース(aws_vpc、aws_subnet、aws_route_table…)を並べて作る方法と、terraform-aws-modules/vpc/aws のような定番モジュールを使って短く安全に書く方法があります。手書きは学習や細かい制御に強い反面、抜け漏れや設計差異が出やすいです。モジュールは構築が速く、ベストプラクティス寄りのデフォルトを得やすい一方で、モジュールの入力変数設計に合わせて運用を組む必要が出ます。実務では、最初はモジュールで立ち上げて、必要な箇所だけ追加リソース(VPCエンドポイント、Flow Logs、セキュリティグループなど)を別途Terraformで足していくスタイルが多いです。
最後に、VPCを「作っただけ」では実際のシステムは安定しません。よくセットで入るのは、S3/DynamoDB/ECR/CloudWatch LogsなどへのVPCエンドポイント(NATコスト削減と通信閉域化)、VPC Flow Logs(通信の監査・トラブルシュート)、サブネット設計に基づくルール(SG/NACL)、そして環境ごとの切り替え(devはNATなし、prodはAZごとNATなど)です。Terraformではこれらを変数でスイッチできるようにしておくと、同じコードベースで複数環境を安全に回せます。