【レポート】サーバーレスビッグデータアプリケーション構築のベストプラクティス #reinvent #ABD202

2017.12.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

原題

ABD202 - Best Practices for Building Serverless Big Data Applications

概要

Serverless technologies let you build and scale applications and services rapidly without the need to provision or manage servers. In this session, we show you how to incorporate serverless concepts into your big data architectures. We explore the concepts behind and benefits of serverless architectures for big data, looking at design patterns to ingest, store, process, and visualize your data. Along the way, we explain when and how you can use serverless technologies to streamline data processing, minimize infrastructure management, and improve agility and robustness and share a reference architecture using a combination of cloud and open source technologies to solve your big data problems. Topics include: use cases and best practices for serverless big data applications; leveraging AWS technologies such as Amazon DynamoDB, Amazon S3, Amazon Kinesis, AWS Lambda, Amazon Athena, and Amazon EMR; and serverless ETL, event processing, ad hoc analysis, and real-time analytics.

サーバーレス技術により、サーバーのプロビジョニングや管理を行うことなく、アプリケーションとサービスを迅速に構築し、拡張できます。このセッションでは、大規模なデータ・アーキテクチャーにサーバーレスの概念を組み込む方法を紹介します。大規模なデータに対するサーバーレスアーキテクチャの背景と利点を探り、データを取り込み、格納し、処理し、視覚化するためのデザインパターンを検討します。途中で、サーバーレス技術を使用してデータ処理を合理化し、インフラストラクチャー管理を最小限に抑え、機敏性と堅牢性を向上させ、クラウドとオープンソース技術の組み合わせを使用して参照アーキテクチャを共有することで、トピックには以下のものが含まれます。サーバーレス大規模データアプリケーションのユースケースとベストプラクティス。 Amazon DynamoDB、Amazon S3、Amazon Kinesis、AWS Lambda、Amazon Athena、Amazon EMRなどのAWSテクノロジーを活用しています。およびサーバーレスETL、イベント処理、アドホック分析、およびリアルタイム分析が含まれます。

登壇

Ben Snively - Solutions Architect

セッションレポート

アジェンダ

  • サーバーレス - 何を、なぜ?
  • サーバーレス - どのサービスをいつ?
  • 主要なビッグデータアプリケーション
  • ビッグデータアプリケーションにサーバーレスをフィットさせる
  • 次のステップ

サーバーレス - 何を、なぜ?

サーバーレス分析の進化

最初の段階は仮想環境(Virtualized)を用いて構築(アプリケーション、DB)、運用(スケーリング、冗長化)、保守(バックアップ、パッチ適用)します。次のステップではアプリケーションのデプロイとクラスタ設定以外はマネージド(Managed)のサービスを活用します。最終的にはデータ分析(Analytics)以外はAWSサービスを利用します。

サーバレスの特長

  • サーバーのプロビジョニングや管理は不要
  • 利用に応じてスケールします
  • 無可動に対して費用は発生しません
  • 可用性や冗長化済み

サーバーレスをビッグデータプラットフォームにうまく適合する

  • サーバレス(Serverless)、仮想環境(Virtualized)マネージド(Managed)を組み合わせたり、適合させる
  • 効果的にサービスを簡単する
    • 急速にデータを取り込む(Ingest)、分類(Categorize)、発見(discover)する
    • データを簡単にクエリや分析を許可する
    • データを変換(Transform)やロード(Load)する
    • ハンドラベースのカスタムイベントを提供する
  • サーバーレスはインフラやサーバを意思せず、これまで以上に分析に集中できる

サーバーレス - どのサービスをいつ?

サーバレスコンピュート - Lambda

  • クラウド上でコードを動かす - フルマネージドかつ高可用性
  • セットアップをAPIや状態変化をトリガにする
  • 発生したイベントレイトにマッチさせてスケールを自動化する
  • Node.js(Javascript)、Python、Java、C#
  • 呼び出すたびに100msの実行時間がかかる

インタラクティブなクエリサービス - Amazon Athena

  • Amazon S3 に直接クエリする
  • ANSI SQL の準拠
  • サーバーレス
  • マルチプルデータフォーマット
  • クエリ毎の課金

サーバーレスデータカタログとETL/ELT サービス - AWS Glue

  • Data Catalog
    • クロールして、発見し、データの準備をする
    • データ管理とサーバーレス分析
  • Jobオーサリング
    • サーバレスETL - 使った料に応じたお支払
  • Job実行
    • 登録したジョブをオンデマンド、スケジュール、他のジョブの終了トリガで実行する

Amazon Kinesis : ストリーミングデータを簡単にする

AWS上のストリームをキャプチャ、配信、処理を簡単にするサービス

  • Kinesis Stream
    • テクニカルデベロッパー向け
    • ストリームデータの処理や分析するかすたむアプリケーションを構築する
  • Kinesis Firehose
    • 全てのテクニカルデベロッパーとデータサイエンティスト向け
    • ストリーミングデータの大規模なボリュームをAmazon S3、Amazon Redshift、Amazon ESに簡単にロードする
  • Kinesis Analytics
    • 全てのテクニカルデベロッパーとデータサイエンティスト向け
    • 標準SQLクエリを用いて簡単にストリームデータを分析する

サーバーレスをビッグデータアプリケーションに何に適用するか?

  • データ処理
  • データウェアハウス
  • レポーティング
  • Read-time processing
  • 予測分析
  • AI

主要なビッグデータアプリケーション

ビッグデータアプリケーションの特徴

  • あらゆるデータを収集する
  • どこからでも洞察する
  • 柔軟なアクセス
  • 将来の拡張性

ビッグデータアプリケーションのコンポーネント

ビッグデータアプリケーションでは以下の役割と工程に基づいてデータを処理します。

各役割や工程に具体的なコンポーネントを割り当てたのが、以下の図になります。

  • データを取り込み(Ingest)と保存(Store)
    • Amazon Kinesis や S3
  • 準備(Prepare)と変換(Transform)
    • AWS Lambda
    • AWS Glue のクローラやジョブ
  • 分析(Analyze)と推論(Reason)
    • Kinesis Analytics
    • Amazon Athena
  • アクセスとユーザーインタフェース
    • Amazon QuickSight
  • データカタログ(Catalog)と検索(Seach)
    • AWS Glue のデータカタログ

Demonstration - Lambda pre-processing

デモでは、Firehorseに蓄えた擬似的なチャットメッセージデータをS3バケットとプレフィックス指定しました。rawデータは年月日の階層で複数のファイルが格納されます。KMSで暗号化されたzip圧縮された1つのオブジェクトには複数のレコードが格納されています。このデータに対してバッチ処理をします。データは様々な属性を持つJSONファイルを使って、ヒューリスティック分析を実行するためAthenaやEMRなど様々なツールを用いることができます。人の感情はポジティブとネガティブがあり Kinesis analyticsを使いリアルタイム分析をします。

Lambdaによる前処理

Lambda では、KinesisのストリームデータのPutイベントでLambdaファンクションを呼び出すことが可能です。以下は、Lambdaファンクションで入力したストリームデータを変換(Transform)、付加(Enrich)、フィルタ(Filter)する例です。集計する前のプリプロセッサ処理にLambdaを用います。

Amazon Kinesis Analytics - SQL

Amazon Kinesis Analyticsは、Amazon kinesis の ストリームに対してアドホッククエリーを実行できます。以下の例では、定期的にストリームデータを集計テーブルを作成しています。

これまでの解説の全体像

Zombi Chat Simuratorという、データソース(またはProducer)があったとします。RawInjectionストリームにチャットテキストをPutすると、Zombi Chat Application というトリガで、Sentiment Analytics PreProducerというLambdaファンクションが起動、さらにpre-processした結果をSentiment Analytics StreamにPutします。最終的はSentiment Analytics MessagesというS3データとして保存します。保存したデータは、QuickSightからAthena Connector経由でアドホッククエリーを実行して可視化します。

既存のリアルタイム分析に適合する

既存システムのProducerがApache KafkaにPutしたデータをApache Stormで処理していると仮定します。これに最新のサーバレス分析に適用しますと以下の順に処理されます。

  1. ProducerはApacheKafkaの代わりに、Kinesis Streams、DynamoDB Streams、SQSの何れかにPutします。
  2. PutしたイベントトリガでLambdaファンクションを起動もしくはKinesisAnalyticsクエリを実行します。(※2)
  3. 上記でアラートを検知した場合は、Amazon SNSで通知したり、分析結果をDynamoDBに保存して、データを変換(Transform)、付加(Enrich)、フィルタ(Filter)、集計(Aggrigate)します。(※3)

※1 KCL:Kinesis Client Libraryの略で、Kinesis Streamのクライアントアプリ(Producerに対するConsumer)を作成するためのライブラリです。ここでは、クライアントアプリそのものを意味しています。

※2 サーバーレスではありませんがマネージドサービスであるAmazon EMRのApache Spark や Apache Flinkにて、データを変換(Transform)、付加(Enrich)、フィルタ(Filter)、集計(Aggrigate)するという選択肢も考えられます。

※3 サーバーレスではありませんがマネージドサービスであるAmazon ElastiCache、Amazon RDS、Amazon ESに保存するという選択肢もよくあるユースケースです。

ビッグデータアプリケーションにサーバーレスをフィットさせる

ビッグデータアプリケーションのコンポーネント

  • データを取り込み(Ingest)と保存(Store)
    • Amazon Kinesis
  • 準備(Prepare)と変換(Transform)
    • AWS Glue
  • 分析(Analyze)と推論(Reason)
    • Amazon Athena
  • アクセスとユーザーインタフェース
    • Amazon QuickSight

サーバーレスリアルタイム分析

よって、サーバーレスリアルタイム分析は以下の流れになります。

Demonstration - Interactive analytics

次のデモでは、AWS Glue のクローラを用いてData Catalogに登録して表示できるようにします。 Twitterのデータは素晴らしいデータセット分析し、これに対してクエリします。ネストしたJSONファイルには配列も含まれている複雑な形式ですが、名称、フィールドの形式が自動認識されます。定義されたテーブルはAthenaからクエリできます。CSVから列指向のParquetに変換するのにGlueを使います。 Lambda では、S3ファイルのPutイベントでLambdaファンクションを呼び出すことが可能です。以下は、LambdaファンクションでPutしたファイルを適切なパーテションに移動して、パーティションの再設定クエリを実行します。Glue Data Catalogが更新されて、Amazon Athenaから追加したデータが参照できるようになります。QuickSightはスケジュール実行でAthenaからSPICEにデータをロードします。

ビッグデータアプリケーションのコンポーネント

  • データを取り込み(Ingest)と保存(Store)
    • Amazon S3
  • 準備(Prepare)と変換(Transform)
    • AWS Glue
  • 分析(Analyze)と推論(Reason)
    • Amazon Athena
  • アクセスとユーザーインタフェース
    • Amazon QuickSight

Data lake reference architecture

(サーバーレス分析はS3のファイルを参照するデータレイクが向いている、的な話をヒアリングしてまとめる)

正しいジョブのために正しいツール

既存のHdoopクラスタについては?

正しいジョブのために正しいツール

既存のHdoopクラスタにおいても、GlueデータカタログとCentralStorageであるS3は共通です。 サーバレス分析との相違点は、EMRとの相違点はクエリの実行をEMR、可視化をJupiter notebookを用いる点です。

次のステップ

「サーバーレスをビッグデータプラットフォームにうまく適合する」を再掲

  • サーバレス(Serverless)、仮想環境(Virtualized)マネージド(Managed)を組み合わせたり、適合させる
  • 効果的にサービスを簡単する
    • 急速にデータを取り込む(Ingest)、分類(Categorize)、発見(discover)する
    • データを簡単にクエリや分析を許可する
    • データを変換(Transform)やロード(Load)する
    • ハンドラベースのカスタムイベントを提供する
  • サーバーレスはインフラやサーバを意思せず、これまで以上に分析に集中できる

感想

リアルタイム分析で、サーバーレスサービスを活用するベストプラクティスのご紹介でした。Lambdaで変換したファイル作成したり、アドホッククエリが投げられるように、AWSのGlueのクローラでデータを探索して、Parquetに変換する例がご紹介されています。これらの手順ついては今後検証してみたいと思います。