Amazon Redshiftのクロスリージョンデータ共有機能を試してみた

2022.02.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いわさです。

昨年11月にプレビューリリースされていた、Redshiftのクロスリージョンデータ共有機能がGAとなりました。

以前から同一リージョン内のクラスター間のデータ共有は可能だったようですが、今回クロスリージョンに対応した形です。
Redshiftを触る良いきっかけかなと思ったので、試してみることにしました。

なお、手順の大部分は以下のデータ共有の記事を参考にさせて頂きました。

注意点

本機能を使うにあたり、プロデューサークラスターおよびコンシューマークラスターは、RA3ノードタイプを利用する必要があります。(ra3.16xlarge、ra3.4xlarge、ra3.xlplus)
よって、本日時点では大阪リージョンではまだ利用が出来ません。

また、Redshiftクラスター間のリージョン間転送は別途追加のデータ転送料金が発生します。
詳細は以下をご確認ください。

Managing cost control for cross-Region data sharing - Amazon Redshift

設定する

今回は東京リージョンのクラスターをプロデューサーとし、バージニア北部のクラスターをコンシューマーとしました。

プロデューサー側(データを所有している、共有する側)

マネジメントコンソールとクエリ&CLIのどちらからでも作成出来るようなのですが、マネジメントコンソールから作成してみました。
データ共有タブからCreate datashareを選択します。

Datashare informationでデータ共有名・データベース名とパブリックアクセス可能クラスターへの共有を許可するかどうかと指定します。

共有するスキーマやテーブルをここで指定します。

一点注意点があって、起動時ロードしたサンプルDBを使う場合、共有対象に指定出来ません。ここがよくわからなくてだいぶ時間を使ってしまいました。
クエリエディターから共有オブジェクトを追加しようとすると以下のようなエラーが発生します。

ALTER DATASHARE hoge_share ADD TABLE dev.public.users;

ERROR: Bootstrap owned table users cannot be added to a datashare. [ErrorId: 1-62140adc-61291ceb1d1dbc503c6d20c8]

よって、ここでは適当なテーブルを新規作成し、共有対象として追加することにしました。

--create table category_stage
--(catid smallint default 0,
--catgroup varchar(10) default 'General',
--catname varchar(10) default 'General',
--catdesc varchar(50) default 'General');

insert into category_stage values (1, 'aaa', '111', 'hoge');
insert into category_stage values (2, 'bbb', '222', 'hoge');
insert into category_stage values (3, 'ccc', '333', 'hoge');

ALTER DATASHARE hoge_share ADD TABLE dev.public.category_stage;

対象コンシューマーの追加ですが、Add namespaces to the datashareでは別リージョンのクラスターは参照出来ないようです。
Add AWS accounts to the datashareから、自分のアカウントを追加しました。

コンシューマー側(データの利用側)

プロデューサー側でデータ共有を作成出来たので、コンシューマー側でクラスターへの関連付けを行います。

対象リージョンとクラスターを指定します。

ここからはバージニア北部のクエリエディターでデータ共有からデータベースを作成します。

CREATE DATABASE hoge FROM DATASHARE hoge_share OF NAMESPACE '1d4dbad5-2ac7-41c2-a67f-d4066b5d8bd6';

作成されましたね。

使ってみる

データを参照してみると、利用出来ていますね。
なお、データ共有から参照するオブジェクトは読み取り専用です。

プロデューサー側でレコードを追加し、コンシューマー側からすぐに参照出来るかも確認してみます。

こちらも期待どおり動作していました。

さいごに

本日はRedshiftのデータ共有機能を使ってクロスリージョンデータ共有を行ってみました。
Redshiftもデータ共有も初めてだったのでだいぶ手間取りました。

なお、共有データのアクセス時はコンシューマーのコンピューティングリソースを使用するようでプロデューサークラスターのパフォーマンスには影響しないそうです。
従来はクロスリージョンの場合は別途データコピーやレプリケーションを実装していたそうなのです。クエリの頻度によってはクロスリージョンデータ転送とのトレードオフになりそうな気はしますが、データ連携のオプションのひとつとして覚えておきたいと思います。