Amazon Redshift Serverlessでデータ共有を試してみました

Amazon Redshiftのデータ共有(Data sharing)を使えば、簡単な設定でRedshift Serverlessインスタンス間のデータの共有ができました!
2023.06.12

データアナリティクス事業本部の鈴木です。

Redshiftのクラスター間でデータ共有をしたいときに非常に強力なデータ共有ですが、Redshift Serverlessで気軽に複数のインスタンスを準備できるようになったこともあり、この機にチャレンジしてみたのでご共有です。

確認したかったこと

同一アカウントの2つのRedshift Serverlessインスタンスを起動し、データ共有の設定方法を確認しました。

今回はVPCとサブネットは別々のものを用意しました。

データ共有検証用の構成

Redshift Serverlessインスタンスの準備

以下のブログで紹介されているCloudFormationテンプレートを使い、リソースを準備しました。

なお、最小ベースキャパシティは8RPUとしました。今年3月のアップデートで最小ベースキャパシティをより小さくできるようになったためです。

今回はデータ共有の設定節にて紹介するブログに合わせて、プロデューサーおよびコンシューマーの計2つのRedshift Serverlessインスタンスを準備しました。具体的には、上記ブログのCloudFormationテンプレートをデプロイし、2つのRedshift Serverlessインスタンスを同一アカウントに構築しました。

データ共有の設定

操作は以下のブログと同じ手順で行い、問題なくできることを確認しました。

Amazon Redshift Serverless でのデータ共有 - Amazon Redshift』のドキュメントに記載の内容からも、サーバーレスでもデータ共有は可能なことが分かります。

やってみる

1. プロデューサー側の設定

データの準備

まず、プロデューサーのRedshift Serverlessインスタンスに、Redshift query editor v2で接続し、tickitサンプルデータベースを作成しました。

sample_data_devtickitの右にあるボタンを押しました。

サンプルデータベースの作成1

確認のポップアップが出るのでCreateとしました。

サンプルデータベースの作成2

サンプルデータベースが作成されました。

サンプルデータベースの作成3

NAMESPACEの取得

プロデューサーおよびコンシューマーのRedshift Serverlessインスタンスに、Redshift query editor v2で接続し、以下のSQLでNAMESPACE(37ba07bc-d5bf-4916-97b7-28ba45937392のような値)の取得をしました。

select current_namespace;

NAMESPACEの取得

データ共有の設定

プロデューサー側のデータ共有の設定を進めました。

前提として、プロデューサー側のワークグループおよびサンプルデータベースを指定して、SQLを実行していきました。

SQL実行の前提1

ワークグループは見切れていて分かりにくいですが、以下のように指定しています。

SQL実行の前提2

まず、データ共有を作成しました。

CREATE DATASHARE tickit_datashare;

今回はパブリックIPを付与していたこともあり、先に紹介したブログに倣って、データ共有のパブリックアクセスを許可しました。

ALTER DATASHARE tickit_datashare SET publicaccessible = TRUE;

データ共有にtickitスキーマを追加しました。

ALTER DATASHARE tickit_datashare ADD SCHEMA tickit;

とりあえず1テーブルだけ共有するだけで良かったので、usersテーブルだけデータ共有に追加してみました。

ALTER DATASHARE tickit_datashare ADD TABLE tickit.users;

コンシューマーのRedshift ServerlessのNAMESPACEはメモしておいたものに置き換えてください。

GRANT USAGE ON DATASHARE tickit_datashare TO NAMESPACE 'コンシューマーのRedshift ServerlessのNAMESPACE';

これでプロデューサー側の設定は終わりです。

この時点で、Redshiftのコンソールからも作成したtickit_datashareが確認できるようになりました。

データ共有1

データ共有名をクリックして、個別のデータ共有の詳細を確認することができました。

データ共有2

2. コンシューマー側の設定

コンシューマー側のデータ共有の設定を進め、プロデューサー側で作成したデータ共有でテーブルの中身を参照できるか確認しました。

以下のSQLでデータ共有からデータベースを作成しました。プロデューサーのRedshift ServerlessのNAMESPACEはメモしておいたものに置き換えてください。

CREATE DATABASE consumer_tickit
FROM DATASHARE tickit_datashare OF NAMESPACE 'プロデューサーのRedshift ServerlessのNAMESPACE';

awsuserユーザーに作成したデータベースの使用許可を付与しました。

GRANT USAGE ON DATABASE consumer_tickit TO awsuser;

共有したテーブルの中身が見られるか確認しました。確かに検索できていますね。

共有したテーブルの確認

最後に

今回はRedshift Serverlessで同一アカウントでのデータ共有の設定をRedshift query editor v2で試してみました。

今年の4月にはLake Formationを使用したデータ共有の一元的なアクセスコントロールの一般提供もアナウンスされましたが、一番オーソドックスなやり方をこのように簡単に試して学べるのはとても嬉しいですね。

参考になりましたら幸いです。

そのた参考資料