2
0

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 3 years have passed since last update.

Terraformで作るAurora Serverless (MySQL 5.7互換)

Last updated at Posted at 2021-02-26

皆さん、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ライフを!!!

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?