皆さん、Aurora Serverlessは、使っていますか?
通常RDSを立ち上げる際には、ユーザ数の想定などをして、DBのインスタンスサイズを決めるかと思いますが、
Aurora Serverlessは、その見積もりすらも不要で立ち上げる事ができてしまいます。
このページは、Terraformで、Aurora Serverlessを、作る方法をご紹介します。
Aurora Serverlessの特徴
はじめにAurora Serverlessならではの特徴をご紹介します。
キャパシティ
RDSの性能になります。
1、2、4、8、16、32、64、128、256
から選べ、数値×2GBのメモリの性能になります。
最小値から最大値の間で自動にスケールします。
一時停止
auto_pause
の設定で、接続が無い状態が一定時間経過後(seconds_until_auto_pause
)、DBが一時停止状態になります。
停止時は、DBインスタンスの料金がかかりません。
ただし、再起動に若干の時間はかかるので、seconds_until_auto_pause
の値には注意が必要です。
Terraform
環境
- Terraform v0.14.7
- Aurora MySQL 2.x(MySQL 5.7互換)
tfファイル
// RDS用セキュリティグループ
resource "aws_security_group" "demo" {
//このセキュリティグループを紐付けるVPCのIDを指定 ex.vpc-xxxxx
vpc_id = aws_vpc.main.id
name = "rds-demo"
ingress {
protocol = "tcp"
from_port = 3306
to_port = 3306
// DBへの接続を許可するcidrをlistで指定 ex.["xxx.xxx.xxx.xxx/24","yyy.yyy.yyy.yyy/24"]
cidr_blocks = [aws_vpc.main.cidr_block]
}
egress {
protocol = "-1"
from_port = 0
to_port = 0
cidr_blocks = ["0.0.0.0/0"]
}
}
// RDS用サブネットグループ
resource "aws_db_subnet_group" "demo" {
name = "rds-demo"
# サブネットグループに入れるサブネットのIDをlistで指定 ex.["subnet-xxxxxx","subnet-yyyyy"]
subnet_ids = [aws_subnet.frontend.id, aws_subnet.backend.id]
}
// RDSクラスター(Aurora Serverless)
resource "aws_rds_cluster" "demo" {
cluster_identifier = "aurora-cluster-demo"
engine_mode = "serverless"
//デフォルトはaurora(mysql5.6)のため、mysql5.7の場合は必ずengine="aurora-mysql"の指定が必要です
engine = "aurora-mysql"
engine_version = "5.7"
database_name = "mydb"
master_username = "xxxxxxxx"
master_password = "xxxxxxxx"
db_subnet_group_name = aws_db_subnet_group.demo.name
// 削除時にスナップショットを作成しない
skip_final_snapshot = true
vpc_security_group_ids = [aws_security_group.demo.id]
scaling_configuration {
//接続がない場合に、一時停止する
auto_pause = true
//一時停止するまでの時間(秒)
seconds_until_auto_pause = 300
//スケール可能なキャパシティーユニットの最大値
max_capacity = 16
//キャパシティーユニットの最小値
min_capacity = 1
//タイムアウト時に強制的にスケーリング
timeout_action = "ForceApplyCapacityChange"
}
}
Terraform公式サイト
Resource: aws_security_group
Resource: aws_db_subnet_group
Resource: aws_rds_cluster
追加でおすすめの設定
- 削除保護(デフォルトはfalse)
deletion_protection = true
- バックアップの保持期間(デフォルトは1日)
backup_retention_period = 7
- 削除時にスナップショットを作成する(false時)
skip_final_snapshot = false
- デフォルトはfalseなので、この項目を削除してもよい
では、よきTerraformライフを!!!