焼肉が食べたい

ただの日記です。技術的に学んだことも書こうと思っていますが、あくまで自分用メモです。 プロフィールはこちら。https://chie8842.github.io/aboutme/

ETL環境の使い分け

この記事は、AWS Analytics Advent Calendar 2021の12日目の記事です。

AWS上でETLを行う場合の環境の使い分けについて書こうと思います。

ここでは、AWS Glueを利用したデータ管理についてご紹介しようと思います。 AWS Glueは、ETLツールとして認識している人が多いかもしれませんが、データ管理のための様々な仕組みがあります。 そのうちいくつかをご紹介しようと思います。

ETLの構成要素

ETLの構成要素として、ETL実行環境とワークフローエンジンがあります。ETL実行環境とは、その名の通り、ETL処理を行うアプリケーションが実際に動作する環境を指します。一方ワークフローエンジンとは、ETL処理の依存関係を定義して、順番に実行するためのものです。多くはDAG(有向非巡回グラフ)と呼ばれる形式で処理順序が記述され、失敗したときにどこで失敗したか確認したり、リトライを簡単にすることができます。本稿では、AWSで利用できるETL実行環境とワークフローエンジンを紹介します。

ETL実行環境

AWS Lambda

サーバレスのアプリケーション実行環境として、最も多くのエンジニアに馴染みが深いといってもいいのがAWS Lambdaではないでしょうか。ETL実行環境としてみたときのLambdaのメリットとして、好きなプログラミング言語やライブラリといったランタイム環境を利用できるということもあります。アプリケーション作成という意味では当たり前のように感じるかもしれませんが、ETLは、特に大規模データを処理する場合にはPythonJavaで作成された決まったフレームワークに依存した環境を用意することもあります。 しかしデータエンジニアではなく、アプリケーションやインフラエンジニアがデータパイプラインを作成する場合に、Golangなどの普段利用しているランタイム環境のほうが都合の良い場合もあります。一方で、1つの実行環境利用できるCPUやメモリといったリソースに制限があります。また、実行時間制限も存在します。1回に処理するデータ量が10GB以下の場合で、好きなランタイムを利用してETL処理を行いたい場合におすすめの環境になります。

ECS/EKS

すでにアプリケーションの実行環境としてECSやEKSといったコンテナオーケストレーション環境が導入されている場合、その環境と別にLambdaを利用するのでなく、利用中のECS/EKS上でETL用のコンテナを起動するということも考えられます。Lambdaと比べると環境構築や管理の手間がかかるため、もともと利用していない場合はおすすめしませんが、すでに利用している環境がある場合は、あいのりすることで管理が楽になります。また、Lambdaと異なり、リソースの最大容量の制限や実行時間制限もないため、データ量が数十GB以下であり、Lambdaではリソースや実行時間の制限に不安がある場合も、ECSやEKSを利用することで解決します。

AWS Glue

AWS GlueはETLを行うためのサービスです。TB以上の大規模なデータ処理や、複雑なデータ処理もサポートするための機能が揃っています。AWS GlueのETL環境には、Python ShellとApache Sparkという分散処理フレームワークを利用する環境の2種類があります。 1台のサーバでは処理しきれない大量データに対するETLを行う場合は、GlueのApache Spark環境を利用します。Apache Sparkは、大きなデータをあたかも1台のサーバで処理するかのようにETL処理を記述して、実際には複数のサーバ上で分散処理を行い、その際の障害時のリトライや複数サーバ上のタスクのスケジューリング、データ転送といった複雑さを管理してくれるソフトウェアです。また、さまざまなデータソースに接続できるコネクタや、データをカタログ化して利用しやすくする機能もあります。数十GB以上のデータを一度に処理する場合や、複雑なETL処理を一元的に管理したい場合は、AWS GlueのApache Spark環境を利用するのがいいと思います。 また、GlueのPython Shellは、AWS Lambdaよりも大きなリソースをもつコンテナを起動して、Pythonの処理を実行することができます。Lambdaではリソースや実行時間の制限に不安があるけれども、既存のECSやEKSがなく、管理の手間を増やしたくない場合は、Glue Python Shellを利用するのがおすすめです。

AWS Glue DataBrew

AWS Glue DataBrewは、ノンコードで大量データに対するETL処理を記述することのできるサービスです。また、品質チェックやPII Detection/Maskingの機能も存在します。BIや機械学習の前処理として、データアナリストやデータサイエンティストが利用するのにも適しています。特殊で複雑な処理が必要な場合は、Glueなどを利用してコードで表現する必要が出てくる場面があるかもしれませんが、プログラミングに慣れていない人でも管理できる環境として重宝できます。Excelのような感覚でノンコードで利用できるにもかかわらず大量データを全量データを処理できるのがポイントです。

ワークフローエンジン

Step Functions

Step Functionsは、APIアクションの依存関係を定義して、順に実行できます。数千の処理を並列で処理することも可能で、安価に大規模に利用することができます。

Amazon Managed Workflows for Apache Airflow(MWAA)

MWAAは、Apache Airflowというオープンソースのワークフローエンジンのマネージドサービスです。ワークフロー管理をPythonプログラムで記述するので、ダイナミックにDAGを生成できるといった特徴があります。また、各タスクはコンテナ上で実行するので、小さな処理であればETL実行環境としても利用することができます。AWS以外のETL実行環境とも接続するような場合も、OSSとして開発されたAPIを利用して簡単に実現することができます。

Glue Workflow

Glue Workflowは、上で説明したAWS Glueの機能の一つとして提供しているワークフローです。トリガー、ジョブ、クローラの3種類のコンポーネントを組み合わせることで、ワークフローを組み立てます。ETL処理の依存関係が医療する実行環境がGlueのみに閉じている場合は、1つのサービスで全てを実行できるので適しています。

まとめ

AWSにおけるETL環境の使い分けについて記述しました。 ETLはデータ活用をはじめるための重要な第一歩になります。また、適切なサービス利用により、管理を楽にすることができます。 ぜひ使ってみてください。