0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

初心者用terrafrom 基本ディレクトリ構造構成

Posted at

モジュール構成で管理するTerraformプロジェクトのベストプラクティス

Terraformを使ってインフラをコードで管理する際、大規模になればなるほど構成の整理が重要になります。この記事では、モジュールベースで開発されたTerraformプロジェクトのディレクトリ基本構成について紹介します。

ディレクトリ構成の概要
以下は、実際に使用されているTerraformプロジェクトの構成例です:

terraform-project/
├── dev/
│   ├── .terraform/
│   ├── main.tf
│   ├── outputs.tf
│   ├── provider.tf
│   └── variables.tf
│
├── prod/
│   └── ...(本番環境用)
│
├── models/
│   ├── apigateway/
│   ├── dynamodb/
│   ├── eventbridge/
│   ├── iam/
│   ├── lambda/
│   ├── s3/
│   └── vpc/]

ディレクトリごとの役割
dev/・prod/
環境ごとの構成を分離します。

dev/:開発環境

prod/:本番環境

それぞれのディレクトリで main.tf などを用意し、models/ 配下の各モジュールを呼び出して構築します。これにより、同じインフラ構成を異なる環境で再利用可能になります。

models/

ここには再利用可能なモジュールを配置しています。各リソースはディレクトリ単位で分け、main.tf、variables.tf、outputs.tfで構成されます。

例:models/vpc/

# models/vpc/main.tf
resource "aws_vpc" "main" {
  cidr_block = var.cidr_block
  ...
}

variables.tf

variable "cidr_block" {
  description = "VPCのCIDRブロック"
  type        = string
}

outputs.tf

output "vpc_id" {
  value = aws_vpc.main.id
}

このように、モジュールを細かく分けることで以下のメリットがあります:

コンポーネントごとの責務分離

他プロジェクトへの再利用性の向上

チーム開発における変更の影響範囲の限定

models/lambda/ の構成

Lambdaだけは少し特殊で、ソースコード(index.ts)や依存パッケージ(package.json)も含めています。Terraformから .zip をアップロードする形で管理するため、lambda_function.zip が含まれています。

この構成をとることで、インフラコードとLambda関数のコードを一元管理できます。

運用イメージ

terraform init(各環境ディレクトリで)

terraform plan(変更の確認)

terraform apply(適用)

環境ごとに異なる terraform.tfvars や backend.tf を用意することで、ステートの分離や環境別パラメータの管理も可能です。

まとめ

Terraformプロジェクトをモジュールベースで構築することで、

環境ごとの分離

コードの再利用

可読性とメンテナンス性の向上

といった多くの利点があります。小規模なプロジェクトでもモジュール化の設計を取り入れておくことで、将来的なスケールに強い構成になります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?