はじめに
AWS re:Invent 2021にて情報公開されたAmazon Redshift Serverlessが、遂に2022/07/13に一般公開開始されましたね。
この記事では近日一般公開されたばかりの、Amazon Redshift Serverlessを利用してみて、分かった点を本記事にまとめてみます。
この記事で分かること
1. Amazon Redshift Serverlessの概要
2. Amazon Redshiftとの違い
3. Redshift Serverless概念図
4. 気になるキーワードまとめ
5. 名前空間/ワークグループの作成方法
6. テーブル作成方法
7. データインサート/検索方法
8. 料金体系
1. Amazon Redshift Serverlessの概要
そもそもAmazon Redshift とは何か?
エンタープライズレベル、ペタバイト規模、フルマネージド型(AWSが管理してくれる)のデータウェアハウスサービスです。
具体的には、リレーショナルデータベースに対するクエリと管理を行うためのシステムを指します。
また、ビジネスインテリジェンス (BI) や、レポート作成、データ処理、分析用のツールなど、多種類のアプリケーションとのクライアント接続をサポートもしています。
Amazon Redshift Serverlessでは何ができるのか?
今回紹介するAmazon Redshift Serverlessでは、上記内容をサーバレスに実現できるようです。Amazon Redshift Serverlessで何が出来るのかについては、以下3つのポイントに絞ってまとめました。
①サーバーレスならではの使いやすさ
Amazon Redshiftクラスターをセットアップ、調整、管理することなく、データにアクセスして分析。
②使用量に応じた支払い
Amazon Redshiftのクラス最高のSQL機能、業界をリードするパフォーマンス、レイクハウスアーキテクチャを使用して、データウェアハウス、データレイク、運用データソース間でシームレスにクエリを実行。
③Redshiftのほぼ全て機能と接続方式をサポート
SQLの様々な機能、パフォーマンス、レイクハウスアーキテクチャを使用して、データウェアハウス、データレイク、基幹データベース間でシームレスにクエリを実行。
参考記事:
Amazon Redshift Serverless とは1
[新機能] Amazon Redshift Serverless がGAになりました!2
2. Amazon Redshiftとの違い
AWS公式サイト Amazon Redshift Serverless とプロビジョニングされたクラスターとの比較を参考に、これまでのRedshiftとRedshiftサーバレスとの違いを以下表にまとめました。
クラスター | 仮想マシンのサイズ | 仮想マシンの台数 | 仮想マシンのプロセッサー数 | 仮想マシンのメモリー容量 | 仮想マシンの使用料金 | |
---|---|---|---|---|---|---|
Amazon Redshift | プロビジョニング必要 | 設計必要 | 設計必要 | 設計必要 | 設計必要 | 1時間単位の従量課金(クエリを実行していない場合であっても料金が発生) |
Amazon Redshift Serverless | プロビジョニング不要 | 設計不要 | 設計不要 | 設計不要 | 設計不要 | クエリを実行する時間の分だけ料金が発生 |
3. Redshift Serverlessの概念図
Redshift Serverlessを利用していく上で、Redshift Serverlessがどのような構成になっているかの概念を理解しておきましょう。以下は筆者が作成した概念図です。
実際の構築例
名前空間とワークグループの関係性について
1名前空間に対して1ワークグループを設定できる。(1名前空間に対して1以上のワークグループを設定することは出来ない。)
名前空間には、ワークグループを設定しなくてもOK。
ただしワークグループは名前空間に紐づかせる必要がある。
【設定可能】
名前空間:ワークグループ = 1:1
名前空間:ワークグループ = 1:0
【設定不可】
名前空間:ワークグループ = 1:2
名前空間:ワークグループ = 0:1
4. 気になるキーワードまとめ
キーワード | 何なのか? | 詳細情報 | 参考サイトURL |
---|---|---|---|
クラスター | ノードと呼ばれるコンピューティングリソースの集合 | Amazon Redshift Serverless には、クラスターの概念がない。代わりにワークグループと名前空間がある。 | https://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/working-with-clusters.html#working-with-clusters-overview |
プロビジョニング | リソースを即時に利用できるよう準備しておくこと | Amazon Redshift Serverless で作業する場合、自動的に容量をプロビジョニングおよび管理する。その為、プロビジョニングされた Amazon Redshift クラスターの場合と同様に、ノードタイプを選択したりノード数を指定することはない。 | https://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/serverless-console-comparison.html |
名前空間 | データベースオブジェクトとユーザーのコレクション | 名前空間は、関連付けられたワークグループなしで存在することができる。各名前空間に関連付けることができるワークグループは 1 つのみ。 | https://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/serverless-workgroup-namespace.html |
ワークグループ | コンピューティングリソースの集合 | 各ワークグループに関連付けることができる名前空間も 1 つのみ。 | https://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/serverless-workgroup-namespace.html |
Redshift Processing Unit (RPU) | ワークロードの処理に使用されるリソース | 料金試算時に基準となる数値 | https://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/serverless-capacity.html#serverless-rpu-capacity |
5. 名前空間/ワークグループの作成方法
マネジメントコンソールから、Redshiftページを開く。
左端のプリダウンを開き、「Amazon Redshift サーバーレス」をクリック。
設定をすすめていく。まずはデフォルト設定にしよう。
※Redshift サーバーレスの使用に対する 300.00 USD のクレジットが付与されるらしいので、無料枠で色々触れそう
この段階では名前空間に対して特に管理者ユーザ名とパスワードを設定していない。その為、この段階では名前空間作成者のみが作成した名前空間を使用できる。
管理者ユーザ名とパスワードの設定方法については以下参照。
参照:あとがき④名前空間の管理者ユーザ名とパスワードについて
IAMロールは一旦なしにしてみる。※テーブルへのデータインサート時に必要になる為、後ほど設定した。
参照:※Redshiftコンソール(名前空間設定画面)からIAMロールを新規で作成
ここまでで名前空間の設定は完了。
以降は名前空間を作成した流れで、ワークグループも作成していく。
「設定を保存」クリック後、セットアップ開始。セットアップ完了まで、おおよそ3~4分かかった。
(待ち時間にRedshiftサーバレスについての説明書きが参照できる)
6. テーブル作成方法
RedshiftサーバレスマネジメントコンソールTOPから「クエリデータ」をクリック。
7. データインサート方法
IAMロールの指定が必要なので、Loaddataする前にIAMロールを作成する。
※Redshiftコンソール(名前空間設定画面)からIAMロールを新規で作成
作成したIAMロールにアタッチされたIAMポリシー(AmazonRedshift-CommandsAccessPolicy-20220801T163313)は以下。
※筆者が選択したのはバケット名のみで他情報はAWS側で自動的に設定された。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:GetObject",
"s3:GetBucketAcl",
"s3:GetBucketCors",
"s3:GetEncryptionConfiguration",
"s3:GetBucketLocation",
"s3:ListBucket",
"s3:ListAllMyBuckets",
"s3:ListMultipartUploadParts",
"s3:ListBucketMultipartUploads",
"s3:PutObject",
"s3:PutBucketAcl",
"s3:PutBucketCors",
"s3:DeleteObject",
"s3:AbortMultipartUpload",
"s3:CreateBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::{バケット名}/*",
"arn:aws:s3:::{バケット名}"
]
}
]
}
再度query editorに戻って、data load試みる。
(今回はIAMロールに先ほど名前空間に設定したIAMロールが候補として出てきた。権限的にも所定のS3バケットへの許可しているので問題なし。)
SQL
COPY dev.public.test_table_v1 (number) FROM 's3://{バケット名}/{パス}' IAM_ROLE 'arn:aws:iam::{IAMロールARN情報}' FORMAT AS CSV DELIMITER ',' QUOTE '"' REGION AS 'ap-northeast-1'
エラー内容
ERROR: Load into table 'test_table_v1' failed. Check 'sys_load_error_detail' system table for details. [ErrorId: 1-62e792ec-21b30ef47146b80e35ad1741]
sys_load_error_detailとは何か調査してみる。
参考資料:SYS_LOAD_ERROR_DETAIL (プレビュー)3
SYS_LOAD_ERROR_DETAILテーブルにエラーメッセージがありそうなので、以下クエリを実行してみる。
SELECT error_message FROM SYS_LOAD_ERROR_DETAIL
レスポンス。筆者が配置したテストデータがいまいちだった模様。
Invalid quote formatting for CSV
以下新規でテストデータ作成
S3にアップロード
再度DataLoad
※ここからtest_table_v2に対してデータインサートになっています💦test_table_v1とtest_table_v2と同設定です。念のためtest_table_v1でのデータインサートも追加で記載しています。
参照:あとがき③テーブル:test_table_v1でのDataLoad出来るかの追加検証
SYS_LOAD_ERROR_DETAILテーブルに対して、エラーメッセージとエラーコードも併せて確認する。
参考資料:ロードエラーコード4
エラーコード1207の内容は「期待される 0~9 の範囲外の値がデータに含まれています。」
以下参考記事を参照したところ、以下のような書き込みがあった。
参考資料:ブログ記事5
COPYコマンドに食わせるCSVに、列名行(最初の1行目)は不要
テストデータのヘッダーを削除
※ヘッダーを削除しなくてもDataLoad時のオプションでヘッダーをスキップ出来た
参照:あとがき②ヘッダースキップ設定について
再度RedshiftサーバレスのクエリエディタでDataLoad。成功した。
データインサートしたテーブル(test_table_v2)に対して以下SQLクエリを実行してみる。
レスポンス返ってきた。
select * from test_table_v2
あとがき①カラムやデータ型の設定について
テーブル作成時にカラム名やデータ型を設定する必要がある。カラムが何百個とある場合は手動入力が大変そうだが、SQLのCREATE文で作成すれば問題なさそう。
あとがき②ヘッダースキップ設定について
テストデータのヘッダー削除したが、DataLoad時にオプションで以下選択できるようだった。
Data Load>Advanced settings>Data conversion parameters>Ignore header rows
あとがき③テーブル:test_table_v1でのDataLoad出来るかの追加検証
検証途中でtest_table_v1と同設定のtest_table_v2に対してDataLoadしていた。念のため、test_table_v1にてDataLoad実施した。
配置テストデータ変更後(ヘッダー無)、DataLoad成功しクエリレスポンスも返ってきた。
あとがき④名前空間の管理者ユーザ名とパスワードについて
以下対応することで、筆者(名前空間作成者)以外のユーザでも管理者IDとパスワードを共有することで、テーブル等を使用できるようになる。
設定したい管理者IDとパスワードを入力し、保存。
8. 料金体系
アジアパシフィック(東京)リージョンを選択した場合の料金は以下。
データウェアハウスがアクティブなときに消費するコンピューティング性能に対してのみ支払う。
基本料金
容量 | 料金 |
---|---|
Redshift Processing Unit | 0.494USD (1 RPU 時間あたり) |
利用料金まとめ
レベル | 設定RPU | 料金(1時間あたり) | 料金(1分あたり) |
---|---|---|---|
default | 128 | 63USD(8,353.52円) | 1.05USD(139.23円) |
最小 | 32 | 15USD(1988.93円) | 0.25USD(33.15円) |
最大 | 512 | 252USD(33414.07円) | 4.2USD(556.9円) |
料金のポイントまとめ
- Amazon Redshift は、データウェアハウスの容量を Redshift Processing Unit (RPU) で測定する。
- データウェアハウスの起動時間には料金はかからない。
- Amazon S3 のオープンファイル形式のデータにアクセスするクエリを含め、RPU-時間で実行するワークロードの料金を秒単位で支払う (60 秒の最低料金あり)
- 同時実行スケーリングと Redshift Spectrum はどちらも Amazon Redshift Serverless に含まれているため、別途料金を支払う必要はない。
- データウェアハウスのパフォーマンスとコストを制御するために、オプションでベースと最大の設定を使用できる。制限に達した場合に Amazon Redshift が自動的に実行するアクションを定義して、予測可能性をもって予算を管理できる。
参考資料:
Amazon Redshift の料金「Amazon Redshift Serverless」欄6
Amazon Redshift Serverless での請求7
おわりに
Redshiftサーバレスを触ってみての感想です。
-
所感
筆者はこれまでAthenaやDynamoDBを利用したことがありましたが、Redshiftは今回初めてでした。
AthenaやDynamoDB同様、サーバーレスですので、構築時にちまちまとサーバ容量等気にせず、さくさくテーブル作成まで進められました。
IAMロールやヘッダースキップ、パスワード設定等はハマりポイントなのでご注意ください。
クエリエディタも見やすく、RDS初心者にも易しい印象でよかったです。 -
今後調べてみたいこと
今後は他AWSサービスとの連携も試してみたいです。
例えば、GlueクローラとRedshiftサーバレスを連携して、自動で継続的にテーブルを更新してくれるような仕組みが出来たらいいなと思っています。 -
AWSからの無料枠の額がすごい件
また、Redshiftサーバレスを初めて利用する際には、AWSからなんと300USDの無料枠がもらえます。
有効期間はおおよそ3か月です。(筆者がRedshiftサーバレス使用し始めたのが2022/7月最終週で、有効期限が2022/10/25でした。)
AWSからの「Redshiftサーバレスどんどん使ってね!」という熱意が感じられますね!
皆さんもこの機会に、Redshiftサーバレス触ってみてはいかがでしょうか?
-
https://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/serverless-whatis.html ↩
-
https://dev.classmethod.jp/articles/20220713-amazon-redshift-serverless/ ↩
-
https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/SYS_LOAD_ERROR_DETAIL.html ↩
-
https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_Load_Error_Reference.html ↩
-
https://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/serverless-billing.html ↩