Amazon Redshift:AWS CLIでクラスタのメンテナンス遅延設定&メンテナンスウインドウ設定を行う
Amazon Redshiftには『Redshiftクラスタのメンテナンス遅延設定』という操作を行うことが可能です。通常、Amazon Redshiftクラスタは『メンテナンスウインドウ』で指定した日時(時間帯)に、クラスタ自体をアップデートする仕組み・流れとなっています。この作業自体を指定の期間行わないようにする...というのがこの機能です。
この機能、何らかクラスタに不具合が発生していた場合に『クラスタのバージョンをロールバックする』操作と合わせて『パッチが当たるまではメンテナンスウインドウによるアップデート自体を行わないようにする』という形で利用することが時折あるのですが、その際により明確・確実な方法としてAWS CLIを使って行うための手順を備忘録として当エントリで残しておこうと思います。
目次
メンテナンス遅延設定の有効化
メンテナンス遅延設定の有効化(メンテナンスウインドウの更新自体を遅らせる)には、aws redshift modify-cluster-maintenance
を使います。
aws redshift modify-cluster-maintenance \ --cluster-identifier (クラスタID) \ --defer-maintenance \ --defer-maintenance-start-time (開始時刻/UTC) \ --defer-maintenance-end-time (終了時刻/UTC)
コマンド実行前のクラスタメンテナンスウインドウ設定の状態です。(※Amazon Redshift管理コンソール 対象クラスタの[メンテナンスとウインドウ]→[メンテナンス]より)
手元のクラスタに対して、直近数日間『遅延を有効化する』設定を行ってみます。
aws redshift modify-cluster-maintenance \ --cluster-identifier xxxxxxxxxxxxx \ --defer-maintenance \ --defer-maintenance-start-time 2021-02-23T21:30:00Z \ --defer-maintenance-end-time 2021-03-01T21:30:00Z
コマンド実行後の管理コンソール設定。指定した日時が日本時間(JST)表記で表示されていることが確認出来ました。
メンテナンス遅延設定有効化の際、『開始時刻からx日間』という指定も可能です。その場合は--defer-maintenance-duration
オプションで数値を指定してください。(最大45日間まで指定可能です)
% aws redshift modify-cluster-maintenance \ --cluster-identifier xxxxxxxxxxxxx \ --defer-maintenance \ --defer-maintenance-start-time 2021-02-23T21:30:00Z \ --defer-maintenance-duration 45
なお、当エントリでは指定例を2つ続けて紹介していますが、メンテナンスウインドウ遅延設定を新たに行う場合は既存の設定を無効化(削除)してから行ってください。(手順は後述)。
指定日数で遅延設定有効化を行った際の状況がこちら。指定開始日からの日数を反映した内容となっていることが確認出来ました。
メンテナンス遅延設定の無効化
メンテナンス遅延設定の無効化(=既存の遅延設定を削除=メンテナンスウインドウ設定の更新設定に従ってアップデートされるように戻す)についてはaws redshift modify-cluster-maintenance
コマンドを--no-defer-maintenance
オプションを使う形で実行します。
aws redshift modify-cluster-maintenance \ --cluster-identifier (クラスタID) \ --no-defer-maintenance \ --defer-maintenance-identifier (遅延メンテナンスID)
遅延メンテナンスIDは下記コマンドで値を参照・取得可能です。(実行の際はjqを予めインストールしておいてください)
## メンテナンス遅延設定の値を取得 % aws redshift describe-clusters \ --cluster-identifier xxxxxxxxxxxxx \ | jq '.Clusters[].DeferredMaintenanceWindows' [ { "DeferMaintenanceIdentifier": "dfm-xxxxxxxxxxxxxxxxxxxx", "DeferMaintenanceStartTime": "2021-02-23T21:30:00Z", "DeferMaintenanceEndTime": "2021-03-01T21:30:00Z" } ] ## メンテナンス遅延設定の値を取得(IDのみ) % aws redshift describe-clusters \ --cluster-identifier xxxxxxxxxxxxx \ | jq '.Clusters[].DeferredMaintenanceWindows[].DeferMaintenanceIdentifier' "dfm-xxxxxxxxxxxxxxxxxxxx"
コマンド実行及び実行後の『遅延設定』の確認。コマンド実行後は存在していた遅延設定が消えていることを確認出来ました。
% aws redshift modify-cluster-maintenance \ --cluster-identifier xxxxxxxxxxxxx \ --no-defer-maintenance \ --defer-maintenance-identifier dfm-xxxxxxxxxxxxxxxxxxxx % aws redshift describe-clusters \ --cluster-identifier xxxxxxxxxxxxx \ | jq '.Clusters[].DeferredMaintenanceWindows' []
メンテナンス設定日時の変更
クラスタのメンテナンス設定の変更については、aws redshift modify-cluster
コマンドと--preferred-maintenance-window
オプションを使います。
指定内容は開始曜日(略記):開始時間-終了曜日(略記):終了時間
の形式となります(※タイムゾーンはいずれもUTC)
## 既存設定の確認 % aws redshift describe-clusters \ --cluster-identifier xxxxxxxxxxxxx \ | jq '.Clusters[].PreferredMaintenanceWindow' "fri:13:00-fri:13:30" ## メンテナンス設定の更新 % aws redshift modify-cluster \ --cluster-identifier xxxxxxxxxxxxx \ --preferred-maintenance-window thu:04:00-thu:04:30 ## 更新内容の確認 % aws redshift describe-clusters \ --cluster-identifier xxxxxxxxxxxxx \ | jq '.Clusters[].PreferredMaintenanceWindow' "thu:04:00-thu:04:30"
管理コンソールの内容を確認。遅延設定は有効としたままで操作を行ったので、その内容はそのままに、メンテナンスウインドウ設定の値がJSTタイムゾーンで表記されていることが確認出来ました。
まとめ
というわけで、Amazon Redshiftにおける『メンテナンス遅延設定』及び『メンテナンスウインドウ設定』をAWS CLIで行う場合の手順に関する紹介でした。利用頻度はそこまで多くはないと思いますが、いざという時に役に立つかと思いますので是非御利用の際は参考にして頂けますと幸いです。