Amazon Web Services ブログ
株式会社ディー・エヌ・エーが Amazon Redshift Serverless と dbt を活用して匿名化データの品質テストを最大100倍高速化を実現
本ブログは 2024 年 12 月 17 日に公開された「How DeNA Co., Ltd. accelerated anonymized data quality tests up to 100 times faster using Amazon Redshift Serverless and dbt」を翻訳したものです。
本ブログは株式会社ディー・エヌ・エー(以下 DeNA)と Amazon Web Services Japan が共同で執筆しました。
DeNA は「一人ひとりに想像を超える Delight を」というミッションのもと、ゲーム、ライブコミュニティ、ヘルスケア・メディカル、スポーツ・スマートシティ、モビリティなど多岐にわたる事業を展開しています。中でもヘルスケア・メディカル事業では、機密性の高いデータを扱っており、同社のデータポリシーに準拠するためにデータ処理に関して以下の要件を設定しています:
- データポリシーに準拠したデータ処理 – 必要に応じて機密性の高いデータをマスキングや削除を行い、匿名化データに変換します。加えて区分値に無効な値が含まれないようにするなど、的確且つ損失なくデータの処理を行います。
- データポリシーに準拠した匿名化データの品質テスト – 加工後のデータ品質問題を迅速に特定し対処するため、データ品質テストを実施して高品質なデータを常に維持します。
本ブログでは、DeNA が Amazon Redshift Serverless と dbt (dbt Core) を組み合わせて、匿名化データの品質テストを高速化した事例をご紹介します。なお、本取り組みについては DeNA Engineer Blog にも記載があります。そちらも併せて参考いただけると幸いです。
解決したい課題
データ品質テストは、毎月 10 TB のデータに対して 1,300 件のテストを実施する必要があります。今までデータ品質テストは AWS 上の Amazon Elastic Compute Cloud (Amazon EC2) で Python で実装されたバッチジョブを実行して行ってきました。しかし、事業とデータ量の拡大に伴い、以下の課題に直面しました。
- パフォーマンス – エンジニアがビッグデータ処理を想定してバッチを設計していなかったため、データ品質テストの完了に数日から数週間を要していました。
- コスト – 特に大規模なデータセットに対して、バッチの設計によりコストが増加しました。実装上、データをメモリにロードして処理する必要があり、大規模なテーブルのデータを扱う際には、メモリ容量が大きな EC2 インスタンスを利用する必要がありました。
- 保守性 – バッチの実装がエンジニアごとに大きく異なり、保守に必要な知識が属人化していたため、保守のコストが増大していました。
Redshift Serverless と dbt への移行
これらの課題を解決するため、DeNA は以下の理由から Redshift Serverless と dbt (オープンソースのデータ変換ツール) を採用しました。主な理由は以下の通りです:
- Redshift Serverless によりスケーラブルでコスト効率の高い処理が可能
- dbt により利用技術を標準化して運用がしやすいデータ品質テストの実装が可能
この決定は様々なソリューションを比較検討した結果なされました。当初 DeNA は既存の Python バッチジョブを並列化することを検討しました。しかし、現時点で保守負荷が高く改修が難しい Python バッチに手を入れるのは工数が多くかかり、また属人化による高い保守負荷を解決することにはつながらないため、採用を見送りました。代わりに、ヘルスケア・メディカル事業で利用している dbt を採用し、大規模な分散処理が可能な AWS のサービスと組み合わせて利用することを決定しました。dbt は SQL 中心のテンプレートエンジンで、反復的で拡張可能なデータ変換を SQL と Python で記述することができます。dbt には data tests という、SQL を利用してデータモデルやテーブルが期待されるルールや条件に従っているかを検証するテスト機能があり、データの整合性や制約違反を検出してデータ品質を高めることができます。この機能を利用することで、事業における利用技術を統一化することができ、運用性や汎用性の高い SQL を利用してデータ品質テストを実装することができます。また dbt を大規模分散処理が得意なマネージドサービスに接続することで、コスト効率を向上させながら処理を高速化できると考えました。
AWS は dbt を接続してデータを処理できるサービスとして、Amazon Redshift や AWS Glue などを提供しています。今回 DeNA は Redshift Serverless を採用しました。主な採用理由は、サーバーレスによる低い運用負荷と高いコストパフォーマンスに加え、データウェアハウスサービス特有の構造化されたデータへの優れた処理パフォーマンスです。
ソリューションの概要
DeNA は以下のアーキテクチャを設計しました。コスト効率や運用性の観点で、すべてのコンポーネントをサーバーレスで構築しました。
設計のポイント
- データ品質テストの対象となるデータは Amazon Simple Storage Service (Amazon S3) に配置されるため、配置をトリガーに Amazon EventBridge 経由で AWS Step Functions のステートマシン (ワークフロー) を起動しました。1種のデータで複数のファイルが提供されるため、すべてのファイルの配置が完了したことを確認できるように、提供元のシステムから完了を示すファイルを Amazon S3 に配置するようにしました。
- dbt は AWS のサーバーレスコンテナサービスである AWS Fargate を利用して Amazon Elastic Container Service (Amazon ECS) 上で実行するようにしました。Amazon ECS を採用した理由は、サーバーレス且つ従量課金で dbt を実行でき、過去 DeNA で Amazon ECS を利用したアプリケーションの開発・運用経験があったためです。また dbt が実行されるコンテナ上から Redshift Serverless に安全にアクセスできるようにするため、DeNA はコンテナに機密データを渡す Amazon ECS の機能を使用し、AWS Secrets Manager に保存された接続のためのクレデンシャルをECS タスク実行 IAM ロールを使用してコンテナに渡しました。
- アクセス制御のため Redshift Serverless を制御の境目で別々のワークグループに分離しました。ワークグループはコンピューティングリソースの集合で、アクセス制御などのセキュリティ設定も含まれます。データ品質テストでは、データ品質の問題を調査するなどの運用の観点から運用者が実際に Query Editor V2 を利用して Redshift Serverless 上のデータベースにアクセスすることがあります。しかし扱っているデータの機密性が高いため、限定された人のみアクセスできるようにする必要があります。Redshift Serverless はデータベースセキュリティ機能を利用することで、データベース製品と同じように GRANT コマンドを利用して細かくデータへのアクセス制御を行うことが可能です。しかし今回は AWS Identity and Access Management (IAM) の機能を利用して、ワークグループへの接続を IAM レベルで制御しました。これにより、特定の IAM ロールを持つ人は特定の Redshift Serverless ワークグループへのアクセスに制限することができるようになり、IAM で認可の管理が統一的にできるようになりました。またワークグループを分離したことによって、処理で必要とする計算リソースである RPU (Redshift Processing Unit) を個別に調整することができ、コスト最適化にも寄与しました。
- Amazon ECS 上で実行される dbt のログは Amazon CloudWatch Logs に送信されます。DeNA はメトリクスフィルターを利用してログを CloudWatch メトリクス に変換し、これらのメトリクスに基づいてアラームを作成しました。トリガーされたアラームは、 Amazon Simple Notification Service (Amazon SNS) を使用して AWS Lambda の関数を呼び出します。この Lambda 関数は、dbt の実行とデータ品質テストの結果レポートを作成し、DeNA 内部のチャットアプリケーションに送信します。DeNA はデータ品質テストの結果を elementary CLI を利用して可視化しました。elementary CLI は dbt ネイティブなデータオブザーバビリティソリューションで、dbt と連携してデータの状態を可視化することが可能です。これにより、エンジニア以外のユーザーでもデータ品質テストの状況を効率的に確認できるようになりました。
導入効果
DeNA はソリューションを設計して新しいプラットフォームに移行することで、直面していたすべての課題を解決することができました:
- パフォーマンス – 数日または数週間掛かっていた処理時間を 1~2 時間に短縮し、最大 100 倍の高速化を実現しました。以前は 877 分かかっていた特定のデータ品質テストが、Redshift Serverless の大規模分散処理機能により、現在では 1 分で完了できるようになりました。
- コスト – 90% のコスト削減を実現できました。サーバーレスサービスで構築したため、データ品質テスト実行中のみのコスト発生となり、コスト圧縮を実現することができました。
- 保守性 – dbt による利用技術の標準化により、実装の属人化を無くすことができました。dbt の data tests 機能により、データ品質テストの実装が簡素化されました。elementary CLI により、エンジニア以外のユーザーにもデータ品質テストのオブザーバビリティが向上しました。AWS のサーバーレスサービスにより、ワークロードのインフラを管理するための運用コストがほぼゼロになりました。
まとめ
本ブログでは、DeNA が Redshift Serverless と dbt を組み合わせることで、データ品質テストを安全かつ効率的に加速できた事例をご紹介しました。この組み合わせは、DeNA のユースケースだけでなく、さまざまな業界における多様なビジネスユースケースにも適用可能です。
Redshift Serverless と dbt の組み合わせについて詳しくは、以下のリンクを参照ください。
- dbt CLI and Amazon Redshift
- Manage data transformations with dbt in Amazon Redshift
- Implement data warehousing solution using dbt on Amazon Redshift
- Best Practices for Leveraging Amazon Redshift and dbt™
著者について
Momota Sasaki は、DeNA の主要子会社である DeSC ヘルスケア株式会社のエンジニアリングマネージャーです。彼は 2021 年に DeNA に入社し、DeSC ヘルスケア株式会社に出向しました。それ以来、一貫してヘルスケア事業に携わり、データプラットフォームの開発と運用をリードし、推進しています。
Kaito Tawara は、DeNA の主要子会社である DeSC ヘルスケア株式会社のデータエンジニアで、ヘルスケア事業のデータプラットフォームの改善に注力しています。ウェブシステムのバックエンド開発とデータサイエンスの経験を積んだ後、データエンジニアリングに転向しました。2023 年に DeNA に入社し、 DeSC ヘルスケア株式会社に出向しました。現在は名古屋市からリモートで勤務し、ヘデータプラットフォームの強化に貢献しています。
Shota Sato は、AWS Japan のアナリティクススペシャリストソリューションアーキテクトです。デジタルネイティブビジネスを行う顧客向けに AWS を活用したデータ分析ソリューションの提案を行っています。
このブログの翻訳はソリューションアーキテクトの佐藤 祥多が担当しました。