⌨️

ElastiCacheで保留中の変更内容を確認するにはAWS CLIを使おう(キャンセルが可能かも検証した)

2022/12/02に公開

結論

  • ElastiCacheでの保留中の変更内容は、AWS CLIであれば確認が可能
  • キャンセルはできない(2022年12月1日時点の仕様であり、将来変更されるかもしれない)

マネジメントコンソールからは保留中の変更内容を確認できない

「すぐに適用する」のチェックを外した上で、ElastiCacheのキャッシュノードタイプの変更操作を行なってみます。

その後にマネジメントコンソール上のElastiCacheの画面を見ても、前述の変更が次回のメンテナンスウィンドウに予定されていることは確認できません。

ちなみにRDSであれば、以下のように画面から確認できます。

AWS CLIで保留中の変更内容を確認する

マネジメントコンソールからは保留中の変更内容を確認できませんでしたが、AWS CLIを使うことで保留中の変更内容を確認できます。

aws elasticache describe-cache-clusters
{
    "CacheClusters": [
        {
            "CacheClusterId": "foo-001",
	    "ClientDownloadLandingPage": "https://console.aws.amazon.com/elasticache/home#client-download:",
            "CacheNodeType": "cache.t4g.micro",
	    # 略
            "PendingModifiedValues": {
                "CacheNodeType": "cache.t4g.small"
            },
# 略

現在のCacheNodeTypeはcache.t4g.microです。
そして、PendingModifiedValuesの値を見ると、cache.t4g.smallへの変更が保留中であることがわかります。

なお、今回取り上げた例はCacheNodeTypeの変更でしたが、変更内容によってはreplication-groupのPendingModifiedValuesを確認する必要があると思われます。

aws elasticache describe-replication-groups
{
    "ReplicationGroups": [
        {
            "ReplicationGroupId": "foo",
	    # 略
            "PendingModifiedValues": {
	      # ここに変更内容が反映されると思われる
	    }, 
	    # 略

保留中の変更はキャンセルできない

では、この保留中の変更はキャンセルできるのでしょうか?RDSであれば、AWS CLIで保留中の変更をキャンセルできます。

次のメンテナンスウィンドウで保留中の変更を適用しない場合は、変更を元に戻すように DB インスタンスを変更できます。これを行うには、AWS CLI を使用し、--apply-immediately オプションを指定します。
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html

しかし、ElastiCacheでは、2022年12月1日時点、保留中の変更はキャンセルできませんでした。

変更が保留中であるreplication-groupに対して、現在のキャッシュノードタイプへの変更を「上書き」することでキャンセルが可能か、検証しました。

まず、--apply-immediately(すぐに適用)オプションを付けた場合です。

aws elasticache modify-replication-group \
--replication-group-id foo \
--cache-node-type cache.t4g.micro \
--apply-immediately

これを実行すると、以下のエラーとなりました。

An error occurred (InvalidParameterCombination) when calling the ModifyReplicationGroup operation: The requested action: Scale Down is blocked by the following pending action : Scale Up/Down. Please do one of the following:(1) Perform the pending action(s) now (2) Schedule the requested action for your next maintenance window

いま実行したスケールダウンのリクエストは、保留中のスケールアップ/ダウンによってブロックされたとのことです。

--apply-immediatelyオプションを付けなかった場合は以下です。

An error occurred (InvalidParameterCombination) when calling the ModifyReplicationGroup operation: No modifications were requested

現在と同じ内容で上書きしようとすることが変更内容の無いリクエストとみなされてエラーとなるようです。

今回、キャッシュノードタイプのスケールアップ/ダウンに関する変更でしか検証はしていませんが、保留中の変更のキャンセルはできないようです。次回のメンテナンスウィンドウでの変更が完了するを待って、改めて元に戻す変更操作をする必要があります。

今後ElastiCacheのAPIの仕様が変わって、キャンセル可能になると良いですね。

補足

なお、キャッシュノードタイプを元に戻す(現在の値にする)のではなく、保留中の変更内容(例:cache.t4g.small)から、さらに別の値にする(例:cache.t4g.medium)にすることは可能です。

参考

スマートラウンド テックブログ

Discussion