環境
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してインポートするなりで移行する必要がある。