SAP-C02-092 · セクション 10 / タスク 2.5
Purpose-built Data / Analytics Serviceの選択
Amazon Athena / AWS Glue / Amazon EMR / Amazon Redshift / Kinesis / Firehose / MSK / Flink / Lake Formation
AWSには、データ分析に利用できる複数のサービスがあります。
しかし、
データを分析したい
↓
分析サービスならどれでもよいではありません。
例えば、
Amazon S3上のデータへ
必要なときだけSQLを実行したい場合と、
大量データをSparkで変換したい場合と、
リアルタイムイベントを
複数アプリケーションで処理したい場合では、選択するサービスが異なります。
重要なのは、
データ量だけではなく、
何をしたいか
+
データは継続的に到着するか
+
どの程度の処理遅延を許容するか
+
どの処理方式が必要か
+
既存技術との互換性が必要か
+
ガバナンスが必要かを確認することです。
つまり、
処理目的
↓
処理方式
↓
必要な機能
↓
目的特化型サービスという順番で選びます。
ゴール
次のように判断できるようにします。
Amazon S3
+
アドホックSQL
+
インフラ管理不要
↓
Amazon Athenaデータ抽出 / 変換 / 統合
+
メタデータ管理
+
サーバーレス
↓
AWS GlueSpark / Hadoop
+
大規模分散処理
+
フレームワーク制御
↓
Amazon EMR反復的なBI
+
分析用データウェアハウス
↓
Amazon Redshift継続イベント
+
複数コンシューマー
+
再処理
↓
Amazon Kinesis Data Streams継続イベント
+
S3などへマネージド配信
↓
Amazon Data FirehoseApache Kafka互換性
↓
Amazon MSK状態を持つ
リアルタイムストリーム処理
↓
Amazon Managed Service
for Apache Flinkデータレイクの
集中アクセス制御
↓
AWS Lake Formation1. 最初に「分析」ではなく処理目的へ分解する
「分析基盤」という言葉だけでは範囲が広すぎます。
実際には、
データを問い合わせる
データを変換する
データをカタログ化する
大規模分散処理する
データウェアハウスへ格納する
ストリームを保持する
ストリームを配信する
ストリームをリアルタイム処理する
アクセス権限を管理するという異なる処理があります。
そのため、
分析というカテゴリからサービスを選ぶのではなく、
必要な処理からサービスを選択します。
2. バッチ処理とストリーム処理を分ける
大きな判断軸の1つが、
バッチ処理
(Batch Processing)と、
ストリーム処理
(Stream Processing)です。
バッチ処理では、
一定量のデータをまとめる
↓
処理を開始
↓
結果を出力という形が中心です。
例えば、
毎日深夜に
前日分のログを集計です。
一方、ストリーム処理では、
イベント到着
↓
継続的に処理
↓
短い遅延で結果を生成します。
例えば、
取引イベント
↓
リアルタイム異常検知です。
3. バッチとストリームはデータ量では決まらない
例えば、
10 TBのデータでも、毎晩まとめて処理するならバッチです。
逆に、
数KB / 秒しか到着しなくても、
到着後数秒以内に
判定する必要があるならストリーム処理です。
決定条件は、
データサイズだけではなく、
継続的に到着するか
+
結果が必要になるまでの時間です。
4. Amazon Athena
Amazon Athenaは、特にAmazon S3に保存されたデータを、
標準SQLで分析するときに利用できるサーバーレスクエリサービスです。
Amazon S3
↓
Amazon Athena
↓
SQLクエリ
↓
結果分析クラスターを用意して常時稼働させる必要はありません。
そのため、
Amazon S3にデータがある
必要なときだけSQL分析したい
インフラ管理を減らしたいという場合に有力です。
5. Athenaは「サーバーレスクエリ」が決定条件
例えば、
アクセスログ
監査ログ
Parquetデータ
CSVデータなどをAmazon S3へ保存しておき、
障害調査時だけ検索
月次分析だけ実行
データサイエンティストが
アドホックに調査する場合があります。
このようなとき、
専用分析クラスターを
常時稼働する必要性が低ければ、Athenaが適します。
ポイントは、
サーバーレスクエリです。
6. Athenaとデータウェアハウスを分ける
Amazon AthenaとAmazon Redshiftは、どちらもSQL分析に利用できます。
しかし目的は同じではありません。
Athenaが特に適しやすいのは、
Amazon S3上のデータ
+
必要時のSQL
+
アドホック分析です。
一方、
分析用データを継続的に管理
+
多数の利用者
+
反復的なBI
+
データウェアハウスならAmazon Redshiftを評価します。
つまり、
SQLを使うだけでは決めません。
7. AWS Glue
AWS Glueは、
データを発見
準備
移動
統合するためのサーバーレスデータ統合サービスです。
代表的には、
抽出
↓
変換
↓
ロードというETL処理を実行します。
例えば、
Amazon RDS
+
Amazon S3
+
外部データ
↓
AWS Glue
↓
変換 / 統合
↓
分析用Amazon S3という処理です。
8. AWS Glue Data Catalog
AWS Glueには、
AWS Glue Data Catalogがあります。
Data Catalogでは、
データの場所
スキーマ
パーティション
テーブル定義などのメタデータを集中管理できます。
実際のデータそのものをData Catalogへ保存するのではなく、
実データ
↓
Amazon S3など
メタデータ
↓
AWS Glue Data Catalogと考えます。
9. AthenaとGlueは競合ではなく役割が違う
例えばAmazon S3上に分析用データを作る場合、
AWS Glue
↓
データ変換 / 統合
+
Data Catalog
Amazon Athena
↓
SQL分析という組み合わせができます。
つまり、
GlueかAthenaかではなく、
データを整えるのかと、
データを問い合わせるのかを分けます。
10. AWS Glueはバッチ専用ではない
AWS Glueは、
定期的なETLだけに限定されません。
ストリーミングデータを処理するETLも構築できます。
したがって、
ストリーム
=
Glueではないとは判断しません。
重要なのは、
データ統合 / ETLという処理が中心かどうかです。
11. Amazon EMR
Amazon EMRは、
Apache Spark
Apache HadoopなどのビッグデータフレームワークをAWS上で利用するためのマネージドサービスです。
例えば、
大量データ
+
Spark処理
+
既存Hadoopワークロード
+
オープンソースフレームワークという場合に候補になります。
12. EMRではフレームワーク要件を見る
Amazon EMRを選択する決定条件は、
データ量が多いだけではありません。
例えば、
既存Sparkアプリケーション
複数のHadoop関連ツール
フレームワーク固有設定
特定ライブラリ
クラスター構成の制御などが必要なら、Amazon EMRが有力になります。
13. GlueとEMRをどう分けるか
AWS GlueでもApache Sparkベースの処理を利用できます。
そのため、
Sparkを使う
=
必ずEMRではありません。
大まかな判断軸は、
マネージドな
データ統合 / ETLを重視
↓
AWS GlueSpark / Hadoopなどの
ビッグデータフレームワークを
より直接活用
↓
Amazon EMRです。
AWS GlueとAmazon EMRのどちらにも、インフラ管理を削減できる実行方式があります。
したがって、
サーバーレスだからGlueだけでは決めません。
14. Amazon Redshift
Amazon Redshiftは、
データウェアハウス
(Data Warehouse)向けのサービスです。
代表的には、
業務データ
ログ
分析用データ
↓
Amazon Redshift
↓
SQL
↓
BI / レポート / 分析という構成で利用します。
15. Redshiftを選ぶ条件
例えば、
多数の利用者が
繰り返しSQL分析
大規模な結合 / 集計
分析用データを
ウェアハウスとして管理
BIツールから継続利用という要件では、Redshiftが有力です。
Amazon Redshiftには、
プロビジョンドだけでなく、
Amazon Redshift Serverlessもあります。
そのため、
インフラ管理を減らしたいという理由だけでAthenaを選ぶ必要はありません。
16. AthenaとRedshiftの決定条件
大まかには、
Amazon S3
+
アドホックSQL
+
専用ウェアハウス不要
↓
Amazon Athena反復的な分析
+
データウェアハウス
+
BI
↓
Amazon Redshiftと考えます。
ただし両サービスとも利用範囲は広いため、
データの置き場所だけではなく、
クエリの頻度
+
分析パターン
+
ウェアハウスとして
データを管理する必要性を確認します。
17. ストリーミングでは役割を分解する
ストリーミングアーキテクチャでは、
取り込む
保持する
複数コンシューマーへ渡す
変換する
状態を持って分析する
最終配信先へ届けるという役割があります。
1サービスですべてを行うとは限りません。
例えば、
送信元
↓
ストリーム
↓
ストリーム処理
↓
配信先という構造で考えます。
18. Amazon Kinesis Data Streams
Amazon Kinesis Data Streamsは、
継続的に到着するデータレコードをリアルタイムで収集・処理するためのストリーミングサービスです。
例えば、
IoTイベント
クリックストリーム
アプリケーションイベントを、
プロデューサー
↓
Kinesis Data Streams
↓
コンシューマーA
↓
コンシューマーB
↓
コンシューマーCのように複数の処理へ利用できます。
19. Kinesis Data Streamsではコンシューマーと再処理を見る
Kinesis Data Streamsでは、
ストリームを保持し、
複数のコンシューマーがデータを処理できます。
保持期間内であれば、
以前のレコードを
再度処理することも可能です。
したがって、
リアルタイム取り込み
+
複数の独立コンシューマー
+
再処理が必要なら有力です。
20. Amazon Data Firehose
Amazon Data Firehoseは、
リアルタイムストリーミングデータを、
Amazon S3
Amazon Redshift
Amazon OpenSearch Service
HTTPエンドポイントなどへマネージドに配信するサービスです。
基本イメージは、
プロデューサー
↓
Amazon Data Firehose
↓
配信先です。
21. Firehoseでは「配送」が中心
例えば、
アプリケーションログ
↓
Amazon S3へ保存したい場合、独自コンシューマーを構築して、
ストリームを読む
↓
まとめる
↓
S3へ書き込む処理を自分で実装する代わりに、Amazon Data Firehoseを利用できます。
Firehoseはデータを一定量または一定時間バッファリングしてから配信先へ届けます。
したがって、
1件到着
↓
即時に必ず配信先へ反映するサービスとは考えません。
22. Kinesis Data StreamsとData Firehose
両方ともストリーミングデータに関係しますが、主責任が違います。
Kinesis Data Streams
↓
ストリームを保持
+
コンシューマーが処理
+
複数コンシューマー
+
再処理Amazon Data Firehose
↓
配信先へ
マネージド配信です。
例えば、
複数アプリケーションが
同じイベントを独立処理ならKinesis Data Streamsが有力です。
一方、
受け取ったログを
ほぼそのままS3へ届けたいならAmazon Data Firehoseが有力です。
23. Amazon MSK
Amazon Managed Streaming for Apache Kafka(Amazon MSK)は、
Apache Kafkaを利用するアプリケーション向けのマネージドサービスです。
例えば既存環境に、
Kafkaプロデューサー
Kafkaコンシューマー
Kafkaトピックがあり、
Kafka互換性を維持したい場合に有力です。
24. Kinesis Data StreamsとMSK
Kinesis Data StreamsとAmazon MSKは、どちらもリアルタイムストリーミング基盤として利用できます。
大きな決定条件の1つが、
Apache Kafka互換性が
要件かどうかです。
例えば、
既存Kafkaアプリケーションを
大きく変更したくないならAmazon MSKを評価します。
一方、
Kafka互換性は不要
+
AWSネイティブな
ストリーミングサービスを利用ならKinesis Data Streamsが有力です。
25. Amazon Managed Service for Apache Flink
Amazon Managed Service for Apache Flinkは、
ストリーミングデータを
リアルタイムで処理 / 分析するためのサービスです。
例えば、
時間ウィンドウ
状態を持つ集計
継続的な変換
ストリーム間の処理などを実行できます。
26. Flinkはストリームそのものではなく処理を担当する
例えば、
Kinesis Data Streams
↓
Amazon Managed Service
for Apache Flink
↓
結果出力とできます。
また、Apache Kafka系のストリームを入力として処理する構成も可能です。
重要なのは、
Kinesis Data Streams
Amazon MSKが主にストリーム基盤となり、
Managed Service for Apache Flinkが、
状態を持つ
リアルタイム処理を担当するという違いです。
27. AWS Lake Formation
AWS Lake Formationは、
データをSQL分析するサービスでも、
ETLジョブを実行するサービスでもありません。
主な役割は、
データレイクの
ガバナンス
+
アクセス制御です。
28. Lake Formationではきめ細かなアクセス制御を集中管理する
例えば、
Amazon S3データレイク
+
AWS Glue Data Catalogで管理するデータに対して、
データベース
テーブル
列
行などの単位でアクセスを制御できます。
そのため、
複数の分析利用者
+
複数の分析サービス
+
共通データレイク
+
集中権限管理が必要ならAWS Lake Formationを評価します。
29. Glue Data CatalogとLake Formationを混同しない
大まかには、
AWS Glue Data Catalog
↓
データのメタデータを管理AWS Lake Formation
↓
カタログや基礎データへの
権限を集中管理です。
例えば、
どのテーブルが存在するかという情報はData Catalogで管理します。
一方、
誰が
どのテーブル / 列 / 行へ
アクセスできるかというガバナンスではLake Formationが重要になります。
30. データレイクの代表的な組み合わせ
例えば、
Amazon S3
↓
データ保存
AWS Glue Data Catalog
↓
メタデータ
AWS Lake Formation
↓
ガバナンス
Amazon Athena
↓
SQLクエリという構成が可能です。
各サービスの役割を分けると、
ストレージ
メタデータ
ガバナンス
クエリを別々に選択できます。
31. バッチ分析の代表的な構成
例えば、
業務DB
ログ
外部データ
↓
AWS Glue
または
Amazon EMR
↓
変換
↓
Amazon S3
または
Amazon Redshift
↓
Amazon Athena / BIのように構成できます。
ここで、
AWS Glue
か
Amazon EMRは、
ETL / データ統合中心なのか、
ビッグデータフレームワーク中心なのかで選びます。
32. ストリーム分析の代表的な構成
例えば、
アプリケーションイベント
↓
Kinesis Data Streams
↓
Managed Service
for Apache Flink
↓
リアルタイム集計
↓
配信先とできます。
別の要件では、
アプリケーションログ
↓
Amazon Data Firehose
↓
Amazon S3だけで十分かもしれません。
さらに、
既存Kafkaプロデューサー
+
Kafkaコンシューマーを維持するなら、
Amazon MSKが候補になります。
33. 「サーバーレス」だけでサービスを決めない
複数の分析サービスで、インフラ管理を減らせます。
例えば、
Amazon Athena
AWS Glue
Amazon Redshift Serverless
Amazon EMR Serverlessがあります。
しかし、
サーバーレスが必要だけではサービスを決められません。
それぞれ、
Athena
→ クエリ
Glue
→ データ統合 / ETL
Redshift
→ データウェアハウス
EMR
→ ビッグデータフレームワークという主な役割が異なります。
34. サービス選択の判断表
| 要件 | 第一候補として評価するサービス |
|---|---|
| Amazon S3へアドホックSQL | Amazon Athena |
| サーバーレスなデータ統合 / ETL | AWS Glue |
| 共通メタデータカタログ | AWS Glue Data Catalog |
| Spark / Hadoopなどの大規模分散処理 | Amazon EMR |
| データウェアハウス / 反復BI | Amazon Redshift |
| リアルタイムストリーム保持 / 複数コンシューマー | Amazon Kinesis Data Streams |
| ストリームをS3などへマネージド配信 | Amazon Data Firehose |
| Apache Kafka互換ストリーミング | Amazon MSK |
| 状態を持つリアルタイムストリーム分析 | Amazon Managed Service for Apache Flink |
| データレイクの集中ガバナンス | AWS Lake Formation |
35. 混同ポイント
| 混同 | 正しい判断 |
|---|---|
| SQLを使うならAthena | データウェアハウス要件ならRedshiftも評価 |
| Sparkなら必ずEMR | GlueもSparkベース処理を利用できる |
| Glueはバッチ専用 | ストリーミングETLも可能 |
| Data Catalogに実データを保存する | Data Catalogは主にメタデータ |
| Kinesis Data StreamsとFirehoseは同じ | ストリーム保持 / コンシューマー処理と配信先への配送で役割が異なる |
| Firehoseは複数コンシューマー向けの再処理可能なストリーム | 主目的は配信先へのマネージド配信 |
| Flinkはストリームブローカー | 主目的は状態を持つストリーム処理 |
| MSKはAWS独自のストリームAPI | Apache Kafka互換性が重要 |
| Lake FormationはSQLクエリエンジン | 主目的はデータガバナンス / アクセス制御 |
| サーバーレスならどのサービスでも同じ | 実行する処理で選択する |
36. SAP-C02での判断フロー
データ処理要件
↓
何をしたい?
├─ S3上のデータへSQL
│ ↓
│ Amazon Athena
│
├─ データ統合 / ETL
│ ↓
│ AWS Glue
│
├─ Spark / Hadoop
│ フレームワーク中心
│ ↓
│ Amazon EMR
│
├─ データウェアハウス / BI
│ ↓
│ Amazon Redshift
│
├─ ストリーミング
│ ↓
│ さらに役割を確認
│
│ ├─ ストリーム保持
│ │ 複数コンシューマー
│ │ 再処理
│ │ ↓
│ │ Kinesis Data Streams
│ │
│ ├─ 配信先への配送
│ │ ↓
│ │ Amazon Data Firehose
│ │
│ ├─ Kafka互換性
│ │ ↓
│ │ Amazon MSK
│ │
│ └─ 状態を持つ処理
│ ↓
│ Managed Service
│ for Apache Flink
│
└─ データレイクのガバナンス
↓
AWS Lake Formation
↓
必要に応じて
複数サービスを組み合わせるまとめ
目的特化型のデータ / 分析サービスを選択するときは、
分析サービスというカテゴリから考えるのではなく、
実行する処理へ分解します。
Amazon S3上のデータを必要なときだけSQL分析するなら、
Amazon Athenaを評価します。
データを抽出・変換・統合し、メタデータも管理するなら、
AWS Glueが有力です。
SparkやHadoopなどのビッグデータフレームワークを活用するなら、
Amazon EMRを評価します。
データウェアハウスと反復的なBI分析なら、
Amazon Redshiftです。
ストリーミングでは、
ストリーム保持 / 複数コンシューマー
→ Kinesis Data Streams
配信先への配送
→ Amazon Data Firehose
Kafka互換性
→ Amazon MSK
状態を持つストリーム処理
→ Managed Service for Apache Flinkと役割を分けます。
データレイク全体のアクセス制御では、
AWS Lake Formationを評価します。
最終的には、
バッチ / ストリーム
↓
クエリ / ETL / フレームワーク /
ウェアハウス / ストリーム / ガバナンス
↓
必要な処理遅延
+
互換性
+
運用方式
↓
目的特化型サービスの順に選択します。
主要AWS公式資料
- AWS Certified Solutions Architect - Professional 試験ガイド
- Amazon Athena — デベロッパーガイド
- AWS Glue — デベロッパーガイド
- Amazon EMR — 管理ガイド
- Amazon Redshift — 管理ガイド
- Amazon Kinesis Data Streams — デベロッパーガイド
- Amazon Data Firehose — デベロッパーガイド
- Amazon Managed Streaming for Apache Kafka — デベロッパーガイド
- Amazon Managed Service for Apache Flink — デベロッパーガイド
- AWS Lake Formation — デベロッパーガイド
理解確認
このページの内容を10問で確認します。
理解確認10問へ →