Redshift Serverlessでパフォーマンスとコストの課題を一気に解消？

この記事はAWS Advent Calendar 2021の記事です。

https://qiita.com/advent-calendar/2021/aws

# Redshift Serverless発表！！
12月1日(日本時間)、AWS re:Invent 2021でRedshift Serverless(Preview)が発表されました。
この新機能、個人的にはかなり熱いです。

日頃業務でRedshiftのデータを軸にしたシステムの開発・運用を行っており、パフォーマンスやコスト、管理・運用に苦労しているのですが、それが解消される可能性を感じるからです。

今までのRedshiftは、クラスターを起動している時間に課金される方式のため、使用していない時間にも課金される点がイマイチでした。
また、アクセス数の急増や重いクエリ実行等の利用状況が読みきれない中で、パフォーマンスの安定のためには大きめのノードタイプ・ノード数を用意しておくといった管理・運用負荷がありました。

小さめにクラスターを起動しておき、負荷が高まった時に一時的にスケーリングする[同時実行スケーリング](https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/concurrency-scaling.html)という機能もありますが、結局何も使っていない状態でも課金されている事に変わりはないのと、いくつか制約があったりしてうまく活用するには難しい部分もありました。

今出ている情報で分かる簡単な比較はこちらになります。

| | ノードタイプ・数管理 | パフォーマンス | コスト |
| -- | -- | -- | -- |
| 既存クラスター | 適切に管理する必要あり(管理コスト高い) | ノードタイプ・数によって大きく上下 | 使用していない時も課金 |
| Serverless | 管理の必要なし | 自動スケール | 使用した分だけ課金 |


# 競合も意識した戦略
当社では6年ほどRedshiftを使用していますが、その間データ量やパフォーマンス要件に応じてクラスターのタイプとノード数をどうするか、常に頭を悩ませてきました。
この悩みを解消すべく、最近注目のSnowflakeへの移行も検討しはじめている所です。

Snowflakeは昨年あたりから急激に存在感を増していて、Redshiftから移行した事例もいくつか出てきています。
AWSとしても危機感はあるでしょう。今回の発表は、ユーザーが課題に感じている部分を解決し、Snowflakeに負けまいという意志を感じました。


# さっそく触ってみる
Redshiftのダッシュボードに表示されている `Try Amazon Redshift Serverless (Preview)` というボタンを押します。
![スクリーンショット 2021-12-05 17.31.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41382/d75c01e4-dd2b-810d-8e1e-75a6bc7bbb6d.png)

Redshift Serverlessを初めて使う場合、$500分のクレジットがもらえるので気軽に試すことができます。
![スクリーンショット 2021-12-05 17.40.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41382/29423c00-1419-d426-44df-430ed30b6bea.png)

`Create serverless endpoint`ボタンをクリックすると、作成が始まります。
![スクリーンショット 2021-12-05 17.49.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41382/3774b84b-2447-9911-d2e4-2a7e7f4e3ac7.png)

作成は１〜2分ほどで完了しました。
![スクリーンショット 2021-12-05 17.55.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41382/d5ad5334-f30f-0747-97e2-a74a542923b1.png)
![スクリーンショット 2021-12-05 17.56.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41382/7a051fb8-4f20-5f05-9dfb-5246b26ae883.png)

# スナップショットから復元してデータを用意
Serverless endpointができたのはいいのですが、このままでは何のデータも入っていない状態です。
スナップショットの画面に行き、既存クラスターの最新スナップショットを選択すると、`スナップショットから復元`のプルダウンの中に、`Restore to serverless endpoint`が出てきました。
![スクリーンショット 2021-12-05 17.58.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41382/99f96cac-7d36-2e05-3405-05dd780fbc61.png)

押してみると、このようなアラートが出ます。
![スクリーンショット 2021-12-05 23.41.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41382/6400005c-a0fe-d552-4a6a-b7511915507b.png)

`復元`を押すと、以下のエラーになりました。
![スクリーンショット 2021-12-05 23.42.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41382/bf7e6764-8e0d-79f9-0361-f63c6ef8c581.png)
> ValidationException
Restoring a snapshot encrypted with AWS Service Managed Key to serverless is not yet supported. Please change the encryption type or use a snapshot encrypted with Customer Managed Key to restore to serverless.

AWSマネージドキーを使用して暗号化されたスナップショットはserverlessに復元できないと。
暗号化タイプの変更をするかカスタマー管理キーで暗号化されたスナップショットを使用せよと書かれてます。
が、調べた所既存クラスターの暗号化を一旦解除しないと復元はできなそう・・・これは面倒だ。

・　・　・　・　・

そしてその面倒な作業を開発環境で2日がかりで行ってようやく復元することができ、普段使用している約6TBのDBがServerlessで使えるようになりました。

# 実際のプロダクトのETLを実行してみる
さて、ここからが本当の目的です。
当社のAWS環境で毎日実行しているETL(数百のクエリ実行)があり、これをServerlessで実行して、既存のクラスターでの実行時との比較をしてみたいと思います。

そして気になる結果は以下の通りでした。

- **既存クラスター(ra3.xlplus * 4ノード)**
    - 合計処理時間 : 65分
- **Serverless**
    - 合計処理時間 : 36分


開発環境ということで、ra3.xlplus * 4ノードという、あまり高くはないスペックとの比較にはなりますが、Serverlessの方が大幅に速く処理できました！

現時点でServerlessの料金情報は見つからなかったのですが、見つかればコスト比較も後でアップデートします。
無料枠の\$500を使い切ったらどうなるのだろうか・・。この検証終わった時点では\$26ほど無料枠を使っていました。

いずれにしても
> データのクエリやロード中など、データウェアハウスの使用中は秒単位で課金されます。データウェアハウスがアイドル状態の場合は課金されません。

と書かれているので、無駄なお金がかからないのはとても良いことですね。
なにせ現状のRedshiftの料金、めっちゃ高いので・・・

![スクリーンショット 2021-12-15 23.26.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41382/e7f96d3b-d7dd-c819-26f6-c43a3779cd38.png)

# 今後の展望
まだPreviewが出たばかりということで、GAまでに色々アップデートがあると思いますが、楽しみな結果となりました。
ra3.4xlargeのような上位のノードと比較しても遜色ないパフォーマンスが出せるのであれば、ほとんどのユーザーはServerlessに移行するのではないでしょうか。

またServerlessとは別に、今回発表された[自動マテリアライズド・ビュー（AutoMV）](https://aws.amazon.com/jp/about-aws/whats-new/2021/12/amazon-redshift-preview-automated-materialized-view/)もかなり強力な機能のように思います。

Redshiftはライバルの台頭もあり、今後もさらなる強化・改善が急ピッチで行われていくと思います。
ユーザーとしてはそのメリットをしっかり享受して、ビジネスの強化に活用していきたいですね。

# エンジニア大募集中！
[TVISION INSIGHTS](https://tvisioninsights.co.jp/)では、エンジニアを大募集中です！

ビッグデータを活用した自社サービスの開発に取り組む環境があります。
Python/Django/TypeScript/Angular/AWS(Redshift, ECS, Lambda等)の経験があるエンジニアの方、是非一度下記サイトをご覧ください！

https://www.wantedly.com/projects/705892

# 参考
https://aws.amazon.com/jp/blogs/news/introducing-amazon-redshift-serverless-run-analytics-at-any-scale-without-having-to-manage-infrastructure/

https://dev.classmethod.jp/articles/20211201-amazon-redshift-serverless-release/

https://qiita.com/Yoshiyuki03/items/b99135995a6e3604ebe6

https://inside.estie.co.jp/entry/try-redshift-serverless