AWS PR

Amazon Redshift Serverless Auto Copyを使ってみた!

記事内に商品プロモーションを含む場合があります

近年、データ分析の需要が増加する中で、効率的でコスト効果の高いデータウェアハウスソリューションが求められています。Amazon Redshift Serverless は、そのような要望に応えるために設計された、管理が簡単でスケーラブルなデータウェアハウスです。

この記事では、Redshift Serverless の基本的な特徴から、実際に使ってみた体験、データの取り込みや分析手法までを初心者向けにわかりやすく説明します。


Amazon Redshift Serverless の特徴

データから数秒でインサイトを得る

Amazon Redshift Serverless は、従来のクラスタベースの設定を不要とし、数秒でクエリを実行して結果を返す仕組みを提供します。これは自動スケーリング機能により、必要なリソースをオンデマンドで割り当てることで実現されています。

一貫した高性能の恩恵を受ける

従来の Amazon Redshift Provisioned のパフォーマンスがそのまま適用されており、データ分析時の高速な処理速度と信頼性を提供します。これにより、大規模データの処理や複雑なクエリもスムーズに実行できます。

コストを節約し、予算内に収める

利用した時間に応じて課金される料金モデルを採用しており、必要な分だけリソースを使えるためコスト削減につながります。サーバレスの特性上、非アクティブ時の料金は発生しません。

変更なしで開始する

Redshift Provisioned で使用していたツールやクエリはそのまま利用可能です。移行のハードルが低く、スムーズに開始できます。


事前準備

Redshift Serverless を利用するには以下の準備が必要です。

  1. AWS アカウントの作成 AWS Management Console にログインし、必要なリソースを設定します。
  2. IAM ポリシーの設定 Redshift Serverless が S3 からデータをロードできるよう、適切な IAM ポリシーを付与します。
  3. S3 バケットの準備 分析用のデータを保存する S3 バケットを作成します。

実際にやってみる

Redshift Serverless の作成

AWS Management Console で「Redshift Serverless」を選択し、名前空間とワークグループを作成します。

nameだけ適当に入れてNextを押します。次にNamespaceを作ります。

Namespaceの名前を適当に入力します。

PermissionsでDefault IAMRoleを作ります。

今回はS3にアクセスするのでとりあえず
Any S3 Bucketにします。バケットを絞りたい方はSpecificを選んでください。

他はそのままで次へ(Next)

Createで作成を開始します。しばらく待ちます。

CreatedになったらOKです!
次はクエリを少し触ります。

Redshift Query Editor v2 を使ってみる

Query dataを押して

Redshift Query Editor v2 を開き、簡単なクエリを実行します。
※コネクションはFedaratedでそのまま作成すれば繋がるはずです

sample_data_devにサンプルテーブルがあるので

open sample notebooksを押して開きます。

ロードに時間がかかるのでしばらく待ちます。
開いたらRunを押してみます。

結果を取得できました!

データのロード(Auto Copy)

さて、ここでは、Auto Copyを試してみます。

S3 バケットからデータをロードするには、COPY コマンドを利用します。Redshift Serverless では AUTO COPY 機能により、S3 からのデータ取り込みが簡単です。
AUTO ONにより、自動でデータ取り込みが実行されます(OFFにすることも可能)。

COPY my_table
FROM 's3://my-bucket/sample-data.csv'
IAM_ROLE 'arn:aws:iam::123456789012:role/MyRedshiftRole'
FORMAT AS CSV
IGNOREHEADER 1
REGION AS 'us-east-1'
JOB CREATE "job1" 
AUTO ON;

公式のSampleテーブルを使います。
Redshiftのクエリエディタで以下を実行します。

create table users(
userid integer not null distkey sortkey,
username char(8),
firstname varchar(30),
lastname varchar(30),
city varchar(30),
state char(2),
email varchar(100),
phone char(14),
likesports boolean,
liketheatre boolean,
likeconcerts boolean,
likejazz boolean,
likeclassical boolean,
likeopera boolean,
likerock boolean,
likevegas boolean,
likebroadway boolean,
likemusicals boolean);                        

create table event(
eventid integer not null distkey,
venueid smallint not null,
catid smallint not null,
dateid smallint not null sortkey,
eventname varchar(200),
starttime timestamp);

create table sales(
salesid integer not null,
listid integer not null distkey,
sellerid integer not null,
buyerid integer not null,
eventid integer not null,
dateid smallint not null sortkey,
qtysold smallint not null,
pricepaid decimal(8,2),
commission decimal(8,2),
saletime timestamp);

適当にクエリエディタを開き実行しましょう。

こんな感じにできます〜。

eventを使ってAuto Copyを試します。

まずは何もレコードがないかを確認します。

こんな感じにSelectします。(テーブル右クリックでSelectできる)
レコードは0ですね〜。

S3からのAuto Copyには、
S3 event integrationを使いますので作成します。

S3 event integrationの作成には、
バケットにポリシー設定が必要で、設定しないとエラーになります!
以下のハマりポイントを先にやってください。

Auto Copy ハマりポイント

S3 Bucketにバケットポリシーを設定しないと
S3 event integrationを作成できないようです。

以下のポリシーを付与します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Auto-Copy-Policy-01",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "redshift-serverless.amazonaws.com",
                    "redshift.amazonaws.com"
                ]
            },
            "Action": [
                "s3:GetBucketNotification",
                "s3:PutBucketNotification",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::バケット名",
            "Condition": {
                "StringLike": {
                    "aws:SourceArn": "arn:aws:redshift:リージョン:アカウント番号:integration:*",
                    "aws:SourceAccount": "アカウント番号"
                }
            }
        }
    ]
}

S3 event integrationの作成

Createします。

nameは適当に入れます。

次の画面で事前に作成したバケットを選びます。

次にどのRedshiftを使うのか選びます。

次に進むとポリシーエラーが出ますが、

その下の「Fix it for me」で解消できます。

Fix it for meにチェックを入れてNextを押します。

最後にCreate S3 event integrationを押して完了です。

しかし…

前述のように以下のエラーがハマりポイントでした。
S3バケットにポリシーが必要なようです。

エラーになった人はバケットポリシーを付与後にやり直してください〜。


Auto Copyが動かない・・・

何度か試していると、AutoCopyが動かないことがあり、
またまたハマりました・・・。

色々調べたり、実験したんですが(かなり時間かかった・・・)

なんと・・・JOB名にハイフンが含まれるとダメなことが判明!
※2025年1月18日時点


例:JOB CREATE “job1-2-3”
公式にもハイフンがダメだとは書いてないし、Amazonさーん!ってちょっと思いました。
これに詰まった方は、ハイフンを消してやってみてください。
例:JOB CREATE “job123”

COPY my_table
FROM 's3://my-bucket/sample-data.csv'
IAM_ROLE 'arn:aws:iam::123456789012:role/MyRedshiftRole'
FORMAT AS CSV
IGNOREHEADER 1
REGION AS 'us-east-1'
JOB CREATE "job1-2-3" 
AUTO ON;

ちなみに、AWSサポートにも聞いていたので、
バグかも?って感じでレポートしておきました。

まとめ

Amazon Redshift Serverless は、初めてデータウェアハウスを利用する方や、コストを抑えたい方にとって非常に有用なソリューションです。使いやすさと高性能を両立し、データ分析の可能性を広げてくれます。


参考