注目イベント!
春の新人向け連載企画開催中
新人エンジニアの皆さん、2024春、私たちと一緒にキャリアアップの旅を始めませんか?
IT業界への最初の一歩を踏み出す新人エンジニアをサポートする新連載スタート!
mameyose

TerraformでのAmazon Aurora PostgreSQLのメジャーバージョンアップ手順

| 4 min read
Author: tadashi-nakamura tadashi-nakamuraの画像

営業支援システム(Sales Support System)で実施したAmazon Aurora PostgreSQLのメジャーバージョンアップ手順について紹介します。

前提事項

#

ここで紹介する手順では以下のことを前提としています。

  • Amazon Aurora PostgreSQLをTerraformを利用してIaC化されていること
  • 実施に先立ってデータのバックアップがされていること
  • カスタムパラメタグループを利用していること
  • バージョンは12.12でバージョンアップ先は14.8であること
  • データベースの再起動が可能であること
  • terraformおよびAWS CLIがインストールされていること

手順の詳細

#

実施前

#

実施前のIaCコード(抜粋)は以下のようになっているとします。

...
resource "aws_rds_cluster_parameter_group" "this" {
	...
	family = "aurora-postgresql12"
	...
}

resource "aws_rds_cluster" "this" {
	...
    apply_immediately               = true
    allow_major_version_upgrade     = true 
	engine_version                  = "12.12"
    db_cluster_parameter_group_name = aws_rds_cluster_parameter_group.this.name
	...
}

resource "aws_db_parameter_group" "this" {
	...
	family = "aurora-postgresql12"
	...
}

resource "aws_rds_cluster_instance" "this" {
	...
    apply_immediately       = true
    cluster_identifier      = aws_rds_cluster.this.id
	engine_version          = "12.12"
    db_parameter_group_name = aws_db_parameter_group.this.name
	...
}
...

ポイントとなるのは以下の2つのフラグ値です。

  • apply_immediately
  • allow_major_version_upgrade

1つ目は適用を即時反映するためのものです。
2つ目は今回のメジャーバージョンをアップすることを許可するためのものです。

STEP.1 パラメタグループをデフォルトに変更する

#
...
resource "aws_rds_cluster" "this" {
	...
    db_cluster_parameter_group_name = "default.aurora-postgresql12"
	...
}
...
resource "aws_rds_cluster_instance" "this" {
	...
    db_parameter_group_name = "default.aurora-postgresql12"
	...
}
...

この内容をterraformで反映します。反映されるとこの時点では以下のようになります。

  • エンジンバージョンは12系のまま
  • パラメタグループは12系のデフォルト

STEP.2 メジャーバージョンを更新する

#

対象となるのはクラスタとインスタンスのパラメタグループのファミリー名とエンジンバージョンです。
実際には、カスタムパラメタグループとエンジンはこの時点では関連していないので、同時に更新する必要はありません。
しかし、どちらも更新する必要があるので、まとめて行っています。

...
resource "aws_rds_cluster_parameter_group" "this" {
	...
	family = "aurora-postgresql14"
	...
}

resource "aws_rds_cluster" "this" {
	...
	engine_version                  = "14.8"
	...
}

resource "aws_db_parameter_group" "this" {
	...
	family = "aurora-postgresql14"
	...
}

resource "aws_rds_cluster_instance" "this" {
	...
	engine_version          = "14.8"
	...
}
...

ここで注意するのは、各エンジンバージョンから利用できるエンジンバージョンが限定されているということです。自分が利用しているエンジン(aurora-postgresql)とバージョン(12.12)に対して確認する場合には以下のコマンドを実行します。

aws rds describe-db-engine-versions --engine aurora-postgresql  --engine-version 12.12 --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text

上記内容を適用すると、データベースの状態が以下のように変更されます。

RDSの状態

日本語だと残念な表示となっていますが、更新されていることが分かるかと思います。この状態から利用可能状態に戻るまでに約20分ほどかかります。また、この時点では以下のようになっています。

  • エンジンバージョンは14系に更新
  • パラメタグループは14系のデフォルトに更新

STEP.3 パラメタグループをデフォルトからカスタムに戻す

#
...
resource "aws_rds_cluster" "this" {
    ...
    db_cluster_parameter_group_name = aws_rds_cluster_parameter_group.this.name
    ...
}
...
resource "aws_rds_cluster_instance" "this" {
    ...
    db_parameter_group_name      = aws_db_parameter_group.this.name
	...
}
...

この内容を適用すると新しいメジャーバージョンの状態となります。しかし、ライターインスタンスの設定を確認すると以下の2つが「再起動を保留中」となっています。

  • DBインスタンスパラメータグループ
  • DBクラスターのパラメータグループ

STEP.4 「ライターインスタンス」を再起動する

#

最後にAWS管理コンソールで「ライターインスタンス」を再起動します。

これでAmazon Aurora PostgreSQLのメジャーバージョンアップは完了となります。

豆蔵では共に高め合う仲間を募集しています!

recruit

具体的な採用情報はこちらからご覧いただけます。