🐕

Terraformのrdsのモジュールファイル

2023/10/30に公開

rdsのモジュールファイル

rds.tfファイル
# Auroraクラスタ用のパラメータグループを作成
resource "aws_rds_cluster_parameter_group" "aurora_cluster_parameter_group" {
  name        = "sample-dev-pg-auroracluster"  # パラメータグループの名前
  family      = "aurora-mysql8.0"  # パラメータグループのファミリ
  description = "Custom parameter group for Aurora cluster"  

  # タイムゾーンを設定
  parameter {
    name  = "time_zone"
    value = "Asia/Tokyo"
  }

  # タグを設定
  tags = {
    Name = "sample-dev-pg-auroracluster"
  }
}

# Auroraインスタンス用のパラメータグループを作成
resource "aws_db_parameter_group" "aurora_instance_parameter_group" {
  name        = "sample-dev-pg-aurorainstance"  # パラメータグループの名前
  family      = "aurora-mysql8.0"  # パラメータグループのファミリ
  description = "Custom parameter group for Aurora instance"  
  
  # タグを設定
  tags = {
    Name = "sample-dev-pg-aurorainstance"
  }
}

# DB用のサブネットグループを作成
resource "aws_db_subnet_group" "this" {
  name       = "sample-dev-dbsg"  # サブネットグループの名前
  subnet_ids = var.subnet_ids  # サブネットID(変数から取得)

  # タグを設定
  tags = {
    Name = "sample-dev-dbsg"
  }
}

# Auroraクラスタを作成
resource "aws_rds_cluster" "this" {
  cluster_identifier  = var.aurora_cluster_name  # クラスタの識別子
  engine              = "aurora-mysql"  # 使用するエンジン
  engine_version      = "8.0.mysql_aurora.3.01.0"  # エンジンのバージョン
  master_username     = var.master_username  # マスターユーザー名
  master_password     = var.master_password  # マスターパスワード
  db_subnet_group_name = var.subnet_group_name  # サブネットグループ名
  skip_final_snapshot = true  # 最終スナップショットをスキップ
  depends_on = [aws_db_subnet_group.this]  # サブネットグループの作成が先
}

# Auroraインスタンスを作成
resource "aws_rds_cluster_instance" "this" {
  identifier         = var.aurora_instance_name  # インスタンスの識別子
  cluster_identifier = aws_rds_cluster.this.id  # 所属するクラスタのID
  instance_class     = var.instance_class  # インスタンスのタイプ
  engine             = "aurora-mysql"  # 使用するエンジン
}


variables.tfファイル
variable "vpc_id" {
  description = "VPCのID"
}

variable "subnet_group_name" {
  description = "サブネットグループ名"
}

variable "subnet_ids" {
  description = "サブネットIDのリスト"
  type        = list(string)
}


variable "security_group" {
  description = "セキュリティグループ"
}

variable "aurora_cluster_name" {
  description = "Auroraクラスタの名前"
}

variable "aurora_instance_name" {
  description = "Auroraインスタンスの名前"
}

variable "master_username" {
  description = "マスターユーザー名"
}

variable "master_password" {
  description = "マスターパスワード"
}

variable "instance_class" {
  description = "DBインスタンスクラス"
}


output.tfファイル
output "aurora_cluster_id" {
  value       = aws_rds_cluster.this.id
  description = "Aurora クラスタのID"
}

output "aurora_instance_id" {
  value       = aws_rds_cluster_instance.this.id
  description = "Aurora インスタンスのID"
}

output "aurora_endpoint" {
  value       = aws_rds_cluster.this.endpoint
  description = "Aurora クラスタのエンドポイント"
}


providers.tfファイル
 terraform {
        required_providers {
            aws = {
                source  = "hashicorp/aws"
                version = "~> 5.0"
            }
        }
    }

    provider aws {
        region = "ap-northeast-1"
    }

README.mdファイル

### rds.tfファイル

| コード部分                                          | 説明                                              |
|----------------------------------------------------|----------------------------------------------------|
| `aws_rds_cluster_parameter_group` リソース       | Auroraクラスタ用のパラメータグループを作成します。   |
| `aws_db_parameter_group` リソース                 | Auroraインスタンス用のパラメータグループを作成します。 |
| `aws_db_subnet_group` リソース                     | DB用のサブネットグループを作成します。               |
| `aws_rds_cluster` リソース                         | Auroraクラスタを作成します。                         |
| `aws_rds_cluster_instance` リソース                | Auroraインスタンスを作成します。                     |

### variables.tfファイル

| コード部分                    | 説明                          |
|-------------------------------|-------------------------------|
| `variable "vpc_id"`           | VPCのIDを指定します。          |
| `variable "subnet_group_name"`| サブネットグループ名を指定します。|
| `variable "subnet_ids"`       | サブネットIDのリストを指定します。|
| `variable "security_group"`   | セキュリティグループを指定します。|
| `variable "aurora_cluster_name"` | Auroraクラスタの名前を指定します。|
| `variable "aurora_instance_name"`| Auroraインスタンスの名前を指定します。|
| `variable "master_username"`  | マスターユーザー名を指定します。|
| `variable "master_password"`  | マスターパスワードを指定します。|
| `variable "instance_class"`   | DBインスタンスクラスを指定します。|

### output.tfファイル

| コード部分                    | 説明                          |
|-------------------------------|-------------------------------|
| `output "aurora_cluster_id"`  | AuroraクラスタのIDを出力します。|
| `output "aurora_instance_id"` | AuroraインスタンスのIDを出力します。|
| `output "aurora_endpoint"`    | Auroraクラスタのエンドポイントを出力します。|


Discussion