AWS Redshift – Glue連携のやり方(前編)

技術

こんにちは。ざわかける!のざわ(@zw_kakeru)です。

前回の記事でAWS RedShiftを単体で動かすことができたので、今回は他のAWSサービスとの連携例としてAWS Glueを取り上げ、GlueのチュートリアルとRedShift – Glue連携までの手順を確認していこうと思います。

AWS Glueとは

AWS Glueは、Amazon社が提供している「データインテグレーションサービス」です。
「インテグレーション」の意味は「統合」で、「データインテグレーション」はデータベース(DB)などから得られた様々なデータに対して抽出や整形、結合、正規化などデータに関する様々な処理を行うことを指します。

データウェアハウス(DWH)やDBには、基本的に表(テーブル)形式でデータが保存されています。
この表形式というのは、データの保存や検索、抽出には適していますが、抽出後にシステムやクライアント端末でそのまま使用することはできません。
システムやクライアント端末に送る前にテキスト(json、csvなど)形式などに変換する必要があります。

このような変換を行ってくれるシステムがデータインテグレーションサービスであり、中でもAWSが提供しているサービスの名称がGlueです。
データインテグレーションサービスは実際には変換だけではなく、前述したような一般的なデータ処理全般を取り扱うことができるようになっています。

AWS Glueでは、可視化インターフェースとコードベースのインターフェースの両方を備えており、システムにあまり詳しくない人は可視化インターフェースで、システムに詳しく細かい処理まで対応させたい人はコードベースのインターフェースを使うことができます。
また、Glueは当然ながら他のAWSサービスとの親和性も高く、低コスト高セキュリティを維持しつつRedShiftやS3などとの連携をスムーズに行えます。
世界的なシェアも高く、公式、非公式ともにドキュメントも充実しています。

今回はそんなGlueを試しに動かしつつ、前回の記事で作成したRedShiftテーブルとの連携までを行ってみようと思います。

実際に動かしてみた

AWSマネジメントコンソールからログイン

前回同様AWSマネジメントコンソールを開き、「コンソールにサインイン」しましょう。
アカウントID、ユーザー名、パスワードを入力してログイン完了です。

検索窓から「Glue」を選択して開きます。

接続設定の作成

まず、RedShiftテーブルと連携するための「接続」設定を行います。
データベースの「接続」から「接続の追加」をします。

接続名と接続タイプを選択します。

  • 接続タイプ:接続の名前。分かりやすいものが望ましいと言えます。
  • 接続タイプ:プルダウンから選択。使用するサービスに応じて変わります。ここではJDBC(Java DataBase Connectivity)を選択します。

アクセス情報の設定をします。

入力事項を確認して、「完了」しましょう。

これで接続が追加されました。

データベースの作成

続いて、出力先となるデータベースの追加を行います。
RedShiftのDBからデータを取ってきてもそれらをどこに保持しておくのかという問題が発生するため、Glue内でDBを作成しておきそこに格納していきます。
「結局GlueでもDBで持っとくんかい!」と思うかもしれませんが、複雑な処理系ではここからさらに別のDBから取ってきたデータの追加や統合、削除などを行うため、この機構は必要なのです。
「データベース」から「データベースの追加」を選択します。
データベース名を入力し、「作成」してください。

これによってデータベースが追加されました。

クローラの作成と実行

前述の章で、GlueからRedShiftへのアクセス(接続)ができるようになりました。
実際にはクローラを介してRedShift内のデータベースのデータを取得します。
「クローラ」から「クローラの追加」をします。

(ちなみに)クローラとは
DB上を巡回して、必要となるデータを取得(クロール)してくるプログラムのことを指します。
クロールは本来、GoogleやBingなどの検索エンジンがインターネット上を巡回してWebサイトの情報を取得し検索結果に反映させることを指す言葉ですが、ここではDBに対してそれを行うことを表しています。
前章で接続を確保してから実際にクローラがデータを取得してくる、という流れになっていますね。

クローラ名を入力します。
必要であればタグや説明も記述してください。

続いてソースタイプを選択します。
「Crawler source type」はデータカタログ(Data Catalog)の既存テーブルからクロールするかどうかの設定です。
データカタログはGlue自身に備わっているDB機能のようなもので、今回はここではなくRedShift内のDBからクロールするので「Data stores」を選択します。
「Repeat crawls of S3 data stores」はS3からクロールする際に、再クロール時に前回の差分だけを取ってくるかどうかの設定です。
今回はS3ではなくRedShiftからのクロールなためどちらを選択しても影響はないと思います。
ここではデフォルト設定の「Crawl all folders」としておきます。
(ちなみになぜかここの設定だけ英語表記でした。サービス提供が追いついてない感じがしますね。。)

データストアを選択します。
先程の設定で(既存のデータカタログではなく)「Data stores」を選択したため、じゃあどこからデータ取ってくるねんって聞かれてるわけですね。
もちろんRedShiftなので、先程作成した「接続」を選択します。
追記:インクルードパスは「%」ではなく「dev」を指定してください。(前回作成したテーブル名を「dev」としたため。)

IAMロールの設定を行います。
RedShift接続に必要な権限を持ったロールを(場合によっては作成して)選択してください。

(ちなみに)IAMロールとは。
「Identity and Access Management Role」の略で、他のAWSサービスの操作権限を割り当てる仕組みです。
今回はRedShiftにアクセスしたいので、RedShiftへのアクセス権限を持ったIAMロールが必要となります。

スケジュールの設定を行います。
スケジュールはこのクローラをいつ実行するのか、という設定で、月一とか週一とか細かく決めることができますが、ここでは「オンデマンド」(実行ボタンを押した時)としておきます。

クローラの出力設定を行います。
データベースに、先程作成したものを選択し、次へ進みます。
任意の設定オプションの項目がありますが、基本的にデフォルトのままで構いません。

入力事項を確認して、「完了」してください。
これでクローラが追加されます。

作成したクローラを選択し、「クローラを実行」しましょう。

問題なければ「成功」となります。
ちなみに、RedShiftからデータをクロールしてくるので、当然ながらRedShiftの該当クラスターは起動(Available)状態でなければなりませんよ。
(私は一回これでハマりました…笑)

終わりに

今回はRedShiftからデータを取得するためのもろもろの設定を行いました。
接続するための設定や出力先の作成などが細かい部分もありますが、ジョブを一つ作成してそこに全てを突っ込むよりは、これくらいの粒度で進んでいく方が後々使いまわしができて良いのかもしれないなあと思いました。

後編の記事(下のリンク)では、(記事執筆当初)リリースされたばかりのGlue Studioを使って、取得したデータをGUIの直感的な操作で加工していく様子を公開していきます。↓

今回は以上です。

タイトルとURLをコピーしました