Amazon Web Services ブログ
AWS Developer Toolsを使用したサーバレスなAWS Glue ETLアプリケーションの継続的インテグレーションとデリバリの実装
大規模なデータおよびデータレイクのワークロード用にサーバーレスETL(抽出、変換およびロード)アプリケーションを開発するためにAWS Glueはますます普及しています。 ETLアプリケーションをクラウドベースのサーバーレスETLアーキテクチャに変換する組織は、ソースコードからビルド、デプロイ、プロダクトデリバリまで、シームレスでエンドツーエンドの継続的なインテグレーションおよび継続的なデリバリ(CI / CD)パイプラインが必要です。優れたCI / CDパイプラインを持つことで、組織はプロダクションリリース前にバグを発見し、より頻繁にアップデートを提供することができます。また、開発者が高品質のコードを書いたり、ETLのジョブリリース管理プロセスを自動化したり、リスクを軽減したりするのに役立ちます。
AWS Glueは、フルマネージドのデータカタログとETLのサービスです。これは、データの発見、変換、およびジョブスケジューリングなどの困難で時間のかかる作業を簡素化し自動化します。 AWS Glueは、データソースをクロールし、CSV、Apache Parquet、JSONなどの一般的なデータフォーマットとデータタイプ用に事前に作成された分類子を使用してデータカタログを構築します。
AWS Glueを使用してETLアプリケーションを開発する場合、CI / CDの次のような課題に直面する場合があります。
- ユニットテストによる繰り返しの開発
- 継続的なインテグレーションとビルド
- ETLパイプラインをテスト環境にプッシュする
- ETLパイプラインをプロダクション環境にプッシュする
- 実データを使用したETLアプリケーションのテスト(live test)
- データの調査と検証
この記事では、AWS Developer Tools(AWS CodePipeline、AWS CodeCommit、AWS CodeBuildなど)とAWS CloudFormationがサポートするサーバーレスAWS Glue ETLアプリケーションのCI / CDパイプラインを実装するソリューションを紹介します。
ソリューションの概要
次の図は、ワークフローのパイプラインを示しています。
このソリューションでは、AWS CodePipelineを使用して、ETLアプリケーションのソースコードのテストおよびステージへのデプロイを制御および自動化することができます。 このソリューションは、以下のステージを含むパイプラインで構成されています。
1.)Source Control:このステージでは、デプロイするETLジョブのAWS Glue ETLジョブソースコードとAWS CloudFormationテンプレートファイルの両方がバージョン管理にコミットされます。 バージョン管理にAWS CodeCommitを使用することにしました。
ETLジョブソースコードとAWS CloudFormationテンプレートを取得するには、gluedemoetl.zipファイルをダウンロードします。 このソリューションは、以前の記事、AWS Glue と Amazon S3 を使用してデータレイクの基礎を構築するに基づいて開発されました。
2.)LiveTest:このステージでは、AWS Glueクローラー、ジョブ、S3バケット、ロール、およびソリューションに必要なその他のリソースを含むすべてのリソースがプロビジョニング、デプロイ、テスト、クリーンアップされます。
LiveTestステージには、次のアクションが含まれています。
- Deploy:このアクションでは、このソリューションに必要なすべてのリソース(クローラ、ジョブ、バケット、ロールなど)が、AWS CloudFormationテンプレートを使用してプロビジョニングおよびデプロイされます。
- AutomatedLiveTest:このアクションでは、すべてのAWS Glueクローラーとジョブが実行され、データの探索と検証テストが実行されます。これらの検証テストには、ローテーブルとデータレイク内の変換されたテーブルのレコード数の検証やその他のビジネス検証が含まれますが、こだけに限定はされません。私はこのアクションのためにAWS CodeBuildを使用しました。
- LiveTestApproval:このアクションは、ETLアプリケーションを次のステージにデプロイ/推進するためにパイプライン管理者の承認が必要な場合に使います。パイプラインは、管理者が手動でリリースを承認するまでこのアクションで一時停止します。
- LiveTestCleanup:このアクションでは、テスト用のクローラ、ジョブ、ロールなどのすべてのLiveTestステージリソースがAWS CloudFormationテンプレートを使用して削除されます。このアクションは、テストリソースがAutomatedLiveTestおよびLiveTestApprovalの期間だけ存在することを保証することによってコストを最小限に抑えるのに役立ちます
3.)DeployToProduction:このステージでは、すべてのリソースがAWS CloudFormationテンプレートを使用して本番環境にデプロイされます。
やってみよう
このコードパイプラインでは、LiveTestのテストステージを完了するまでに約20分かかります(手動承認が必要なLiveTestの承認ステージまで)。
このソリューションを開始するには、[Launch Stack]をクリックします。
前述のように、これにより、すべてのステージでCI / CDパイプラインが作成されます。 最初のリリース変更をトリガするサンプルAWS Glue ETLジョブソースコードの初期コミットを実行します。
AWS CloudFormationコンソールで、「作成」を選択します。 テンプレートのリソース作成が完了すると、スタック出力タブにパイプライン名が表示されます。
その後、CodePipelineコンソールを開き、新しく作成されたパイプラインを選択します。 最初は、パイプラインのCodeCommitステージでソースアクションが失敗したことが示されます。
新しいパイプラインがCloudFormationスタックの作成によって適用された最初のコミットを検出するまで数分を要します。 コミットが検出されると、パイプラインが開始されます。 CodeCommitのSourceステージが実行されるとすぐに、ステージの完了ステータスが正常に表示されます。
CodeCommitコンソールで、ナビゲーションペインでコードを選択して、ソリューションファイルを表示します。
次に、パイプラインがdeployおよびAutomatedLiveTestアクションのLiveTestステージをどのように通過し、最終的にLiveTestApprovalアクションに達するかを見ることができます。
この時点で、AWS CloudFormationコンソールをチェックすると、LiveTest Deployアクションの一部として新しいテンプレートがデプロイされていることがわかります。
この時点で、AWS GlueクローラーとAWS Glueジョブが正常に実行されたことを確認してください。 また、対応するデータベースと外部テーブルがAWS Glue Data Catalogに作成されているかどうかを確認してください。 次に、以下に示すようにAmazon Athenaを使用してデータが検証されていることを確認します。
AWS Glueコンソールを開き、ナビゲーションペインで[データベース]を選択します。 データカタログに次のデータベースが表示されます。
Amazon Athenaコンソールを開き、次のクエリを実行します。 レコードの数が一致していることを確認します。
SELECT count(*) FROM "nycitytaxi_gluedemocicdtest"."data"; SELECT count(*) FROM "nytaxiparquet_gluedemocicdtest"."datalake";
以下に、ローデータを示します。
以下に、変換されたデータを示しています。
パイプラインは、リリースが承認されるまでアクションを一時停止します。 データを検証したら、CodePipelineコンソールのLiveTestApprovalアクションでリビジョンを手動で承認します。
必要に応じてコメントを追加し、承認を選択します。
LiveTestApprovalステージがコンソールに承認済みとして表示されます。
リビジョンが承認されると、パイプラインはAWS CloudFormationテンプレートを使用して、LiveTestのDeployアクションでデプロイされたリソースを破棄します。 これにより、コストを削減し、すべてのデプロイでクリーンなテスト環境を確保できます。
プロダクションへのデプロイは最終ステージです。 このステージでは、AWS CloudFormationテンプレートを使用して、すべてのリソース(AWS Glueクローラー、AWS Glueジョブ、Amazon S3バケット、ロールなど)をプロダクション環境にプロビジョニングしデプロイします。
パイプライン全体を正常に実行したら、AWS CodeCommitに格納されているソースコードを変更したり、自由に試してみてください。 たとえば、AWS Glue ETLジョブを変更してエラーを生成すると、AutomatedLiveTestアクションが失敗するはずです。 または、AWS CloudFormationテンプレートを変更して作成に失敗した場合は、LiveTestデプロイメントアクションに影響するはずです。 パイプラインの目的は、プロダクションに展開されるすべての変更が期待どおりの動作を保証することです。
まとめ
この記事では、AWS CodePipelineやAWS CodeBuildなどのAWS開発ツールを使用して、サーバレスAWS Glue ETLソリューションのCI / CDを簡単に実装する方法を学びました。 このようなソリューションを実装することで、ETLの開発と組織でのテストを迅速化できます。
追加の読書
この記事が役立つ場合は、AWSを使用したApache Sparkアプリケーションの継続的なインテグレーションとデリバリを実装する、AWS Glue と Amazon S3 を使用してデータレイクの基礎を構築するをチェックしてください。
著者について
Prasad AlleはAWS Professional Servicesのシニアビッグデータコンサルタントです。 彼はAWSエンタープライズと戦略的顧客のためにスケーラブルで信頼性の高いビッグデータ、機械学習、人工知能とIoTソリューションを開発し、その時間をリードしています。 彼の興味は、Advanced Edge Computing、Edgeでの機械学習などのさまざまなテクノロジーにまで及んでいます。 彼は休暇を家族と過ごし楽しんでいます。
Luis Caroは、AWS Professional Servicesのビッグデータコンサルタントです。 彼は顧客と協力して、大規模なデータプロジェクトに関するガイダンスと技術援助を提供し、AWSを使用する際のソリューション価値の向上を支援します。
翻訳は上原誠が担当しました。(原文はこちら)