8
8

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.

Aurora(PostgreSQL)のアップグレード

Last updated at Posted at 2020-04-26

Aurora(PostgreSQL)のアップグレード

PostgreSQLは1年に1回メジャーバージョンアップし、その後にセキュリティパッチ、バグフィックスなどを含めたマイナーバージョンがリリースされます。メジャーバージョンがリリースされてから5年でEOLを迎えます。

Aurora(PostgreSQL)でも遅れてPostgreSQLのメジャーバージョン、マイナーバージョンがリリースされます。2020年4月時点では、9.6から11.6までのバージョンが利用できます。最新のPostgreSQLは12.2なので、若干古いバージョンになっています。

AWS公式のアップグレードに関する情報は以下のページで確認することができます。

Amazon Aurora PostgreSQLのバージョンの確認

Auroraには、Auroraとデータベースエンジンの2つのバージョンを持っています。

データベースエンジンのバージョンは、通常のPostgreSQLと同様に以下のように確認できます。
今回は後でアップグレードを試すために少し古いバージョン(10.5)を利用しています。

postgres=> SHOW SERVER_VERSION;
 server_version 
----------------
 10.5
(1 row)

次のAuroraのバージョンは以下のように確認できます。

postgres=> SELECT AURORA_VERSION();
 aurora_version 
----------------
 2.1.1
(1 row)

なお、AuroraとPostgreSQLとバージョンの紐づけは以下のページで確認できます。
(Auroraのバージョンを知ると何か良いことがあるのかは分かりませんが。。。)

アップグレードできるバージョンの確認

Auroraをアップグレードできるかどうかは以下のコマンドで確認することができます。

aws rds describe-db-engine-versions --engine aurora-postgresql

例えば、10.5のバージョンの場合は以下のように出力されます。
「"AutoUpgrade": true」で自動アップグレードの対象かどうかが確認できるようになっているようです。

なお、10.5からは10.6~10.11へバージョンアップができるようです。

        {
            "Engine": "postgres",
            "EngineVersion": "10.5",
            "DBParameterGroupFamily": "postgres10",
            "DBEngineDescription": "PostgreSQL",
            "DBEngineVersionDescription": "PostgreSQL 10.5-R1",
            "ValidUpgradeTarget": [
                {
                    "Engine": "postgres",
                    "EngineVersion": "10.6",
                    "Description": "PostgreSQL 10.6-R1",
                    "AutoUpgrade": true,
                    "IsMajorVersionUpgrade": false
                },
                {
                    "Engine": "postgres",
                    "EngineVersion": "10.7",
                    "Description": "PostgreSQL 10.7-R1",
                    "AutoUpgrade": false,
                    "IsMajorVersionUpgrade": false
                },
~省略~
                {
                    "Engine": "postgres",
                    "EngineVersion": "10.11",
                    "Description": "PostgreSQL 10.11-R1",
                    "AutoUpgrade": false,
                    "IsMajorVersionUpgrade": false
                },
                {
                    "Engine": "postgres",
                    "EngineVersion": "11.1",
                    "Description": "PostgreSQL 11.1-R1",
                    "AutoUpgrade": false,
                    "IsMajorVersionUpgrade": true
                },
~省略~
                {
                    "Engine": "postgres",
                    "EngineVersion": "11.6",
                    "Description": "PostgreSQL 11.6-R1",
                    "AutoUpgrade": false,
                    "IsMajorVersionUpgrade": true
                }
            ],
            "ExportableLogTypes": [
                "postgresql",
                "upgrade"
            ],
            "SupportsLogExportsToCloudwatchLogs": true,
            "SupportsReadReplica": true,
            "SupportedFeatureNames": [],
            "Status": "available"
        },

アップグレードの概要

インスタンスのアップグレードには以下の2種類があります。

  • メジャーバージョンのアップグレード
  • マイナーバージョンのアップグレード

メジャーバージョンのアップグレード

10.5から11.7へのアップグレードなどがメジャーバージョンのアップグレードです。
メジャーバージョンのアップグレードは下位互換性がなく、標準でサポートされていません。
そのため、別のDBクラスタを構成し、pg_dump/pg_restoreなどを使用して移行する必要があります。

例えば以下の手順が考えられます。

1)現行のスナップショットを取得。
2)現行のクラスタを停止。
3)現行のスナップショットを用いて新規にAuroraクラスタを構築。
4)AuroraのEndpointに切り替える。

アプリケーションからの書き込みがあるとデータに差分が発生するのでアプリケーションは停止しておく必要があります。
この方法ですとダウンタイムが長くなってしまいますので、ダウンタイムを短くしたい場合はAuroraクラスタ間でレプリケーションを行うことになります。

マイナーバージョンのアップグレード

・マイナーバージョンのアップグレードは下位互換性があります。
 例えば、11.6から11.7にアップグレードする場合です。
・自動アップグレードと手動アップグレードの2種類があります。
・アップグレード時にデータベースは停止状態になります。
・拡張機能はアップグレードされません。拡張機能を更新するためにALTER EXTENSION UPDATE のコマンドを実行します。

自動アップグレード

・DBインスタンスの作成時、変更時に、「マイナーバージョン自動アップグレード」を有効にする、もしくは推奨バージョン未満である場合に自動アップグレードされます。
・自動アップグレードはメンテナンスウィンドウで実行されます。

自動アップグレードで勝手にアップグレードして停止するケースが発生するので、無停止のシステムであれば注意が必要です。

手動アップグレードを実行する

手動アップグレードは、メンテナンスウィンドウ中か、すぐに適用するかを選べます。
すぐに適用するを選択した場合、変更直後ではありませんが、可能な限り早くアップグレードが実行されます。
今回は変更の設定をしてから数分後にアップグレードが完了していました。数分間停止したわけではなく、数分後に完了したということで、実際に停止した時間は確認していません。

アップグレードの手順は以下に記載があります。

コンソールからマイナーバージョンをアップグレードする手順は以下のようになります。
今回は10.5から10.7へのマイナーバージョンのアップグレードを試してみます。

コンソールでアップグレードを実行するデータベースを選択して、「変更」を選択します。

image.png

「DBエンジンのバージョン」で変更するバージョンを選択します。
今回は10.6から10.11までが選択できます。

image.png

次に「変更のスケジュール」でメンテナンスウィンドウ中で実行するか、すぐに適用するかを選択します。

image.png

データベースの画面に戻ると、ステータスが変わり、アップグレード待ちの状態になっています。

image.png

アップグレード実行後にバージョンを確認すると以下のように10.7へアップグレードされていることが確認できます。

postgres=> SHOW SERVER_VERSION;
 server_version 
----------------
 10.7
(1 row)

イベントを確認すると、以下のように「Database cluster has been patched」と出力されていました。

image.png

最後に拡張機能は自動でアップグレードされませんので、必要に応じて手動でアップグレードします。
現在の拡張機能を確認するには以下のように実行します。

postgres=> select * from pg_available_extensions;
             name             | default_version | installed_version |                                                       comment                                                       
------------------------------+-----------------+-------------------+---------------------------------------------------------------------------------------------------------------------
 dblink                       | 1.2             |                   | connect to other PostgreSQL databases from within a database
 pg_repack                    | 1.4.3           |                   | Reorganize tables in PostgreSQL databases with minimal locks
 hstore                       | 1.4             |                   | data type for storing sets of (key, value) pairs
 postgis_tiger_geocoder       | 2.4.4           |                   | PostGIS tiger geocoder and reverse geocoder
 pg_visibility                | 1.2             |                   | examine the visibility map (VM) and page-level visibility info
 orafce                       | 3.6             |                   | Functions and operators that emulate a subset of functions and packages from the Oracle RDBMS
 prefix                       | 1.2.0           |                   | Prefix Range module for PostgreSQL
 isn                          | 1.1             |                   | data types for international product numbering standards
~省略~

installed_versionがdefault_versionより古い場合はアップグレードしておきましょう。(今回はありませんが)
アップグレードするためには以下のコマンドを実行します。

ALTER EXTENSION [拡張名] UPDATE TO [新しいバージョン];

今回はコンソールからアップグレードを実行しましたが、他にもAWS CLIとRDS APIで変更することができます。

参考

8
8
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
8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?