Open3
【Terraform】分析用リードレプリカの作り方
TerraformでAuroraの分析用リードレプリカを作るコードについてメモ
resource "aws_rds_cluster" "db" {
cluster_identifier = "${var.name}-${var.env}-${var.service}-db-cluster"
engine_mode = var.engine_mode
engine = var.engine
engine_version = var.engine_version
availability_zones = values(var.azs)[*]
db_subnet_group_name = aws_db_subnet_group.db.name
db_cluster_parameter_group_name = aws_rds_cluster_parameter_group.db.name
vpc_security_group_ids = [aws_security_group.db.id]
master_username = aws_ssm_parameter.db_username.value
master_password = aws_ssm_parameter.db_password.value
backup_retention_period = var.backup_retention_period
preferred_backup_window = var.preferred_backup_window
skip_final_snapshot = true
apply_immediately = true
lifecycle {
ignore_changes = [
master_password,
availability_zones
]
}
tags = merge(var.common_tags, {
Name = "${var.name}-${var.env}-${var.service}-db-cluster"
Role = "RDS"
})
}
resource "aws_rds_cluster_instance" "db" {
count = length(var.azs)
cluster_identifier = aws_rds_cluster.db.id
identifier = "${var.name}-${var.env}-${var.service}-db-instance-${format("%02d", count.index + 1)}"
db_subnet_group_name = aws_db_subnet_group.db.name
db_parameter_group_name = aws_db_parameter_group.db.name
instance_class = var.instance_class
engine = var.engine
engine_version = var.engine_version
apply_immediately = true
}
resource "aws_rds_cluster_instance" "analysis" {
cluster_identifier = aws_rds_cluster.db.id
identifier = "${var.name}-${var.env}-${var.service}-db-instance-analysis"
db_subnet_group_name = aws_db_subnet_group.db.name
db_parameter_group_name = aws_db_parameter_group.db.name
instance_class = var.instance_class
engine = var.engine
engine_version = var.engine_version
apply_immediately = true
promotion_tier = 10
depends_on = [aws_rds_cluster_instance.db]
}
resource "aws_rds_cluster_endpoint" "analysis" {
cluster_identifier = aws_rds_cluster.db.id
cluster_endpoint_identifier = "${var.name}-${var.env}-${var.service}-analysis"
custom_endpoint_type = "READER"
static_members = [
aws_rds_cluster_instance.analysis.id,
]
}
resource "aws_rds_cluster_endpoint" "reader" {
cluster_identifier = aws_rds_cluster.db.id
cluster_endpoint_identifier = "${var.name}-${var.env}-${var.service}-reader"
custom_endpoint_type = "READER"
excluded_members = [
aws_rds_cluster_instance.analysis.id,
]
}
他のモジュールで使えるようにoutputする
output "contents_db_reader_endpoint" {
value = aws_rds_cluster_endpoint.reader.endpoint
}
output "contents_db_analysis_endpoint" {
value = aws_rds_cluster_endpoint.analysis.endpoint
}
参考