Amazon RedshiftのスナップショットをAWSアカウント間で共有する

2015.07.17

開発用のAWSアカウント環境下にあるRedshiftのデータベースを、本番用のAWSアカウント環境下にコピーしたい(またはその逆パターン)、そんな時に使えるのがスナップショットの共有です。

AMIやEBSスナップショットの共有と類似の手順で、Redshiftのスナップショットも簡単にAWSアカウント間で共有することが可能です。今回はRedshiftのスナップショットを共有し、共有先のAWSアカウントでそのスナップショットからRedshiftクラスターをリストアする手順をご紹介します。

※AMIやEBSスナップショットの共有については以下のブログエントリをご参照下さい。

AMIやEBSスナップショットを特定アカウントと共有する | Developers.IO

スナップショット共有の制約事項

Redshiftのスナップショット共有に関していくつか制限事項がありますので、はじめにこれを整理しておきます。

  • 手動スナップショットのみ共有可能(自動スナップショットは共有不可)
  • 共有可能なAWSアカウント数 = 最大20アカウント
  • 共有先のアカウントでは、スナップショットの削除やアクセス権の変更を行うことは出来ない

また、実際にスナップショットの共有に関するオペレーションを実行するIAMユーザーには適切なIAMポリシーを割り当てる必要があります。

|IAMユーザー|必要な権限(Action)| |:--|:--| |共有元のIAMユーザー|スナップショットへのアクセス権を付与 : "redshift:AuthorizeSnapshotAccess" スナップショットへのアクセス権を取削除 :"redshift:RevokeSnapshotAccess" |共有先のIAMユーザー|スナップショットの表示 : "redshift:DescribeClusterSnapshots" スナップショットのリストア : "redshift:RestoreFromClusterSnapshot"

IAMポリシーの具体的な例は、Amazon Redshift スナップショット - Amazon Redshift「スナップショットの共有」の項目をご参照下さい。

共有元AWSアカウントでの作業

スナップショットの作成

まずは手動でスナップショットを作成します。

▼ 共有元AWSアカウントで、Redshiftのマネジメントコンソールを開く

▼ 「Snapshots」-「Create Snapshot」をクリック

sharing-snapshots-of-redshift-1

▼ スナップショット名(「Snapshot Identifier」)を入力し、「Create」をクリック

sharing-snapshots-of-redshift-2

スナップショットの共有(スナップショットのアクセス権の設定)

続いて作成したスナップショットのアクセス許可リストに、共有先のAWSアカウントを追加します。

▼ 作成したスナップショットを選択し、「Action」-「Manage Access」を選択

sharing-snapshots-of-redshift-3

▼ 共有先のAWSアカウントIDを入力し、「Add Account」をクリック

sharing-snapshots-of-redshift-4

▼ アクセス許可リストに共有先のAWSアカウントIDが追加されたことを確認し、「Save」をクリック

sharing-snapshots-of-redshift-5

以上でスナップショットの共有設定は完了です。

共有先AWSアカウントでの作業

共有されたスナップショットからRedshiftクラスターのリストアを実行します。

スナップショットからのRedshiftクラスターのリストア

▼ 共有先AWSアカウントで、Redshiftのマネジメントコンソールを開く

▼ 「Snapshots」を選択

  • 共有されたスナップショットが表示されます。「Owner Account ID」は共有元のAWSアカウントになっていることが確認できます。

sharing-snapshots-of-redshift-7

▼ スナップショットを選択し、「Actions」-「Restore From Snapshot」を選択

  • 共有先のAWSアカウントでは、「Delete Manual Shapshot」と「Manage Access」は選択不可となっていることが確認できます。

sharing-snapshots-of-redshift-7

▼ クラスターの設定(ノードタイプなど)を選択/入力し、「Restore」をクリック

sharing-snapshots-of-redshift-8

共有されたスナップショットからRedshiftクラスターのリストアが実行されます。

スナップショットの削除

共有元のAWSアカウントで、共有されたスナップショットを削除しようとすると以下のエラーが発生します。

sharing-snapshots-of-redshift-11

スナップショットを削除する場合は、先に共有設定を解除する必要があります。

▼ 削除対象のスナップショットを選択し、「Manage Access」を選択

sharing-snapshots-of-redshift-12

▼ アクセス許可リストから共有先のAWSアカウントを削除し、「Save」をクリック

sharing-snapshots-of-redshift-13

redshift-snapshot-share-14

これでスナップショットの共有設定が解除されたので、スナップショットを削除できます。

まとめ

AWSアカウントを跨いでRedshiftのデータベースをコピーしたい場合、元データはS3に(CSV形式などで)永続化されているパターンが多いかと思いますので、それを使って一からデータベースを構築する方法もありますが、簡単操作でコピーを行いたい場合は今回ご紹介したスナップショットの共有も有力な選択肢になるかと思います。