AWS認定Big Data勉強記 - 2

みなさん、こんにちは、えいりんぐーです。
データ分析や機械学習周りの仕事をしています。

今回は、AWSにおけるビッグデータ関連サービスとそれらを利用する上で重要なサービスを大まかに書きます。可能な限りGoogle Cloudで相当するサービスも例示しますが、一致するサービスばかりではありません。また、誤りや不備などありましたらコメントいただけると幸いです。なお、ここで紹介している内容は、[AWSにおけるビッグデータ分析のオプション](https://d1.awsstatic.com/whitepapers/Big_Data_Analytics_Options_on_AWS.pdf)と、[AWS Black Belt Online Seminarのサービス別活用資料集](https://aws.amazon.com/jp/aws-jp-introduction/aws-jp-webinar-service-cut/)を参考にしています。

|サービス名|カテゴリ|特徴|GCPでは|
|---|---|---|---|
|S3|オブジェクトストレージ|大きなデータファイルを保存できる。小さいデータをたくさん保存するのには向かない。|GCS|
|Glacier|オブジェクトストレージ|大きなデータファイルを保存できる。頻繁にアクセスするためのものではない。|GCS Coldline|
|RDS|フルマネージドリレーショナルデータベース|ACID特性とトランザクションを満たす。スケーラブル。OracleやPostgreSQLなど主要なRDBに対応。|Cloud SQL|
|Aurora|フルマネージドリレーショナルデータベース|RDSの実質的な上位互換。MySQLのみに対応。|Cloud Spanner?|
|Athena|サーバレスSQLサービス|Prestoベース。S3のデータに対して直接クエリする。CSVやJSONなど様々なデータ形式に対応。<br>DBのインフラ管理が不要 (インスタンスのチューニングは必要)。OLAP用だが、大規模なデータ分析には向かない。|-|
|QuickSight|サーバレス可視化サービス|S3, RDS, Athena, Redshift, EMRなどのソースからデータを取得してクエリ・可視化が可能。<br>SPICE (Super-fast Paralell In-memory Calculation Engine) による高速なデータ処理。|Data Studio|
|Redshift|データウェアハウス|OLAPに特化したRDB。ペタバイト級のスケールアウト。SpectrumではAthenaのようにデータレイク上のデータへ直接アクセスできる。|BigQuery|
|EMR|分散処理基盤|MapReduceに基づくHadoopエコシステムに対応した分散処理基盤。Hive, Pig, Spark, Presto, HBase, Hue, Zeppelinなどのサービスをカバーあるいは連携している。<br>大規模な分析に向いているが、小さなデータセットには適していない。厳密なACID特性を求めるものではない。|Dataproc|
|Elasticsearch Service|マネージド全文検索エンジン|Apache Luceneをベースにした検索エンジン。ログ解析やCRMデータ分析に適している。|-|
|ElastiCache|フルマネージド分散インメモリキャッシュ|memcachedとredisをサポートする。リクエストが多く、低レイテンシーが求められる環境に適している。|Cloud Memorystore|
|DynamoDB|フルマネージドNoSQLデータベース|キーバリューストア。スケーラブル、低レイテンシー、高可用性。結果整合性を保証するが、厳密なトランザクションやACID特性は満たさない。DynamoDB Accerelatorというインメモリキャッシュ機能がある。|Bigtable, Datastore|
|Neptune|フルマネージドグラフデータベース|エンティティの関連が多対多となるソーシャルグラフのデータベース。Apache TinkerPopのプロパティグラフとW3CのRDFをサポートする。|-|
|Lambda|サーバレスコンピュートサービス|イベントをトリガーとして何らかの処理を実行する（スケジュール実行も可能）。EC2のようなインフラを管理する必要がない。コードが実行された時間分だけ課金される。実行時間の長い処理には向かない。|Cloud Functions|
|Batch|フルマネージドバッチ処理実行サービス|負荷の高い処理を効率的に行う。ジョブはキューに送信され、基本的にFIFOで処理される。裏ではLambda同様にコンテナが動く。|Dataflow|
|Kinesis|フルマネージドストリームデータ収集・処理サービス|データ収集のためのStreams、各種ストレージに送るためのFirehose、リアルタイム分析をするためのAnalyticsがある。<br>1つ以上のシャードからなるストリームでデータを処理する。シャード内では処理順が保証される。|Dataflow|
|DataPipeline|ETL処理サービス|KinesisやGlueほど名前を聞かない。サービス間のデータ統合・処理をスケジュールベースで自動化する。|Dataflow?|
|Glue|ETLサービス|サーバレスで分散処理ができる。データレイクへのデータ収集、収集されたデータの前処理、Redshiftへのデータの登録などを行う。|-|
|SQS|フルマネージド分散メッセージキューサービス|キューの利用でデータの受け渡しを疎結合にできる。スケーラブルかつ高スループット。順番は保証されず、同じメッセージを複数回受信する可能性がある。|Cloud Pub/Sub|
|SageMaker|機械学習ワークフロー全体をカバーするフルマネージドサービス|Jupyter環境でのモデルの構築、学習、デプロイ手段を提供する。データのラベリングも可能。SDKを用いたフレームワークの利用、カスタムアルゴリズムの実装もできる。|Cloud ML Engine, Datalab|
|IoT|デバイスとAWSを連携させるサービス・SDK|デバイスとAWSの双方向のやり取りを実現するアーキテクチャ兼SDK|IoT Core|
|EC2|クラウドコンピューティングリソース|既存のOS・ミドルウェアが利用可能で、計算・メモリ・IOそれぞれに特化したインスタンスを使用できる。リザーブドインスタンスやスポットインスタンスで割安に利用可能。暗黙でRDSやEMR、Lambdaなどの計算リソースとしても使われている。|GCE|
|IAM|AWSの認証・認可システム|Identity and Access Management。AWSをセキュアに利用するために必要なもろもろの認証・管理機能を提供する。|Cloud IAM|
|KMS|暗号化及び鍵管理サービス|Key Management Service。Customer Master KeyによるEnvelop Encryptionで管理性とパフォーマンスを向上させた暗号化が可能。|Cloud KMS|
|Cognito|アプリケーション用の認証・同期サービス|モバイルアプリやウェブアプリを利用したユーザー認証やアクセス認可、データの同期に利用する。モバイルで認証と言ったらとりあえずCognito|-|
|VPC|プライベートネットワークサービス|AWSの中にプライベートなネットワークを構築することができる。必要に応じてネットワークを論理的に分離・結合できる。Direct Connectの利用でオンプレミスネットワークとの接続もできる。|VPC|
|CloudWatch|AWSのシステム監視サービス|死活・性能・キャパシティ・コストの監視や各種サービスからのログの取得、リソースに対するイベントのトリガーができる。|Stackdriver|

以上です。のべで26個のサービスを紹介しました。バカみたいに多いですね。大変だぞコノヤロー笑。

昨今、データはビジネス上重要な競争資源であるだけでなく、プライバシーやコンプライアンスの上でも管理をすることが必要です。そのため、アクセス権や認証・暗号化の管理をする上でIAM、KMS、Cognitoなどのサービスは把握しておかなければなりません。また、EC2はEMRやRDSのインフラとして使われているので、その特徴やインスタンスタイプなどを理解しておくことは重要です。

さて、上記のサービスのうち、ストレージ・データベース・分析・データ処理の役割を担うものについて、用途に合わせて選択フローチャートをつくると以下のようになります。アイコンは[こちら](https://aws.amazon.com/jp/architecture/icons/)を使用しました。

<img src="https://qiita-image-store.s3.amazonaws.com/0/267335/5154b565-0420-f6fb-2ba8-73a9ab08d193.png">

ストレージ系と処理系を網羅しているため、とてもビジーな図になりましたが、大まかにサービスを検討する上では十分かと思います。もっとも、KinesisとSQS、RedshiftとEMRなどは特性の違いはあるものの、サービス要件次第では厳密に使い分けるのが難しいところでもあります。適宜、コストも含め公式ドキュメントを参考にして適切なサービスを選択するようにしてください。

さて、今回はビッグデータに関するサービスを大まかにまとめました。次回はビッグデータを扱う上でのセキュリティについて紹介したいと思います。