AWSのローカルでのETLパイプラインの開発とテスト

ソースノード: 997665

AWSのローカルでのETLパイプラインの開発とテスト

通常、ETLパイプラインの開発とテストは、セットアップに時間がかかり、メンテナンスが必要な実際の環境/クラスターで行われます。 この記事では、DockerとLocalStackを使用して、ETLパイプラインをローカルで開発およびテストすることに焦点を当てています。 このソリューションは、クラウド上にサービスをセットアップすることなく、ローカル環境でテストする柔軟性を提供します。


By サブハッシュ・スリーニバサチャー、Epsilonのソフトウェアエンジニアテクニカルリード

概要

 
 
AWSは、エンジニア、データサイエンティストがインフラストラクチャをセットアップする必要性を心配することなく、ソリューションの構築と問題解決に集中できるようにする上で極めて重要な役割を果たします。 サーバーレスで従量課金制の価格設定により、AWSはその場でサービスを簡単に作成できます。

AWS Glueは、サーバーレスETLパイプラインを構築するためにデータエンジニアによって広く使用されています。 PySparkは、開発に使用される一般的な技術スタックのXNUMXつです。 ただし、サービスが利用可能であるにもかかわらず、対処する必要のある特定の課題があります。

ETLスクリプト(PySpark)またはその他のサービスのいずれの場合でも、AWS環境でコードをデバッグすることは困難です。

  • AWSサービスの使用状況を継続的に監視することは、コスト要因を管理するための鍵です
  • AWSは、すべてのSparkライブラリがインストールされたDev Endpointを提供していますが、価格を考慮すると、大規模な開発チームでの使用には適していません。
  • AWSサービスのアクセシビリティは 限られました 特定のユーザー向け

ソリューション

 
 
AWSのソリューションは、アクセシビリティやコスト要因を気にすることなく、ローカル環境で開発、テストできます。 この記事を通じて、XNUMXつの問題に取り組んでいます–

  1. AWS開発エンドポイントを使用せずにローカルでPySparkコードをデバッグします。
  2. ローカルでAWSサービスとやり取りする

どちらの問題も、Dockerイメージを使用することで解決できます。

  1. まず、AWS環境でサーバーを使用する必要がなくなり、代わりに、マシンで実行されているDockerイメージがコードを実行する環境として機能します。

AWSは、PySparkスクリプトに使用できるサンドボックスイメージを提供します。 Dockerイメージは、PySparkコードを実行するようにセットアップできます。 https://aws.amazon.com/blogs/big-data/developing-aws-glue-etl-jobs-locally-using-a-container/
 

  1. コードの実行にDockerマシンを使用できるため、ETLパイプラインの構築中にファイルを保存(読み取り/書き込み)するS3のようなサービスが必要です。

S3との相互作用は次のように置き換えることができます ローカルスタック これは、クラウドアプリケーションを開発するための使いやすいテスト/モックフレームワークを提供します。 これは、実際のAWSクラウド環境と同じ機能とAPIを提供するローカルマシン上のテスト環境を起動します。

ヘッダ

これまでのところ、この記事では、ETLパイプラインの構築と利用可能なサービスの使用について説明しています。 ただし、SNS、SQS、CloudFormation、Lambda関数などのAWSサービスを使用する場合は、同様のアプローチをあらゆるユースケースに適用できます。

アプローチ

  • Dockerコンテナをリモートインタプリタとして使用する
  • コンテナでPySparkセッションを実行します
  • LocalStackを使用してS3サービスをローカルでスピンアップする
  • PySparkコードを使用して、LocalStackで実行されているS3バケットからの読み取りと書き込みを行います

前提条件

 
以下のツールをマシンにインストールする必要があります

  • デッカー
  • PyCharm Professional / VisualStudioコード

  • Dockerイメージをダウンロードまたはプルします(Dockerプル)。
    • libs:glue_libs_1.0.0_image_01
    • localstack / localstack
  • Dockerコンテナーは、PyCharmプロフェッショナルバージョンでリモートインタープリターとして使用できます。

製品の導入

 
Dockerがインストールされ、イメージがローカルマシンにプルされた状態で、コンテナーを起動するための構成でPyCharmの設定を開始します。

  • docker-compose.ymlファイルを作成します

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-docker-compose-yml

  • DockerFileを作成する

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-dockerfile

  • インストールするパッケージを含む要件ファイルを使用する

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-requirements-txt
 

  • Pythonリモートインタープリターをセットアップする
    • docker-composeファイルを使用してPythonインタープリターをセットアップします。
    • PyCharm DockerCompose設定で `glue-service`を選択します。
    • Docker-composeファイルは、両方のイメージのコンテナーを作成して実行します
    • LocalStackはデフォルトでポート4566で実行され、S3サービスが有効になっています

Code

  • インポートする必要のあるライブラリ

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-imports

  • LocalStackで実行されているS3バケットにファイルを追加します

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-add_to_bucket
http://host.docker.internal:4566 Dockerコンテナ内でローカルに実行されているS3です

  • S3から読み取るようにPySparkセッションを設定します

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-create_pyspark_session

  • PySparkセッションは、提供された模擬クレデンシャルを介してS3に接続します
  • 作成されたPySparkセッションを使用して、S3から直接読み取ることができます

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-read_from_s3

  • 最後に、任意の形式でS3に書き込むことができます

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-write_to_s3

上記の手順を実行すると、テスト用のモックデータを含むダミーのcsvファイルを作成できます。

  • S3(LocalStackで実行されている)にファイルを追加します
  • S3から読む
  • 寄木細工としてS3に書き戻す

.pyファイルを実行して実行できるはずです。LocalStackAPIを使用してローカルで実行されているS3バケットから読み取ることができるPySparkセッションが作成されます。

さらに、LocalStackがで実行されているかどうかを確認することもできます http://localhost:4566/health

LocalStackは、AWSCLIを使用してコマンドを実行する機能も提供します。

まとめ

 
 
DockerとLocalstackを使用すると、Pysparkコードを実行し、コンテナーでデバッグし、ローカルで実行されているS3に書き込むための迅速で簡単な方法が提供されます。 AWSサービスに接続しなくても、これらすべてを実行できます。

 
参照:

 
バイオ: サブハッシュ・スリーニバサチャー Epsilon Digital Experienceチームのリードソフトウェアエンジニアであり、データサイエンスの問題、特にパーソナライズを解決し、クライアントのROIを促進するエンジニアリングソリューションを構築しています。

関連する

ソース:https://www.kdnuggets.com/2021/08/development-testing-etl-pipelines-aws-locally.html

タイムスタンプ:

より多くの KDナゲット