Redshift Serverless に provisioned cluster から移行してみた

# はじめに

[Redshift Serverless が 7/13 に GA ](https://aws.amazon.com/jp/blogs/news/amazon-redshift-serverless-now-generally-available-with-new-capabilities/)されました。従来の Redshift (provisioned cluster) では、クラスターを構成するインフラを意識しながらデプロイする方式でした。Redshift Serverless ではインフラ管理が不要となり、より簡単に、より運用負担を軽減してご利用いただけます。データを準備して Redshift Serverless に取り込むだけで分析ができ、料金は使用した分だけ発生します。これにより、利用頻度が少ない分析処理や夜間のみ実行されるワークロードなど、データウェアハウスを常時利用しないユースケースの場合に、効果的にご利用いただけます。

従来の provisioned cluster でサポートされている機能のほとんどは、Redshift Serverless でサポートされています。表現を変えると、今まで使っていたアプリケーションからは、今までと同じ方法で Redshift Serverless にアクセスできるという仕組みなっています。

provisioned cluster と Redshift Serverless の違いが気になる方は、次の Document を参照ください。

- https://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/serverless-console-comparison.html



気になる料金については、つぎの URL で詳細が説明されています。

- https://aws.amazon.com/jp/redshift/pricing/



大事そうな部分を抜粋します。Redshift Serverless では、主に次の2種類の料金が発生します。

- RPU (Redshift Processing Unit) と呼ばれる、コンピュートキャパシティ
- RMS (Redshift Managed Storage) と呼ばれる、ストレージ容量



RPU はざっくり表現すると、Redshift Serverless に投げられるクエリーを処理するためのコンピュートリソースの概念です。クエリーが投げられたときに、RPU と呼ばれるリソースが稼働します。そして、処理が終わったら RPU 部分のコンピュートリソースは解放されます。料金面では、RPU が動いている時間分だけ、コンピュートキャパシティの料金が発生します。RPU 料金のイメージについては、[YouTube の動画](https://youtu.be/juItNAqfrJ4?t=559) で詳細に紹介されていたので、画像を引用します。

![image-20220728222244943.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/e3e4c891-a2b1-8054-c0a5-0aefb967a12d.png)



2:00:00 から 2:15:00 の間に、RPU が 5 分 30 秒 利用されている時の概念図です。RPU の料金が発生するのは、青いボックスが存在している 5 分 30 秒 部分だけです。それ以外のアイドル時間では、RPU の料金は発生しません。また、 **クエリー課金ではなく、RPU の実行時間課金**というのもポイントです。2:00:00 から 2:03:00 の 3 分間で 3 つのクエリーを実行していますが、RPU としては 「3分間」の料金しか発生しません。表現を変えると、RPU が稼働している期間に、クエリーを詰め込んだほうがコストパフォーマンスが良いという考え方になっています。

このように、Redshift を利用しない時間がある使い方では、Redshift Serverless でよりコスト最適化が出来るようになります。



# provisioned cluster から Serverless に移行する

ここまで簡単に Redshift Serverless の紹介をしてきましたが、今までの provisioned cluster から Redshift Serverless に移行する方法が気になります。移行方法が AWS Document で紹介されています。

- https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-migration.html

provisioned cluster で作成したスナップショットから、Redshift Serverless として復元することで簡単に移行が出来ます。それでは実際に試してみましょう。



# 環境について

Redshift のデータを QuickSight で適当に可視化している環境を対象にしています。

![image-20220728230826105.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/f80dabec-c3b8-c473-7b37-c201264951e4.png)



Redshift Serverless に切り替えたときに、QuickSight 側の変更作業も合わせて確認していきます。



# provisioned cluster でスナップショットを取得する

provisioned cluster を選択して、Create snapshot を選択します。

![image-20220728231209652.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/df2e2ca5-d841-b177-d5ae-ab3d53f18347.png)



Snapshot の名前を指定して、Create snapshot を選択します。

![image-20220728231304733.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/007ffaec-ed2b-1579-c7ab-65420eca3566.png)



Snapshot の作成処理が開始され、数分後に作成完了となりました。

![image-20220728231559211.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/76978526-ff7f-f5c5-7cf8-a1b57f77cf86.png)





# Redshift Serverless を作成

スナップショットから復元するために、復元先の Redshift Serverless の Namespace が必要です。Namespace や Workgroup は Redshift Serverless で出てきた概念となっており、異なるリソースを管理する概念です。ざっくりな表現を Document から引用します。

>  Namespace は、データベースオブジェクトとユーザーをまとめたものです。Workgroup は、コンピュートリソースの集合体です。RPU、VPC、およびセキュリティグループのような計算リソースをまとめてグループ化します。

- https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-workgroup-namespace.html



わかったようなわからないような表現ですが、スナップショットから復元するには Namespace が必要なので、まずは作っていきましょう。Redshift Serverless のメニューを選択します。

![image-20220728233203090.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/90aee0ad-ce22-8d01-a7d5-b254aae64f82.png)



VPC などを選びたいので、Customize settings を選択します。

![image-20220728233303576.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/e37d5bc2-7112-950a-1b65-b7aa401eb436.png)



namespace の名前を指定します。

![image-20220728233430662.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/ef334428-0dde-c503-f627-521d242c5c20.png)



admin のユーザー名とパスワードを指定します。

![image-20220728233503591.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/5ffa42c5-d91e-a1ec-1689-37a49cd795bb.png)



IAM Role を適当に指定します。

![image-20220728233630540.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/dcda582e-9308-9fef-6d45-e92683e5cce7.png)



それとなく Log の取得にチェックをいれてみます。

![image-20220728233715638.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/cb9ef19b-7bba-8165-8beb-c1c97849e75b.png)



Workgroup に関する設定を入れていきます。VPC などの設定を行います。

![image-20220728234140265.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/010c9e82-3bc5-5f49-aaff-0fc1ffce382d.png)



Save configuration を押します。

![image-20220728234216655.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/40da6da7-aa40-6ed9-dc3c-1254c441518a.png)



作成処理が進みます。

![image-20220728234431890.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/e116dd86-56f4-30ac-f35e-10e00c048918.png)



数分で作成が終わりました。Continue を押します。

![image-20220728234839807.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/bc790aba-ecf1-377d-af1d-f776d62cb8ad.png)



Redshift Serverless の作成が完了しました。

![image-20220728234911233.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/eac9f1c7-5bc5-9263-242d-907e20650017.png)



# スナップショットから Redshift Serverless を復元する

スナップショットから Redshift Serverless を復元していきます。スナップショットを選択して、Restore to serverless namespace を選択します。

![image-20220728231639862.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/de58ede4-3c4f-672b-37dd-c98907b94d98.png)



復元先の default Namespace のデータが全て上書きされるので、「本当にいい？」と聞かれています。問題ないので、Restore を押します。既に Redshift Serverless を使ったことが有る場合は、Namespace の選択を注意しましょう。

![image-20220728235759678.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/ccb50955-e683-6d18-529a-5662793f1df9.png)



復元が進みます。

![image-20220728235836439.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/c4ffd37a-8227-922a-0bd3-7585a1c7c019.png)



一定時間後、Available に変わりました。

![image-20220729001953672.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/a0da2b70-c1dc-6a69-071e-89c8cb572cdf.png)



Workgroup の Endpoint をメモっておきます。

![image-20220729022715722.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/25f417d6-8ab1-6f98-ce3f-1362f97d0a31.png)



# 簡単に動作確認

Redshift query editor v2 を使って、Redshift Serverless を対象にクエリーを実行できることを簡単に確認します。

![image-20220729015418048.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/b488c6c3-1784-9776-521a-ed5e5b2a9141.png)



# QuickSight から Redshift Serverless に切り替え

QuickSight の Analysis は、provisioned cluster のデータセット `customer-redshift-provisioned` を参照して簡単な可視化を行っています。(テーブルで出しているだけなので、ほんとに簡単な可視化ですいません)

![image-20220729021853792.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/be5b4162-0b14-4f80-8957-30f79893533a.png)



Redshift Serverless をデータセットとして登録します。New dataset を選択します。

![image-20220729022320425.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/4d29a095-7aab-4835-d6e6-d61a09a1466d.png)



Redshift を選択します。

![image-20220729022425962.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/8fcf3deb-7a08-81f0-6f71-c4f9fbd9f732.png)



Workgroup のエンドポイントなどを指定します。

![image-20220729023137684.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/4e749c9a-c1c0-c663-c4ae-f2b842b31b88.png)



元々のデータセットと同じ設定をします。

![image-20220729023221560.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/06288de6-ca23-aa9c-882b-dc8c4849b6d1.png)



Edit/Preview data を押します。

![image-20220729023249662.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/ff5e8421-e3f1-e40a-82b4-59524b34f542.png)



名前を指定して、Save を押します。

![image-20220729023327230.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/83c8d26f-9d28-669c-26ff-216e5fb159f4.png)



Redshift Serverless のデータセットが出来上がりました。

![image-20220729023420661.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/e6a5ac3a-2cd3-6062-660a-1bdcdebb6d73.png)





元々 provisioned cluster を参照していた Analysis から、Dataset の編集を行います。

![image-20220729023510942.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/14b5522a-83a8-6b18-f2c7-f8beb1dfdadc.png)



Replace を押します。

![image-20220729023541975.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/a5f9691a-39a0-7564-2dc1-ff96580e4da0.png)



Serverless の方を選択して、Select を押します。

![image-20220729023613616.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/7493c5c4-fe26-4f3b-f715-d6da295c1a1d.png)



Replace を押します。

![image-20220729023632766.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/4bf30c81-427a-f44d-2699-768cd28d1990.png)



データセットの参照先を、Redshift Serverless に出来ました！

![image-20220729023719688.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/ef966322-8338-296e-248e-2bca57693f5b.png)



# 検証を通じてわかったこと

- 1 RPU は、16 GB のメモリを提供する。最低 RPU が 32、最高 RPU が 512 となる。デフォルトの Base RPU は 128 となる。

  - Base RPU を上げて、実行時間を短くすることで、コストとパフォーマンスのバランスを取る考え方もある
  - https://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/serverless-considerations.html

- RPU は、クエリ数に合わせて自動的にスケーリングされる

  - https://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/serverless-billing.html

  - > クエリ数が増えると、Amazon Redshift Serverless では、一貫したパフォーマンスを提供するため、自動的にスケーリングされます。

- Base RPU を変更すると、数分間 Redshift Serverless が使えなくなる

  - >  When you save your changes, Redshift Serverless is not available for a few minutes. Do you want to continue?

- Redshift の provisioned cluster から、Redshift Serverless には、スナップショットを使って簡単に移行できる。

- Redshift Serverless を初めて利用するときに、300 USD の無償クレジットが付いてくる

  - https://aws.amazon.com/jp/redshift/pricing/

  - > これまでに Amazon Redshift Serverless を利用したことがない場合、Amazon Redshift Serverless をお試しいただくと、コンピューティングとストレージの利用に対して 90 日間の有効期限付き 300 USD のクレジットが付与されます。このクレジットの消費率は、実際の使用量と Serverless エンドポイントのコンピューティング性能に依存します。

- Redshift Serverless の検証クレジットの残高と有効期限は、Dashboard で確認が可能

![image-20220728235044179.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/308f0965-01ff-2073-1e6e-3283ea030104.png)

- 手元の環境で、128 RPU と、32 RPU を使って、TPC-H のデータをつかった速度比較をおこなった。
  - 結果、128 RPU の方が 32 RPU に比べて、10倍 ~ 18倍くらい早かった。
  - もちろんデータの容量などや設計方法によって異なる部分なので、性能検証をしたうえで、最適な RPU を選ぶのが良いと思う。
  - RPU 数 x 実行時間 = 料金という考え方なので、RPU 数を多くしても実行時間が短くなるなら、それが最もコスパが良いこともありえる。





# 参考 URL

Migrating a provisioned cluster to Amazon Redshift Serverless
https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-migration.html

Get Started with Analytics in Seconds with Amazon Redshift Serverless - AWS Online Tech Talks
https://www.youtube.com/watch?v=juItNAqfrJ4