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 が定期的にそのクラスターのスナップショットを作成します。通常は、8 時間ごとまたはノードあたり 5 GB のデータ変更ごと (あるいはそのいずれか早い方) に作成されます。自動スナップショットは、クラスターを作成するときデフォルトで有効になります。これらのスナップショットは、保持期間の終了時に削除されます。デフォルトの保持期間は 1 日ですが、Amazon Redshift コンソールを使用するか、Amazon Redshift API または CLI を使用してプログラムにより変更できます。

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

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

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

手動スナップショット

手動スナップショットはいつでも取得できます。デフォルトでは、手動スナップショットは、クラスターを削除した後も、無限に保持されます。手動スナップショットを作成するときに保持期間を指定できます。スナップショットを変更して保持期間を変更することもできます。

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

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

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

手動スナップショットにはストレージ料金が発生するので、スナップショットが不要になった場合は削除することが重要です。Amazon Redshift は、スナップショット保持期間の終了時に自動スナップショットおよび手動スナップショットを削除します。AWS マネジメントコンソールまたは batch-delete-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 ポリシーを持っていたとしても、スナップショットにアクセスできなくなります。