こんにちは。ざわかける!のざわ(@zw_kakeru)です。
前回の記事の続き(後編)となっております。
前編を書いてから2ヶ月以上経ってしまいました。申し訳ありません。
この後編ではGlue Studioを使ってRedshiftからデータを取得し、そのままS3へ格納するところまでをやっていこうと思います。
AWS Glue Studioとは
AWS Glue Studioは2020年9月にリリースされた、AWS Glueで実行するジョブをマウスでポチポチするだけで簡単に作成・実行できるようにするビジュアルインターフェースです。
これによってプログラミングに不慣れなユーザーにもETLジョブを扱うことが可能になりました。
作成されたジョブはGlue側でスクリプトとして確認・編集できるため、細かい修正や値の指定なども自由に行えます。
ちなみに:S3とは
S3は、Simple Storage Serviceの略で、Amazonが提供するクラウドストレージサービスです。
単純に様々なデータを保存しておけるサービスで、他の一般的なストレージサービスと比較して(当たり前ですが)多くのAWSツールとの親和性が高く、可用性と耐久性に優れている点が特徴です。
今回はジョブの出力先としての指定が一番簡単だったのでこのS3を用いました。
ちなみにS3の環境構築に関してはこの記事では触れておりません(記事の趣旨がずれてしまうため)。最初から存在するものとして取り扱っています。
S3環境が無い、という人は自身の持っているストレージ環境を使用してください。
実際に動かしてみた
前編の記事に引き続いて、AWS Glue Studioを用いたETLジョブの作成をしていきます。
まだそちらをご覧になっていない方は、このリンクから前編を確認して、手順に追いつきましょう。
ジョブの作成
Glueの画面からAWS Glue Studioを選択してGlue Studioを起動し、「Create and manage jobs」を選択します。
Source(入力元)にRedshift、Target(出力先)にS3を指定して「Create」します。
(Blank graphを選択して後から自分で追加することも可能です。)
上記のプリセットを行った場合は、すでに三つのモジュールが設置されています。
この三つがいわゆる「Extract」「Transform」「Load」に対応している、というわけですね。
ジョブの設定と処理内容の実装
次に、ジョブタイトルを設定します。好きなものを入力しましょう。
その後、Data source propaties – RedshiftタブからこのジョブでアクセスしたいDBとテーブルの設定を行います。
前半からここまでの流れで作成したDBとテーブルがプルダウンで表示されるので、それらを選択しましょう。
Job detailsタブを開き、「Name」「IAMロール」を設定します。
再びVisualタブに戻り、「ApplyMapping」のNode propertiesタブから「Node type」を、実行したい処理に合わせて変更します。
この記事では「DropFields」を選択しました。
「DropFields」は入力されたクエリの中から任意のカラムを選択して削除する、という処理です。
そしてここではその削除するカラムを選択せずに進むため、入力がそのまま素通りして出力されることとなります。
S3 bucketのData target properties – S3を編集します。
「Format」と「S3 Target Location」を設定しましょう。
実行と結果の確認
上記の手順が完了したら「Save」し、「Run」してください。
問題なければSuccessfully started jobの文字が表示されます。
Runsタブから、実行したジョブの詳細が確認できます。
ジョブの処理が完了したら出力先として指定したS3バケットにアクセスし、結果が正しく保存されていることを確認してみましょう。
きちんと出力されていますね。なぜか20ファイルに分割されていますけど。
しかもよく見たらrun-DataSink0-4-part-r-00001とrun-DataSink0-4-part-r-00002以外は全てファイルサイズが0byteとなっています。
とりあえず中身の入ってそうなこの二つを見てみようと思います。
オブジェクトURLから直接アクセスしようとするとAccess Deniedが表示されました。ロールの設定はきちんとやってるはずなのにな、、
公式のトラブルシューティングを見てみると、対症療法として「オブジェクトアクション」から「アクションをダウンロード」するといいみたいです。
ダウンロードしたファイルをエディタで開くと、指定したデータ形式(今回はjson)で出力されていることが確認できました!
めでたしめでたし。
その他注意事項
ちなみに、出力データを分割せずに1つのファイルに出力する方法はこちらに記してあります。
終わりに
GUIでジョブを作成できるのはとても便利でしたが、まだリリースして日が浅いためか実行できる処理が少なく、複雑な処理をしようとするとすぐに扱いきれない場面が出てくると思います。
その場合は素直にGlueの方でコーディングするしかないみたいですね。
Glue Studioで作成したジョブをGlue側ですぐにコードに変換することもできるので、簡単で大規模なところはGlue Studioで作ってから後でスクリプトを足す、という使い方もできるかもしれません。
S3に関する詳細はこの記事の趣旨から離れてしまうと思ったので記述しませんでしたが、知らない人からしたら突然出てきて困ったかもしれませんね。すみません。
要望が多ければ記事にしようかなあと思います。
とはいえ現在、手元にAWS環境が無くなってしまったので、これ以上はまたAWSを使う時が来ないと書けない気がしていますが、、、