Amazon Redshift
クラスター管理ガイド (API バージョン 2012-12-01)

Amazon Redshift スナップショット

概要

スナップショットはクラスターのポイントインタイムバックアップです。スナップショットには、自動手動の 2 つのタイプがあります。Amazon Redshift は、暗号化された Secure Sockets Layer (SSL) 接続を使用して、これらのスナップショットを Amazon S3 の内部に保存できます。

Amazon Redshift は、前回のスナップショット以降にクラスターに加えられた増分変更を追跡する、増分スナップショットを自動的に作成します。自動スナップショットは、スナップショットからクラスターを復元するために必要なすべてのデータを保持します。自動スナップショットをいつ作成するかを制御するためにスナップショットスケジュールを作成できます。また、いつでも手動スナップショットを作成することもできます。

スナップショットから復元すると、Amazon Redshift は新しいクラスターを作成し、すべてのデータをロードする前に新しいクラスターを使用できるようにするので、すぐに新しいクラスターのクエリを開始できます。クラスターは、アクティブなクエリに応じてスナップショットからデータをオンデマンドでストリーミングし、次に残りのデータをバックグラウンドでロードします。

クラスターを起動するとき、自動スナップショットと手動スナップショットの保持期間を設定できます。クラスターを変更して、自動スナップショットと手動スナップショットの保持期間を変更できます。スナップショットを作成するか、スナップショットを変更して、手動スナップショット保持期間を変更できます。

スナップショットの進行状況は、AWS マネジメントコンソール でスナップショットの詳細を表示するか、CLI または DescribeClusterSnapshots API アクションで describe-cluster-snapshots を呼び出すことによってモニタリングすることができます。これにより、進行中のスナップショットについて、差分スナップショットのサイズ、転送速度、経過時間、および推定残り時間などの情報が表示されます。

バックアップを常にクラスタで使用できるようにするために、Amazon Redshift は、Amazon Redshift の管理対象の内部管理 Amazon S3 バケットにスナップショットを保存します。Amazon Redshift は、クラスターを削除するまで、クラスターのストレージ容量に等しいスナップショット用の空きストレージを提供します。無料スナップショットストレージ制限に達した場合、追加のストレージには通常料金が請求されます。このため、スナップショットを保持する必要がある日数を評価し、それに応じて保持期間を設定して、不要になった手動スナップショットは削除してください。料金表については、Amazon Redshift の製品詳細ページを参照してください。

自動スナップショット

自動スナップショットがクラスターに対して有効になると、Amazon Redshift は定期的にそのクラスターのスナップショットが作成されます。デフォルトでは、Amazon Redshift は約 8 時間ごと、または 1 ノードのデータが変更されるごとに 5 GB ごと (あるいはそのいずれか早い方) にスナップショットを作成します。または、自動スナップショットを作成するタイミングを制御するためにスナップショットスケジュールを作成することができます。自動スナップショットは、クラスターを作成するときデフォルトで有効になります。

自動スナップショットは、保持期間の終了時に削除されます。デフォルトの保持期間は 1 日ですが、Amazon Redshift コンソールを使用するか、Amazon Redshift API または CLI を使用してプログラムにより変更できます。

自動スナップショットを無効にするには、保持期間を 0 に設定します。自動スナップショットを無効にした場合、Amazon Redshift はスナップショットの取得を停止し、クラスターの既存の自動スナップショットを削除します。

Amazon Redshift だけが自動スナップショットを削除できます。手動で削除することはできません。自動スナップショットは、保存期間が終了した場合、クラスターの自動スナップショットを無効にした場合、またはクラスターを削除した場合に、Amazon Redshift によって削除されます。自動スナップショットを無効にするかクラスタを削除するまで、Amazon Redshift は最新の自動スナップショットを保持します。

自動スナップショットをもっと長い期間保持する場合は、そのコピーを手動スナップショットとして作成します。自動スナップショットは、保持期間が終わるまで保持されますが、対応する手動スナップショットは手動で削除するまで、または保持期間が終わるまで保持されます。

自動スナップショットのスケジュール

スナップショットを作成するタイミングを正確に制御するために、スナップショットスケジュールを作成し、それを 1 つ以上のクラスターにアタッチすることができます。スナップショットスケジュールを変更すると、関連付けられているすべてのクラスターのスケジュールが変更されます。クラスターにスナップショットスケジュールがアタッチされていない場合、クラスターはデフォルトの自動スナップショットスケジュールを使用します。

スナップショットスケジュール は、一連のスケジュールルールです。指定した間隔 (8 時間ごと、12 時間ごとなど) に基づいてシンプルなスケジュールルールを定義できます。特定の曜日、特定の時間、特定の期間にスナップショットを作成するためのルールを追加することもできます。ルールは Unix 互換の cron 式を使って定義することもできます。

スナップショットスケジュール形式

Amazon Redshift コンソールで、スナップショットスケジュールを作成できます。その後、スケジュールをクラスターにアタッチしてシステムスナップショットの作成をトリガーできます。スケジュールは複数のクラスターにアタッチでき、スナップショットをトリガーするためにスケジュール内に複数の cron 定義を作成できます。

cron 構文を使用してスナップショットのスケジュールを定義できます。これらのスケジュールの定義は、変更された Unix 互換の cron 構文を使用します。協定世界時 (UTC) で時間を指定します。最大頻度 1 時間、最小精度 1 分のスケジュールを作成できます。

Amazon Redshift の変更された cron 式には 3 つの必須フィールドがあり、それらは空白で区切られます。

[構文]

cron(Minutes Hours Day-of-week)
フィールド [] [ワイルドカード]

0–59

時間

0–23

, - * /

曜日

1~7 または SUN-SAT

, - * /

ワイルドカード

  • ワイルドカード [,] (カンマ) には追加の値が含まれます。Day-of-week フィールドの、MON,WED,FRI は、月曜日、水曜日、金曜日を含みます。合計値はフィールドあたり 24 に制限されています。

  • ワイルドカード [-] (ダッシュ) は範囲を指定します。Hour フィールドの、1~15 は、指定した日の 1 時間から 15 時間を含みます。

  • ワイルドカード [*] (アスタリスク) にはフィールドのすべての値が含まれます。Hours フィールドの、* にはすべての時間が含まれています。

  • ワイルドカード [/] (スラッシュ) で増分を指定します。Hours フィールドで、1/10 と入力して、その日の最初の時間から始めて、10 時間毎を指定できます (01:00、11:00、21:00 など)。

制限

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

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

時間 曜日 意味

0

14-20/1

毎週火曜日の午後 2 時から午後 8 時の間。

0

21

MON-FRI

月曜日~金曜日の毎晩午後 9 時。

30

0/6

土 - 日

土曜日と日曜日は、その日の深夜 30 分過ぎ (00: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)"

手動スナップショット

手動スナップショットはいつでも取得できます。デフォルトでは、手動スナップショットは、クラスターを削除した後も、無限に保持されます。手動スナップショットを作成するときに保持期間を指定できます。スナップショットを変更して保持期間を変更することもできます。Amazon Redshift コンソールを使用してスナップショットを作成した場合、スナップショットの保存期間はデフォルトで 365 日になります。

スナップショットを削除した場合、そのスナップショットを参照する新しいオペレーションを開始することはできません。ただし、復元操作が進行中である場合、その復元操作は完了するまで実行されます。

Amazon Redshift には、作成できる手動スナップショットの合計数を制限するクォータがあります。このクォータは AWS アカウントごと、リージョンごとにあります。デフォルトクォータは「AWS サービスの制限」に示されています。

スナップショットストレージの管理

スナップショットにはストレージ料金が発生するため、不要になったら削除することが重要です。Amazon Redshift は、それぞれのスナップショット保存期間の終わりに自動および手動スナップショットを削除します。AWS マネジメントコンソールまたは batch-delete-cluster-snapshots CLI コマンドを使用して手動スナップショットを削除することもできます。

手動スナップショット設定を変更して、手動スナップショット保持期間を変更できます。

Amazon Redshift コンソールまたは CLI コマンド describe-storage を使用すると、スナップショットが使用しているストレージ容量に関する情報を取得できます。

スナップショットのテーブルを除く

デフォルトでは、スナップショットにすべてのユーザー定義の永続テーブルが含まれます。ステージングテーブルなど、テーブルをバックアップする必要のない場合は、スナップショットの作成やスナップショットからの復元にかかる時間を大幅に短縮できます。さらに、バックアップしないテーブルを使用して、Amazon S3 のストレージ領域を節約することができます。バックアップしないテーブルを作成するには、テーブルの作成時に BACKUP NO のパラメータを含めてください。詳細については、『Amazon Redshift Database Developer Guide』の「CREATE TABLE」および「CREATE TABLE AS」を参照してください。

別のリージョンにスナップショットをコピーする

クラスターのスナップショット (自動または手動) を自動的に別のリージョンにコピーするように Amazon Redshift を設定できます。スナップショットがクラスターのプライマリリージョンで作成されると、セカンダリリージョンにコピーされます。これらは、それぞれソースリージョンおよびコピー先リージョンと呼ばれます。別のリージョンにスナップショットのコピーは保存することで、プライマリリージョンに影響が及んだ場合に最新のデータからクラスターを復元できるようになります。一度に 1 つのコピー先リージョンにのみスナップショットをコピーするようにクラスターを設定できます。Amazon Redshift リージョンのリストについては、『アマゾン ウェブ サービス全般のリファレンス』の「リージョンとエンドポイント」を参照してください。

Amazon Redshift が別のリージョンに自動的にコピーできるようにするには、スナップショットのコピー先リージョンを指定します。自動スナップショットの場合、コピー先リージョンに保持する保持期間も指定できます。自動スナップショットがコピー先リージョンにコピーされ、保有期間に到達すると、スナップショット使用率を低く抑えるため、コピー先リージョンから削除されます。自動スナップショットをコピー先リージョンに短い期間または長い期間保持する必要があるばあいは、この保持期間を変更できます。

コピー先リージョンにコピーされる自動スナップショットに対して設定する期間は、ソースリージョンの自動スナップショットの保存期間とは異なります。コピーされたスナップショットのデフォルトの保持期間は 7 日です。その 7 日間は、自動スナップショットにのみ適用されます。コピー元リージョンおよび送信先リージョンの両方で、手動スナップショットは、スナップショット保存期間の終わりまたは手動で削除すると削除されます。

クラスターの自動スナップショットコピーはいつでも無効にできます。この機能を無効にすると、スナップショットがソースリージョンからコピー先リージョンにコピーされなくなります。コピー先リージョンにコピーされら自動スナップショットは、手動スナップショットコピーを作成しない限り、保持期間の制限に達すると削除されます。これらの手動スナップショットと、コピー先リージョンからコピーされた手動スナップショットは、手動で削除するまでコピー先リージョンに保持されます。

スナップショットをコピーするコピー先リージョンを変更する場合、まずこの自動コピー機能を無効にして再度有効にした後、新しいコピー先リージョンを指定する必要があります。

リージョンをまたがってスナップショットをコピーすると、データ転送料金が発生します。スナップショットがコピー先リージョンにコピーされると、アクティブになり、復元目的で利用できるようになります。

AWS KMS で暗号化されたクラスターのスナップショットを別のリージョンにコピーする場合、コピー先のリージョンで AWS KMS カスタマーマスターキー (CMK) を使用する Amazon Redshift の許可を作成する必要があります。その場合、コピー元リージョンでスナップショットのコピーを有効にするときに、その許可を選択する必要があります。スナップショットコピー許可の設定に関する詳細については、「別の AWS リージョンに AWS KMS 暗号化スナップショットをコピーする」を参照してください。

スナップショットからのクラスターの復元

スナップショットには、クラスター上で動作しているデータベースからのデータと、クラスターに関する情報 (ノード数、ノートのタイプ、マスターユーザー名など) が含まれます。スナップショットからクラスターを復元する必要がある場合は、Amazon Redshift でクラスター情報を使用して新しいクラスターを作成し、スナップショットデータからすべてのデータベースを復元します。Amazon Redshift がスナップショットから作成した新しいクラスターの設定 (ノード数やノードのタイプなど) は、スナップショットが取得された元のクラスターの設定と同じです。クラスターが復元される場所は、リクエスト時に別のアベイラビリティーゾーンを指定しない限り、同じリージョンおよびアベイラビリティーゾーンとなります。クラスターをスナップショットから復元する場合、新しいクラスターの互換性のあるメンテナンストラックをオプションで選択できます。

DescribeClusters API アクションを呼び出すか、AWS マネジメントコンソールでクラスターの詳細を表示することにより、復元の進行状況をモニタリングできます。これにより、進行中の復元について、スナップショットデータのサイズ、転送速度、経過時間、および推定残り時間などの情報が表示されます。これらのメトリクスの説明については、「RestoreStatus」を参照してください。

スナップショットを使用して、アクティブクラスターを前の状態に切り替えることはできません。

注記

新しいクラスターにスナップショットを復元する場合、別の値を指定しない限り、デフォルトのセキュリティグループおよびパラメータグループが使用されます。

スナップショットからのテーブルの復元

クラスター全体を復元する代わりに、スナップショットから単一のテーブルを復元できます。スナップショットから単一のテーブルを復元する場合、ソースのスナップショット、データベース、スキーマ、テーブル名、ターゲットクラスター、スキーマ、および復元されるテーブル用の新しいテーブル名を指定します。

新しいテーブル名を、既存のテーブルの名前にすることはできません。既存のテーブルを、スナップショットから復元されるテーブルに置き換えるには、スナップショットからテーブルを復元する前に、既存のテーブルの名前を変更するか、削除します。

ターゲットテーブルは、ソーステーブルの列の定義、テーブル属性、および外部キーを除く列の属性を使って作成されます。依存関係による競合を回避するため、ターゲットテーブルはソーステーブルから外部キーを継承しません。ソーステーブルで付与されたビューやアクセス権限などの依存関係は、ターゲットテーブルに適用されません。

ソーステーブルの所有者が存在するなら、そのユーザーは指定されたデータベースおよびスキーマの関係において所有者となるのに十分なアクセス許可がある場合にのみ、復元されたテーブルの所有者となります。それ以外の場合、復元されたテーブルは、クラスターの起動時に作成したマスターユーザーが所有します。

復元されたテーブルは、バックアップが作成された時の状態に戻されます。これには、Redshift の直列化分離への準拠により定義されるトランザクションの可視性のルールが含まれます。つまり、バックアップ後に開始した実行中のトランザクションにデータがすぐに見えるようになるということです。

スナップショットからのテーブルの復元には、以下の制限があります。

  • テーブルは、実行中のアクティブなクラスターのみに復元でき、そのクラスターから作成されたスナップショットのみから復元できます。

  • 一度に復元できるのは 1 つのテーブルのみです。

  • クラスターのサイズを変更する前に作成されたクラスタースナップショットからテーブルを復元することはできません。

Amazon Redshift コンソールを使用してスナップショットからテーブルを復元するには

  1. AWS マネジメントコンソールにサインインし、Amazon Redshift コンソール(https://console.aws.amazon.com/redshift/)を開きます。

  2. [クラスター] を選択し、クラスターを選択します。

  3. [Table restore (テーブルの復元)] タブを選択します。

  4. [テーブルの復元] を選択します。

  5. [Table restore (テーブルの復元)] パネルで、復元元のクラスタースナップショットを含む日付範囲を選択します。たとえば、先週に作成したクラスタースナップショットの場合は [Last 1 Week] を選択します。

  6. 以下の内容を追加します。

    • [スナップショットから] – 復元元のテーブルを含むクラスタースナップショットの識別子。

    • [Source table to restore from (復元元のソーステーブル)]

      • [データベース] – 復元元のテーブルを含むクラスタースナップショットからのデータベースの名前。

      • [スキーマ] – 復元元のテーブルを含むクラスタースナップショットからのデータベーススキーマの名前。

      • [テーブル] – クラスタースナップショットの復元元のテーブルの名前。

    • [復元先のターゲットテーブル]

      • [データベース] – テーブルの復元先となるターゲットクラスターのデータベースの名前。

      • [スキーマ] – テーブルの復元先となるターゲットクラスターのデータベーススキーマの名前。

      • [新しいテーブル名] – 復元されるテーブルの新しい名前。この名前をターゲットデータベースの既存のテーブルの名前とすることはできません。

  7. [復元] を選択してテーブルを復元します。

クラスタースナップショットから少なくとも 1 つのテーブルを復元した場合、前のテーブル復元リクエストの値を、新しいテーブル復元リクエストにコピーできます。この方法を使用すれば、いくつかのテーブル復元オペレーションで同じになる値を再入力する必要がありません。

前のテーブル復元リクエストから新しいテーブル復元オペレーションにコピーするには:

  1. [Table restore (テーブルの復元)] タブで、既存のテーブルの復元ステータスを選択します。

  2. [復元リクエストのコピー] を選択します。

例: AWS CLI を使用してスナップショットからテーブルを復元する

次の例では、restore-table-from-cluster-snapshot AWS CLI コマンドを使用して、my-source-tablesample-database スキーマから my-snapshot-id テーブルを復元します。例では、新しいテーブルの名前 mycluster-example を使用して、my-new-table クラスターにスナップショットを復元します。

aws redshift restore-table-from-cluster-snapshot --cluster-identifier mycluster-example --new-table-name my-new-table --snapshot-identifier my-snapshot-id --source-database-name sample-database --source-table-name my-source-table

スナップショットの共有

1 つの既存の手動スナップショットについては、そのスナップショットへのアクセスを許可することにより、他の AWS 顧客アカウントのユーザーと共有することができます。各スナップショットは最大 20 個、各 AWS Key Management Service (AWS KMS) キーは最大 100 個まで許可できます。つまり、1 つの KMS キーで暗号化された 10 個のスナップショットがある場合、10 個の AWS アカウントで、各スナップショットを復元することを許可できます。または、最大 100 個のアカウントのその他の組み合わせや、スナップショットごとに 20 アカウントを超えないその他の組み合わせを許可できます。アクセス権限が付与されたいずれかのアカウントのユーザーとしてログインされた担当者は、スナップショットを表示することも、当該アカウントでスナップショットを復元して新しい Amazon Redshift クラスターを作成することもできます。例えば、実稼働用およびテスト用に個別の AWS 顧客アカウントを使用する場合、ユーザーは本番用アカウントを使用してログオンし、テスト用アカウントのユーザーとスナップショットを共有することができます。テスト用アカウントのユーザーとしてログオンされた担当者は、テストまたは診断作業のためのテスト用アカウントによって所有される新しいクラスターを作成するためにスナップショットを復元することができます。

手動スナップショットは、それが作成された AWS 顧客アカウントによって永続的に所有されます。スナップショットを所有するアカウントのユーザーのみが、スナップショットへのアクセスを他のアカウントに許可したり、アクセス許可を取り消したりすることができます。アクセス権限が付与されたアカウントのユーザーは、そのアカウントと共有されているスナップショットの表示または復元が行えるだけで、共有されているスナップショットのコピーや削除を行うことはできません。アクセス許可はスナップショットの所有者がそれを取り消すまで有効です。アクセス許可が取り消されると、前にアクセス権限を付与されたユーザーはスナップショットの可視性を失い、スナップショットを参照する新しいアクションを起動できなくなります。アクセス権限が取り消される際、アカウントがスナップショットを復元するプロセスの途中にあった場合、復元は完了するまで実行されます。スナップショットにアクティブ認可がある限り、そのスナップショットを削除することはできません。まず、すべてのアクセス許可を取り消す必要があります。

AWS 顧客アカウントには、該当するアカウントによって所有されるスナップショットへのアクセスが常に許可されます。所有者アカウントへのアクセスを許可する試みまたは取り消す試みを行うと、エラーが発生します。非アクティブ AWS 顧客アカウントによって所有されているスナップショットを復元または表示することはできません。

AWS 顧客アカウントへのアクセスを許可した場合、そのアカウントの IAM ユーザーはスナップショットでのアクションの実行を許可する IAM ポリシーを持っていない限り、そのようなアクションを実行できません。

  • スナップショット所有者アカウントの IAM ユーザーがスナップショットへのアクセスを許可および取り消しできるのは、それらのユーザーが、当該スナップショットが含まれるリソース仕様を使用してそうしたアクションを実行することを許可してくれる IAM ポリシーを持っている場合に限られます。たとえば、以下のポリシーを持っていれば、AWS アカウント 012345678912 のユーザーは、my-snapshot20130829 という名前のスナップショットへのアクセスを他のアカウントに許可することができます。

    { "Version": "2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "redshift:AuthorizeSnapshotAccess", "redshift:RevokeSnapshotAccess" ], "Resource":[ "arn:aws:redshift:us-east-1:012345678912:snapshot:*/my-snapshot20130829" ] } ] }
  • スナップショットが共有されている AWS AWS アカウントの IAM ユーザーは、それらのアクションを許可する IAM ポリシーがない限り、そのスナップショットでアクションを実行できません。

    • スナップショットを一覧表示するか、または表示するためには、前述ユーザーは DescribeClusterSnapshots アクションを許可する IAM ポリシーを持っている必要があります。コードの例を以下に示します。

      { "Version": "2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "redshift:DescribeClusterSnapshots" ], "Resource":[ "*" ] } ] }
    • スナップショットを復元するには、ユーザーは、RestoreFromClusterSnapshot アクションを許可すると共に、ユーザーが作成しようとしているクラスターとスナップショットを両方ともカバーしたリソースエレメントを含んでいる IAM ポリシーを持っている必要があります。たとえば、アカウント 012345678912 のユーザーがスナップショット my-snapshot20130829 をアカウント 219876543210 と共有している場合、スナップショットを復元してクラスターを作成するには、アカウント 219876543210 のユーザーが次のようなポリシーを持っている必要があります。

      { "Version": "2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "redshift:RestoreFromClusterSnapshot" ], "Resource":[ "arn:aws:redshift:us-east-1:012345678912:snapshot:*/my-snapshot20130829", "arn:aws:redshift:us-east-1:219876543210:cluster:from-another-account" ] } ] }
    • スナップショットへのアクセスが AWS アカウントによって取り消されると、そのアカウントのユーザーは、前に共有していたスナップショットリソースでのアクションを許可する IAM ポリシーを持っていたとしても、スナップショットにアクセスできなくなります。