ニフクラ ブログ

ニフクラやクラウドの技術について、エンジニアが語るブログです。

Terraformを利用してニフクラRDBのDBサーバーを作成する4つの方法

こんにちは、ニフクラエンジニアの b:id:nifcloud-developers です。
今回は、Terraform NIFCLOUD Providerを利用してニフクラRDBのDBサーバーを作成する手順を説明します。
Terraform NIFCLOUD Providerの基本的な利用方法などは以前の記事で詳しく紹介しているので、併せてご参照ください。

f:id:nifcloud-developers:20210813133238p:plain
IaC(Infrastructure as Code)ツールTerraformでRDBの構築を簡単に

Terraformを利用してニフクラRDBのDBサーバーを作成する

ニフクラRDBのDBサーバーを作成するためにはnifcloud_db_instanceリソースを利用します。
nifcloud_db_instanceリソースは、指定する引数によって DBサーバー作成リードレプリカ作成ポイントインタイムリカバリーDBスナップショットからDBサーバーを作成 の4通りの方法でDBサーバーを作成することができます。
それぞれの作成方法について詳細に説明していきます。

DBサーバー作成

まずはシンプルにDBサーバーを作成する方法です。
設定ファイルは以下のようになります。

resource "nifcloud_db_instance" "example" {
  identifier        = "example"
  instance_class    = "db.large8"
  db_name           = "baz"
  username          = "for"
  password          = "bar"
  engine            = "MySQL"
  engine_version    = "5.7.15"
  allocated_storage = 100
  port              = 3306
}

上記リソースをapplyすることでシングル構成のMySQL5.7.15のDBサーバーを一台作成できます。

リードレプリカ作成

リードレプリカを作成したい場合、Terraformでは以下のようにファイルを記述します。

resource "nifcloud_db_instance" "example-read" {
  identifier          = "example-read"
  replicate_source_db = nifcloud_db_instance.example.id
  instance_class      = "db.large8"
}

resource "nifcloud_db_instance" "example" {
  identifier              = "example"
  instance_class          = "db.large8"
  db_name                 = "baz"
  username                = "for"
  password                = "bar"
  engine                  = "MySQL"
  engine_version          = "5.7.15"
  allocated_storage       = 100
  port                    = 3306
  backup_retention_period = 1
  apply_immediately       = true
}

identifier にリードレプリカの名前を、replicate_source_dbにリードレプリカ元のDBサーバーの名前を指定します。
ニフクラRDBではリードレプリカを作成する場合、元のDBサーバーは自動バックアップが有効である必要があるため、 backup_retention_periodを指定して有効化させています。
DBサーバーの設定を変更する場合、項目によってはmaintenance_windowで指定した時刻まで設定が反映されません。すぐに反映させたい場合にはapply_immediatelytrueを設定します。

また、リードレプリカ関連の引数でread_replica_identifierという引数もありますが、これは冗長化タイプ性能優先のDBサーバーを作成する時に待機系となるリードレプリカの名前を指定する引数になります、通常のリードレプリカ作成時はidentifierがリードレプリカの名前になるので注意してください。

ポイントインタイムリカバリー

万が一誤ってデータを消してしまった場合でも、DBサーバーの復元がTerraformから可能です。
復元にポイントインタイムリカバリーを使う場合、以下のようなファイルを記述します。

resource "nifcloud_db_instance" "example-restore" {
  identifier     = "example-restore"
  instance_class = "db.large8"
  port           = 3306
  restore_to_point_in_time {
    source_db_instance_identifier = nifcloud_db_instance.example.id
    use_latest_restorable_time    = true
  }
}

resource "nifcloud_db_instance" "example" {
  identifier              = "example"
  instance_class          = "db.large8"
  db_name                 = "baz"
  username                = "for"
  password                = "bar"
  engine                  = "MySQL"
  engine_version          = "5.7.15"
  allocated_storage       = 100
  port                    = 3306
  backup_retention_period = 1
  apply_immediately       = true
}

ポイントインタイムリカバリーで復元すると新規DBサーバーとして作成されます。
identifierには復元後のDBサーバーの名前を、restore_to_point_in_timesource_db_instance_identifierに元のDBサーバーの名前を指定します。
リストアに使用する時間はrestore_time にUTCで指定、または最新のリストアを利用する場合use_latest_restorable_timeをtrueにすることも可能です。

DBスナップショットからDBサーバーを作成

DBサーバーを復元する方法は、ポイントインタイムリカバリーの他にDBスナップショットから作成することも可能です。
Terraformでは以下のように記述します。

resource "nifcloud_db_instance" "example-restore-snapshot" {
  identifier          = "example-restore-snapshot"
  snapshot_identifier = "rdb:example-2021-08-09-00-00"
  instance_class      = "db.large8"
  port                = 3306
}

自動バックアップで作成されたDBスナップショットの名前をsnapshot_identifier に指定することでDBスナップショットからDBサーバーを作成できます。
また、現在はTerraformからDBスナップショットを作成することはできませんがコントロールパネル(ニフクラの管理画面)やAPIにて手動で作成したDBスナップショットも同じように指定することができます。

まとめ

今回はTerraform NIFCLOUD Providerを利用してニフクラRDBを作成する方法を紹介しました。
DBサーバーを新規作成するだけでなく、リードレプリカの作成やリストアもTerraformで管理できるようになります。

是非ニフクラRDBを活用したシステム構築の自動化にお役立てください。