4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

TerraformでAWS RDS Aurora MySQL3(MySQL 8.0互換)クラスタを最低限構築する

Last updated at Posted at 2022-03-02

環境

2022/03/01現在

$ terraform -v
Terraform v1.1.2
on linux_amd64

tfファイル

クラスタ設定

rds_cluster.tf
resource "aws_rds_cluster" "mysql80" {
  cluster_identifier = "aurora-mysql80-cluster"

  engine         = "aurora-mysql"
  engine_version = "8.0.mysql_aurora.3.01.0"
  // engine_versionをこう指定しないとデフォルトのAurora MySQL2(MySQL5.7互換)で設定されてしまう
  // 8.0.mysql_aurora.までは共通で、後ろのバージョンはWebコンソールの"利用可能なバージョン"の値だと思われる
  // 今回は値取得のために新しくクラスタを作成し、terraform importして取得した

  master_username = "username"
  master_password = "password" // tfstateに残るので仮置し、webコンソールから書き換える
  port            = 3306
  database_name   = "database"

  db_cluster_parameter_group_name = aws_rds_cluster_parameter_group.mysql80.name
  // カスタマイズしないなら"default.aurora-mysql8.0"でもよいが、
  // コンソールで一度クラスタとインスタンスをデフォルトで構築しないと作成されない。


  backup_retention_period = 15
  preferred_backup_window = "18:00-20:00" // 03:00-05:00(JST)

  availability_zones = ["ap-northeast-1a", "ap-northeast-1c","ap-northeast-1d"]
  // RDSクラスタはAZが最低3個になるまで勝手に自動で追加される
  // ap-northeastを使うなら最初からすべて入れるのが吉
  // 実際にインスタンスを置くAZの指定はaws_db_subnet_groupで行う

  db_subnet_group_name = aws_db_subnet_group.mysql80.name
  vpc_security_group_ids = [aws_default_security_group.default.id]

  lifecycle {
    ignore_changes = [
      master_password, // パスワードが変更されていても無視する
      availability_zones // 書き換えられていても問題ないので無視する
    ]
  }
}
rds_cluster_parameter_group.tf
resource "aws_rds_cluster_parameter_group" "mysql80" {
  name   = "aurora-mysql80-cluster-parameter"
  family = "aurora-mysql8.0"

  parameter {
    name         = "time_zone"
    value        = "Asia/Tokyo"
    apply_method = "immediate"
  }
  // MySQL8.0からデフォルトの文字コードがutf8mb4になったのでいつもの呪文を書かなくてよくなった
}
rds_cluster_subnet_group.tf
resource "aws_db_subnet_group" "mysql80" {
    name        = "aurora-mysql80-cluster-db-subnet"
    subnet_ids  = aws_subnet.private.*.id // 編注:サブネットは別途作っておくこと
}

インスタンス設定

rds_cluster_instance.tf
resource "aws_rds_cluster_instance" "mysql80" {
  count = 2

  cluster_identifier = aws_rds_cluster.mysql80.id
  identifier         = "aurora-mysql80-cluster-instance-${count.index}"

  engine                  = aws_rds_cluster.mysql80.engine
  engine_version          = aws_rds_cluster.mysql80.engine_version

  instance_class          = "db.t4g.medium"
  // Aurora MySQL3は最低インスタンスがt.mediumになった

  db_subnet_group_name = aws_rds_cluster.mysql80.db_subnet_group_name

  db_parameter_group_name = aws_db_parameter_group.mysql80.name
  // カスタマイズしないなら"default.aurora-mysql8.0"でもよいが、
  // コンソールで一度クラスタとインスタンスをデフォルトで構築しないと作成されない。

  monitoring_role_arn = aws_iam_role.aurora_monitoring.arn // 編注:Aurora MySQL2と変わらない
  monitoring_interval = 60

  publicly_accessible = false
}
rds_cluster_instance_parameter_group.tf
resource "aws_db_parameter_group" "main_mysql80" {
  name   = "aurora-mysql80-cluster-instance-parameter"
  family = "aurora-mysql8.0"
}

TIPS

  • Aurora MySQL2から3への自動移行はできないので3のクラスタを別で立てて、DMSなりmysqldumpしてインポートするなりで移行する必要がある。
4
2
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
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?