[アップデート] Amazon RDS でインスタンスの作成・復元時に延長サポートをオプトアウトする API が追加されました

2024.05.24

いわさです。

Amazon RDS の PostgreSQL、MySQL では標準のサポート期限切れのタイミングから最大3年間の追加のサポートを得ることができる「延長サポート」の概念があります。

この延長サポートですが、発表当初はオプトイン API が提供される予定で明示的に延長サポートを有効化しない場合は自動でアップグレードされるとアナウンスされていましたが、ユーザーからのフィードバックを受けてあるタイミングで延長サポートに自動登録される方針に変更となりました。

これが先日のアップデートでインスタンスの作成/復元時に延長サポートを選択出来るようになりました。

この機能、どういうケースで必要になるのかまだあまりピンと来てないのですが、以下の記述からすると標準サポート終了後は意図的に失敗させて予期せぬ延長サポート料金が発生しないように制御したい場合に使うのではないかと思いました。自動化のスクリプトなどで明示的にオプトアウトを指定させておきたい場合に対応出来るように API から指定が可能になった。という感じでしょうか。

コンソールや API を操作してみたので様子を紹介したいと思います。

作成時の挙動

まず、コンソールから新規インスタンスを作成する際は次のように「RDS 延長サポートの有効化」を選択する必要があります。
こちらを明示的に選択しないと新規作成が出来ませんでした。

有効化して作成した 5.7.44 の場合は次のように「設定」タブにて「RDS 延長サポート」のステータスが有効になりました。

今回 AWS API もアップデートされており、describe-db-instancesではEngineLifecycleSupportプロパティが追加されています。
値のopen-source-rds-extended-supportは延長サポートが有効な状態です。

% aws-v1 rds describe-db-instances --db-instance-identifier hoge0521mysql57
{
    "DBInstances": [

:

            "CertificateDetails": {
                "CAIdentifier": "rds-ca-rsa2048-g1",
                "ValidTill": "2027-05-21T01:17:17Z"
            },
            "DedicatedLogVolume": false,
            "IsStorageConfigUpgradeAvailable": false,
            "EngineLifecycleSupport": "open-source-rds-extended-support"
        }
    ]
}

なお、MySQL 8.0.35 を延長サポートを有効化せずに作成した場合は次のように値がopen-source-rds-extended-support-disabledとなりました。

% aws-v1 rds describe-db-instances --db-instance-identifier hoge0521mysql  
{
    "DBInstances": [

:

            "CertificateDetails": {
                "CAIdentifier": "rds-ca-rsa2048-g1",
                "ValidTill": "2025-05-21T01:08:15Z"
            },
            "DedicatedLogVolume": false,
            "IsStorageConfigUpgradeAvailable": false,
            "EngineLifecycleSupport": "open-source-rds-extended-support-disabled"
        }
    ]
}

CreateDbInstance などのデータベースあるいはクラスターの作成時のオプションとしてEngineLifecycleSupportが指定出来るようになっています。先ほどコンソールから有効化した時の実行ログは次のように明示的に延長サポートが指定されていました。

{
    "eventVersion": "1.08",

:

    "requestParameters": {
        "dBName": "",
        "dBInstanceIdentifier": "hoge0521mysql57",
        "allocatedStorage": 20,
        "dBInstanceClass": "db.t3.micro",

:

        "multiTenant": false,
        "engineLifecycleSupport": "open-source-rds-extended-support"
    },

:
}

これはわかりやすいですね。
この延長サポートステータスは新規作成、あるいは後述の復元時に指定が可能です。

既存インスタンスの変更 API ではサポートされていないため、延長サポートが有効なインスタンスを無効に更新することは出来ません。スナップショットからの復元などをお試しください。

復元時の挙動

一方でスナップショットから復元する時の動作が少し怪しかったので共有します。
もしかすると、期待していた動きではなく今後変更されるかもしれません。

新規作成時と同様に「RDS 延長サポートの有効化」を選択せずにスナップショットを復元してみました。スナップショットのバージョンは MySQL 5.7.44 です。

そうすると RDS 延長サポートが無効な状態でインスタンスを作成することが出来ました。てっきり RDS 延長サポートが無効な場合はエラーとなるか、あるいは強制的に 8.0 系にアップグレードされるものかと思いましたがそのまま復元出来ましたね。うーん?

API のログを見てみると明示的にEngineLifecycleSupportを指定して復元しているので、コンソールの操作はきちんと反映されていると思いますが、復元出来て良いのかなという気がちょっとします。

{
    "eventVersion": "1.08",

:

    "requestParameters": {
        "dBInstanceIdentifier": "hoge0524mysql",
        "dBSnapshotIdentifier": 
        "dBInstanceClass": "db.m5.xlarge",
        "port": 3306,
        "dBSubnetGroupName": "default",
        "publiclyAccessible": false,
        "autoMinorVersionUpgrade": true,
        "engine": "mysql",
        "optionGroupName": "default:mysql-5-7",
        "tags": [],
        "storageType": "gp2",
        "vpcSecurityGroupIds": [
            "sg-ea2297a6"
        ],
        "copyTagsToSnapshot": true,
        "enableIAMDatabaseAuthentication": false,
        "enableCloudwatchLogsExports": [],
        "processorFeatures": [],
        "dBParameterGroupName": "default.mysql5.7",
        "deletionProtection": false,
        "engineLifecycleSupport": "open-source-rds-extended-support-disabled"
    },
 
:

}

そしてそのまま延長サポート向けのマイナーバージョンに更新することも出来ました。
RDS 延長サポートは無効なままですね。

もしかして次のメンテナンスのタイミングで自動でメジャーバージョンアップグレードされるとか、そういう挙動になるのだろうか。

さいごに

本日は Amazon RDS でインスタンスの作成・復元時に延長サポートをオプトアウト出来るようになったので確認してみました。

まず、インスタンスやクラスターの新規作成時・復元時・参照時にEngineLifecycleSupportオプションが指定されました。
自動で延長サポートがすべて有効化されるわけではなく、オプトアウト出来るようになりました。ただし既存へのサポートステータスの変更は出来ずに作成・復元時のみ指定可能となります。
既存のインスタンス作成スクリプトなどで明示的に指定しておくと、将来意図せず延長サポートが自動有効化されていた、という事象を回避出来るかもしれません。

一方スナップショットから復元する際の挙動はちょっと違う気がしますね。RDS 延長サポートが自動で有効化されるか復元に失敗するか、強制的にメジャーバージョンアップされるのが正しい気がします。
復元については数日後にまた試してみたいと思います。