Amazon Redshift cronライクに自動スナップショットを取得できる『スナップショットスケジューラ』がリリースされました

目次

はじめに

これまで Amazon Redshiftの自動スナップショットは、5GB以上の更新もしくは8時間毎のいずれかで自動的にスナップショットを取得します。『スナップショットスケジューラ』はこの自動スナップショットを任意の条件で取得できるなります。実際にスナップショットスケジューラを利用した自動スナップショットの取得方法をご紹介します。

スナップショットスケジューラとは

これまでの自動スナップショットは、5GB以上の更新もしくは8時間毎のスケジュールのいずれかで自動的にスナップショットを取得します。スナップショットスケジューラは、このスケジュールの部分を任意にカスタマイズできる機能になります。設定したスナップショットスケジューラはクラスタに割り当てることでスナップショットの自動取得の設定が反映されます。

つまり、スナップショットスケジューラにスケジュールを事前設定(テンプレート化)したり、複数のクラスタのスケジュール設定を一元管理できるようになります。

[Snapshut Schedulers]という新しいタブが追加されています。[Add Scheduler]ボタンを押すと設定ダイアログが表示されます。

※ 上記のリリースでは下記のような記載がありますが、執筆時点(2019/04/07)では3の機能のみ提供となりますので、3の機能を重点的に紹介しています。

Amazon Redshiftは以下の機能を提供します。

  1. どのクラスターにも関連付けられていないスナップショットを表示して、不要なスナップショットを削除できるようになる
  2. スナップショットを一括削除して、不要なスナップショットをすばやく削除してS3ストレージの使用量を削減できる
  3. スナップショットスケジューラを使用して、クラスタの自動スナップショットスケジュールを制御します。スナップショットのスケジュールは、APIまたはAWSマネジメントコンソールを介してcron形式で設定できます。自動スナップショットを作成するタイミングを完全に制御するために、スケジュールを作成してそのスケジュールをクラスタに設定できます。

※ 上記1, 2について、弊社しんやさんが書いてくれました。

Amazon Redshift: 自動スナップショットの「お掃除」がラクになりました

設定方法

スナップショットスケジューラは、時間や曜日をメニューから選択・カスタマイズして設定する方法と、cron形式で設定する方法の2種類あります。設定したスナップショットスケジューラをクラスタに割り当てることでスナップショットの自動取得の設定が反映されます。

メニューから選択・カスタマイズして設定

最初はデフォルトの8時間ごとにスナップショットを取得する設定が表示されます。ここでは1時間に設定します。[Add Scheduler]ボタンを押すと一覧に追加されます。

スケジュールが登録されましたが、そのままではまだ設定をクラスタに適用していない状態です。[No Cluster]リンクをクリックして、対象クラスタを割り当てます。スケジュールの一覧に、スケジュールとクラスタが割り当てられていることが確認できます。

上記の設定をすると、1回目は直ちに実行され、それ以降は1時間毎に実行されています。

時間や曜日を選択・カスタマイズして設定

[Configure custom automated snapshuts rules]を選択すると、下にメニューが表示されます。

メニューからいずれかを選択すると、その条件に基づいてRULEが設定されます。その設定値を必要に応じてカスタマイズ可能です。なお、さらに[Add Schedule]ボタンを押して、複数のスケジュール定義を作成できます。

cron形式で設定

[Configure custom automated snapshuts to be taken]を選択すると、下にメニューが表示されます。なお、さらに[Add Schedule]ボタンを押して、複数のcronスケジュール定義を作成できます。時間は世界協定時刻(UTC)(日本時間−9時間)で指定します 。最大1時間、最小精度1分のスケジュールを作成できます。

cron構文

cron(Minutes Hours Day-of-week)
Fields Values Wildcards
Minutes 0–59
Hours 0–23 , - * /
Day-of-week 1–7 or SUN-SAT , - * /

cron形式のワイルドカード

  • ,(カンマ)ワイルドカードは、複数の値を含めます。Day-of-weekフィールド MON,WED,FRIは、月曜日、水曜日、金曜日が含むことを表します。合計値は1フィールドあたり24に制限されています。
  • - (ダッシュ)ワイルドカードは、範囲を指定します。 Hourフィールドの場合、1-15は1時から15時までを表します。
  • *(アスタリスク)ワイルドカードは、フィールド内のすべての値を表します。Hoursフィールドの場合、*には1時間ごとを表します。
  • /(スラッシュ)ワイルドカードは、増分を指定します。このHoursフィールドに1/10を指定すると、1日の最初の時間(たとえば、01:00、11:00、および21:00)から10時間ごとに指定するように入力できます。

cronの制限事項

バックアップ頻度が1時間未満または24時間を超えるようなスナップショットスケジュールはサポートされていません。1時間以内にスナップショットをスケジュールするスケジュールが重複していると、検証エラーが発生します。

スケジュールを作成するときは、次のサンプルのcron文字列を使用できます。

曜日 意味
0 14-20/1 TUE 毎週火曜日の午後2時から午後8時の間。
0 21 MON-FRI 毎晩月曜日から金曜日の午後9時。
30 0/6 SAT-SUN 土曜日と日曜日は深夜0時30分以降、6時間ごとに実行します。
[00:30, 06:30, 12:30, 18:30]にスナップショットが作成されます。
30 12/4 * 毎日12:30から4時間ごとに実行します。
[12:30, 16:30, 20:30]にスナップショットが作成されます。

例えば、毎日15:15から2時間ごとでスケジュールに従って実行する場合などです。これは [15:15, 17:15, 19:15, 21:15, 23:15] に解決されます。

cron(15 15/2 *)

スケジュール内に複数のcronスケジュール定義を作成できます。たとえば、次のAWS CLIコマンドでは、1つのスケジュールに2つのcronスケジュールが含まれています。

create-snapshot-schedule --schedule-identifier "my-test" --schedule-definition "cron(0 17 SAT,SUN)" "cron(0 9,17 MON-FRI)"   

設定の解除

作成したスケジュールは、クラスタに設定(Attach)することで設定を有効にしました。逆に設定を無効にするには削除(DettachではなくRemove)します。

スケジュールを削除しても、スケジュールによって取得した自動スナップショットは削除されません。自動スナップショットの削除は、自動スナップショット保持期間を過ぎると自動削除されます。

最後に

深夜・早朝に連携されたデータをロード〜集計〜データマート作成を行うことが多く、この処理の前後でスナップショットを取得したいというユースケースはよくあります。これまで任意のタイミングでスナップショットを取得するには手動スナップショットをAWS SDK、AWSCLIコマンド、APIなどで呼び出すプログラムを作成し、スケジュール実行する必要がありました。更にこの方法はスナップショットを一定期間で削除する実装も必要でした。

今後は、自動スナップショットがスケジュール実行可能になり、一定期間のスナップショットの削除も自動スナップショットの仕組みで自動削除可能になります。

今までScheduled Lambdaで実行していた手動スナップショットの取得を、自動スナップショットの「スナップショットスケジューラ」が適用できないか検討すると良いでしょう。