S3を用いて本番環境のRedShiftから開発環境のRedShiftにデータを移す

こんにちは。データサイエンティスト兼、データ基盤エンジニアのshobyです。

皆さんは、開発環境のRedShiftでテスト用に本番データを使用したい場合にどうやってデータを移していますか?

今回は、S3を用いて本番環境のRedShiftから、開発用のRedShiftにデータを移す方法についてご紹介します。

概要

  • RedShiftの開発環境と本番環境
  • S3を使ったデータの移動
  • TVISION INSIGHTSでの活用事例

RedShiftの開発環境と本番環境

皆さんはRedShiftの開発環境と本番環境をどのように管理していますか?

おそらく開発環境と本番環境の分離度には以下の3段階が存在します。

  1. 同一RedShiftクラスター内で、開発用データベースと、本番用データベースを用意する
  2. 開発用RedShiftクラスターと、本番用RedShiftクラスターをそれぞれ立てる
  3. 開発用AWSアカウントにRedShiftクラスターを立て、本番用AWSアカウントにRedShiftクラスターを立てる

いずれの方式を採用するにせよ、本番環境から開発環境にデータを移すのは一手間かかります。 今回は、どの方式においても簡単にデータを移せるS3を使った方法をご紹介します。

S3を使ったデータの移動

異なる環境のRedShiftにデータを移す場合には、S3を用いて、UNLOADコマンドとCOPYコマンドを使うのが簡単です。

UNLOADはクエリの実行結果をS3にexportするためのコマンドで、COPYはS3などのデータソースからデータをimportするためのコマンドです。

docs.aws.amazon.com

以下の手順でデータの移動を行います。

  1. データ移行用のS3バケットを作成
  2. 移行用S3バケットにアクセス権限があるkeyを発行
  3. 開発環境に本番同等のテーブルを作成
  4. 移行用S3バケットにUNLOAD
  5. 移行用S3バケットからCOPY

docs.aws.amazon.com

データ移行用のS3バケットを作成

移行用に新しく空のバケットを作成します。 UNLOADの出力先は、空のバケット、もしくは空のディレクトリである必要あります。

もし、既に作業用のバケットが存在する場合には、空のディレクトリを作成しても構いません。

移行用S3バケットにアクセス権限があるkeyを発行

IAMで該当のバケットに対するアクセス権限を持つkeyを発行します。

詳細はこの記事では割愛します。以下をご参照ください。

docs.aws.amazon.com

開発環境に本番同等のテーブルを作成

開発環境に本番同等のテーブルを作成します。

既存のテーブル定義は以下のクエリで確認できます。 この結果を元に、CREATE TABLE文を作成します。

SELECT * FROM pg_table_def WHERE tablename = 'target_table';

DataGripを使用している場合には、対象のテーブルを右クリックし、 SQL Scripts > Generate DDL to Clipboard で、 既存テーブルと同等のCREATE TABLE文を生成することができます。

移行用S3バケットにUNLOAD

以下のコマンドでS3バケットにデータをUNLOADすることができます。

UNLOAD ('SELECT * FROM target_table ORDER BY id')
TO 's3://target_bucket/'
ACCESS_KEY_ID 'access_key_id' 
SECRET_ACCESS_KEY 'secret_access_key';

この際、sort_keyでORDER BYをすることにより、COPYの際にsort済みの状態でimportをすることができます。

移行用S3バケットからCOPY

以下のコマンドでS3バケットからデータをCOPYすることができます。

COPY target_table
FROM 's3://target_bucket/'
ACCESS_KEY_ID 'access_key_id' 
SECRET_ACCESS_KEY 'secret_access_key';

TVISION INSIGHTSでの活用事例

TVISION INSIGHTSでは、調査機器のログデータに対する変換処理に手を入れる場合などに、 開発環境で本番データを用いた検証処理を行なっています。

そのような検証処理のタイミングで、S3を用いたデータの移動を活用しています。

まとめ

RedShiftの本番から開発環境にデータを移すのは手のかかる作業ですが、S3を用いて、 UNLOADとCOPYを活用することで、簡単にデータを移すことができます。