フルマネージド&サーバレスなETLサービス「AWS Glue」の仕組みと構成要素を理解する
先日(日本時間の)2017年08月15日にAWS Summit 2017 NYCでアナウンスされたフルマネージドETLサービスの「AWS Glue」がついに一般利用開始となりました。早速色々触ってみたいと思っておりますが、サービスの特性上色々なサービスと連動させる必要があり、またAWS Glueを構成する各種要素も幾つか存在しているようで、サクッと作成・設定・実行!...という訳には行かなさそうな雰囲気です。そこで当エントリでは、実際にAWS Glueを使ってみる前に、AWS Glueの概要や構成要素について内容を把握してみたいと思います。
目次
AWS Glueの(ざっくり)概要
AWS Glueはフルマネージド且つサーバレスのETL(抽出、変換、ロード)サービスです。以下の構成要素から成り立つ形となっています。
- 中央メタデータリポジトリ(AWS Glue Data Catalog)
- ETLエンジン(Pythonコードを自動生成可能)
- ジョブスケジューラ(依存性解決、ジョブの監視、再実行等に対応)
AWS Glueは(このサービス)単体で動くものでは無く、AWS GlueがAWSの他サービスを活用し、サービス間で連動する事で機能します。re:Invent 2016のキーノートで発表されたスライドで以下のイメージ図が展開されていましたが、AWS Glueは各種AWSサービスと連動し、各種AWSサービスの間を繋ぐ「糊(Glue)」として処理を構成・実行する形となります。
AWS Glueが各種AWSサービスとの連携を管理してくれるので、利用者は本来取り組むべき作業=ETLジョブの作成や監視といった部分に注力出来るようになります。
ワークロード(処理)を実行する上でのリソースの準備(プロビジョニング)や管理もAWS Glueが行ってくれるので、ユーザーがこの部分に頭を悩ませる事もありません。処理時間を短縮するためにリソースが必要となる場合は、AWS Glueがウォームプールインスタンスからリソースを展開し、ワークロードを実行します。
管理コンソールでの諸々の操作の他にAPIとして「AWS Glue API」が提供されています。また、AWS CLIにも対応しています。
AWS Glueのユースケース
AWS Glueの利用用途としては以下の様なケースが考えられます。
データウェアハウス(DWH)の構築
データウェアハウス・データ分析環境を構築する上で手間の掛かる以下のような作業を簡略化・効率化する事が出来ます。
- データストアに関するメタデータの収集・カタログ化
- 半構造化されたデータ(ストリームやログ等)も対応可能
- ETLスクリプトの生成:データの移動、フラット化、編集等の実施
- スキーマの変更を検出、設定に基いて変更
- スケジュールやイベントに基づく形でETLジョブを実行
- トリガーを利用したジョブ間の依存関係フローの作成
- データウェアハウスの活動を監視するランタイムメトリクスを収集
- ジョブのエラー処理や(自動的な)再実行
- 必要に応じてジョブ実行のリソースをスケーリング
Amazon S3データレイクに対してサーバレスクエリを実行
Amazon S3のデータをカタログ化してAmazon AthenaやAmazon Redshift Spectrumクエリで実行する時にAWS Glueを活用する事が出来ます。
クローラ(※詳細後述)を使ってメタデータをデータと同期させておく事で、AthenaやAmazon Redshift SpectrumはAWS Glue Data Catalogを介してAmaozn S3の「データレイク」に直接クエリを投げる事が可能となります。統合された1つのインターフェースでデータにアクセス出来るようになる、というのは嬉しいところですね。
イベント駆動ETLパイプラインの構築
AWS LambdaからのAWS Glue ETLジョブを呼び出し、Amazon S3で新しいデータが利用可能になったタイミングでETLジョブを実行させる、というような事も可能です。検知した新しいデータセットはAWS Glueデータカタログに登録する事も出来ます。
データ資産を理解
AWSサービスを使って保存されたデータをAWS Glueデータカタログで管理する事で、データに対して統一されたビューを提供する事が出来ます。データカタログは、外部Apache Hive Metastoreの代替としても機能します。
AWS Glueの仕組み・構成要素
コンセプト
以下はAWS Glueの実行環境を図示したもの(構成図)です。
クローラ(Crawler)はAWS Glueの構成要素の1つです。クローラーにデータストアを指定する事でそのクローラはテーブル定義をデータカタログに作成します。ちなみにAWS Glueデータカタログにはテーブル定義の他にもETLジョブを定義するために必要なメタデータも含まれており、データを変換するジョブを定義する時に利用します。(※ちなみにクローラとは"ウェブ上の文書や画像などを周期的に取得し、自動的にデータベース化するプログラム"を指します。AWS Glueに当てはめて考えるならば、取得対象が「データストア」であり、データベース化された情報が「データカタログ」という風になる感じですね。)
スクリプトはAWS GlueコンソールやAPIスクリプトを用いて生成・提供され、オンデマンドや指定されたトリガー(スケジュールやイベント)で実行し、指定したデータの変換やロード処理等を行います。スクリプトはAWS GlueのApache Spark環境で実行されます。
構成要素
AWS Glue Console(コンソール)
各種AWS GlueオブジェクトやETLワークフローの定義、それら要素のオーケストレーションを管理します。
AWS Glue Data Catalog(データカタログ)
永続的なデータメタストア。各AWSアカウントで1つのAWS Glueデータカタログを持ちます。AWS IAMポリシーを使ってAWS Glueデータカタログによって管理されるデータソースへのアクセスを制御することも出来ます。データカタログにはスキーマ変更の追跡/データの系列/データアクセス制御などの「包括的な監査機能とガバナンス機能」があるので、データスキーマの変更を監査し、システム間のデータ移動を追跡してデータが不適切に変更されたり誤って共有されたりしないようにする事が出来ます。
データカタログはAPIを使って操作することも可能です。
AWS Glue Clawler&Classifier(クローラ&分類子)
AWS Glueでは上記で言及したクローラと併せてClassifier(クラシファイア:"分類子"の意)を使うことで、スキャンしたリポジトリ内のデータを分類する事が出来ます。
AWS Glue ETL Operations(ETL操作)
AWS Gludeではデータカタログのメタデータを使って、様々なETL操作を実行するために利用・変更出来るpySparkスクリプトを自動生成出来ます。このスクリプトはAWS Glue拡張機能を備えており、ETLやデータ加工・移動等の処理を記述する事も可能です。
The AWS Glue Jobs System(ジョブシステム)
ETLワークフローを編成するための管理インフラを提供。
まとめ
以上、AWS Glueの仕組みや構成要素について駆け足ではありましたが見ていきました。ETL処理の実装部分をPySparkで実装するという点、データカタログや分類子等の作成や設定等をきちんと押さえておく事がAWS Glueを活用していくための大きなポイントとなりそうですね。様々なサービスとの連動が可能となっているAWS Glueについては引き続き実践を踏まえて理解を深めて行きたいと思います。