鱒身(Masu_mi)のブログ

知った事をメモする場所。

AWS プロダクトを眺めた

AWS を調べた。彼らがどうゆうアーキテクチャ設計・開発プロセスを提案しているか想像しておきたかった。 今回は試しに提供サービスを目的別に並べてみた。ただし上手く分類できなかったり調査が足りない事もあり先に全体の感想とメモを書く。試みた分類は最後に残しておく。

全体を通じての感想

  • AWS サービスの分類は従量課金との対応(インスタンス or サービスなど)・スケーリングの責任者(ユーザー・Amazon)を軸に分類すると勝手が良さそう
    • インスタンス(従量課金: 予約性能 + 実利用分)によるサービス利用にはregion, AZ, VPC, SecurityGroup の理解が必要
    • サービス(従量課金: 実利用分) によるサービス利用には region で十分
  • 課金相場は覚えておかないとオンプレミス開発でもクラウド比でスケールメリットを議論できない

  • 各サービスの詳細を調べるの飽きた(サービス充実してますね)
    • 必要に応じて公式資料を読めば良い
    • イメージ掴むのはクラスメソッドさんの資料が充実している
  • 通信・ストレージ・DBは定番の利用パターンを網羅しているのでソフトウェアアーキテクチャを設計するときに苦労はなさそう

各種の分散処理システムとそのリソースに対応してる

各種分散処理基盤を使いたくなったらだいたいできる。ジョブ管理を分散処理って呼んで良いのか謎。

タスク分散処理・ジョブ管理
SWF
分散処理基盤(バッチ処理)
EMR(Hadoop, Spark, Presto)
リアルタイム処理
Kinesis Analytics, EMR(Storm, Flink)

通信の抽象化3種とBroadcast が一通り提供されてる

タネンバウムの通信の章で扱われている通信の抽象化方法(RPC, Messaging, Streaming)と特別な配慮が必要とされたマルチキャストの全てが一応サービスとして網羅されていた。

RPCとしてはAPIGatewayをファサード層に使う事で対応する。MessagingはSQSが実現している。 StreamingはKinesisとAppStream の2つが対応している。そしてマルチキャストはSNSで実現できる。

資料

昨今の事例や状況は下の資料に目を通せば大丈夫そう

他に参考になった資料

とりあえず下の4つに目を通して公式類などに手をつければ全体を押さえるのは完了すると思った。

サービスの整理

サービスのアイコンはここからダウンロードし設計や外部向け資料などに自由に使える。 設計資料を簡単に作れるように配慮していて優しいと思った。また視認性も高く拡散効果もある。

分類するに当たり今回は目的を中心に分類してみた。まず大枠でサービスを構成するプロダクト・サービスを支えるプロダクトで分類する。

システム構成に関するサービスは、プロセス・ネットワーク・ストレージ・データベース・検索インデックス・コミュニケーション・アプリケーションに分けた。

プロセス

計算リソースを提供・管理・実行するサービス

仮想ホスト
EC2
コンテナ管理
EC2 Container Service
クラスタリング
EMR
タスク分散・ジョブ管理
SWF
イベント駆動処理
Lambda
ストリーム処理
Kinesis(analytics)

EC2 の対応状況

仮想マシンを実行するサービス。インスタンス種別は以下から選べる。 マシンイメージはAMIで提供され登録などもできる。 競売式で安くインスタンスを確保できるスポットインスタンスという機能が提供されている。 また実機とのマッピングをユーザーが定義することもできる。これにより実行ホストに制約のあるライセンスで動くアプリケーションをクラウド環境で稼働させられる。 インスタンスの種類は以下が存在する。またX1 という大容量メモリを搭載したモデルが提供される予定となっている。 FPGAなど非CPU搭載インスタンスは提供されていないが需要についてはわからない。

Tx
汎用のバーストパフォーマンス
Mx
汎用の定常パフォーマンス
Cx
コンピューティング特化
Rx
メモリ容量のコストパフォーマンス特化
Gx
GPUコンピューティング
Ix
高ランダムIO, 高IOPSに特化
D2
高ディスクスループット

EMR の対応状況

AWSで分散処理を行うサービス。クラスタリングにはHadoopファミリを使用する。 BootStrap Action を使い必要なエンジンのインストールなどを行えるためHadoop上で動くものは一通り使える。そのためMR2, Spark, Presto, Flink, Storm, などEMR上で実行できる。 それによりストリーム処理・オンメモリデータ分散処理・バッチ処理と様々な分散処理にEMRで対応できる。

ref. Amazon EMR Practice

ネットワーク

アプリケーション層以下の設定とDNSに関するサービス

大雑把に下に分けたけど DirectConnect も含めたくなるし、ENIはエンティティとしてあるけどVPCの様なサービス単位では提供されてなくて迷う。 VPC にはルーターやNATも含まれており分類に困った。

ドメインネームサービス
Route53
LAN
VPC
VIP
ElasticLoadbalancing

Route53

GSLB, ラウンドロビンなどを柔軟にWEBブラウザ・API経由で設定が出来る。 トラフィックフローをローンチした

ストレージ

データを保持するサービス

オブジェクト
S3
ファイル
ElasticFileSystem
ブロック
EBS
アーカイブ用途
Glacier

Elasticfilesystem

0.30 USD/GB-月 で使えるNFSサービス。

EBS

汎用(SSD), プロビジョンド IOPS(SSD), マグネティック の3種類が提供される。 EC2の様にインスタンスを予約し、予約内容に対して課金が掛かるとてもプリミティブなサービス。

Glacier

データモデルはイミュータブルなオブジェクトストレージで、ボールトと呼ばれるコンテナに最大40TBのファイルとしてアーカイブする。

データベース

データを効率的に操作するサービス

RDBMS
RDB
KVS on mem
ElasticCache
KVS on SSD
DynamoDB
列志向DBMS
Redshift

RDB

以下のインスタンスに対応している Aurora, MySQL, MariaDB, PostgreSQL, Oracle, SQLServer

Oracle, SQLServer はライセンス込み・BYOL(ライセンスの自前準備)の2種類が提供されている。 ストレージにはEBS を利用する。

ElasticCache

2つのキャッシュエンジン(Memcached, Redis )を提供している マネージドクラスタで運用コストが少なく、API経由でノード追加を行うなどスケーリングが楽らしい。 両エンジン共クライアントサイド分散なので簡単にノード追加を行った後にクライアント側の設定変更を通知する仕組みが必要だと思った。

DynameDB

データモデル(公式) が参考になる。Cassandra に似ている。 Primaryキーが似てると感じたのは、Cassandraの分散キーがHashタイプに、CassandraのクラスタリングキーがRangeタイプに対応する様に感じたため。 またDynameDB ではLocalSecondaryIndexを定義できるがCassandra のSecondaryIndex が対応する。Cassandra ってDynamo の論文インスパイアだけどDynamoとDynamoDB とは違うものだったはず。 カラムに使えるデータ型にはリスト・セット・マップなども使える。

検索インデックス

属性ベースの名前付きサービス

ホスティング
ElasticSearchService
マネージド
CloudSearch

CloudSearch/ElasticSearchService違い

Cloudsearch ElasticSearchService
フルマネージド セルフマネージ
シャードの自動リサイズ シャードサイズは変更不可
インデクサーは4種類から選ぶ インデクサーはLucene

コミュニケーション

アプリケーション間通信を抽象化するサービス

データ転送
Dataipline
非同期メッセージング
MQ: SQS PubSub(BloadCast): SNS
同期WebAPI
APIGateway
ストリーミング
Input: Kinesis(streaming,firehose) Output: AppStream

他アプリケーション

うまく分類できなかったサービス群

コンテンツ配信
CloudFront
Email配信
SES
機械学習
MachineLearning
画像処理
ElasticTransencoder
鍵管理
KeyManagedService, Cloud HSM
課金処理
Amazon FPS
セキュリティフィルタ
AWS WAF
IoT
IoT

CloudFront

ディストリビューションという単位でコンテンツ配信をまとめる事ができる。 ディストリビューションはウェブ・RTMPの2種類が存在する。そのためHTTP(HLS含む), HTTPS, RTMPといったプロトコルが利用可能。 ドメイン・パスのマッチングにより複数オリジンやキャッシングルールを設定できる。アクセスコントロールを設定したりWAF によりL7レイヤファイアーウォールを実現したりできる。 またインターネットとの通信をEC2で直接行うよりも安くなる。

IoT

  • 分散パーベイシブシステムのin-network data processingみたいな事ができそう
  • サポートプロトコルは2つ(MQTT, HTTP)
  • SQLベースで端末情報を分散処理・集約
周辺ツール

システム支援に関するサービスでは、仮想オフィス・プロジェクト管理・監視・分析・CI/CD・マイグレーションに分けた。

仮想オフィス

オフィススイーツのSaaS 典型的なオフィスアプリケーション3(WorkSpace, WorkMail, WorkDocs)つが提供されてる。

管理

システム構成リソースのアカウント管理

ここの分類はだいぶ雑にしてしまった。Trustedadvisor とか完全に単なるサポートサービスだ。

IAM awsサービス・リソースへのロール管理サービス
DirectoryService 構築したシステムのリソースへのロール管理サービス
TrustedAdvisor コスト・セキュリティに関するサポート

BI基盤

QuickSight
オートディスカバリ・自動可視化・共同作業もサポートされている

ref. http://www.infoq.com/jp/news/2015/10/amazon-bi-aws-quicksight

監視

システムの利用状態などの監視

  • サービス: MobileAnalytics
  • システム: CloudWatch
  • 構成: AWS Config
  • 予算: CloudTrail, AWS Billing and Cost Management, CostExplorer

CloudWatch はAutoScalingをkickしたり監視 + 運用の両方で使う。

CI/CD

継続的な開発やリソースを行うためのツール類

  • モバイル: MobileHub, DeviceFarm
  • テスト: Inspector(セキュリティ)
  • リポジトリ: CodeCommit, EC2 Container Registry
  • デプロイ: CodeDeploy, AWS OpsWorks, Elastic Beanstalk
  • CD: CodePipeline
  • オーケストレーション: CloudFormation
  • オートスケール: AutoScaling, Elastic Beanstalk

Elastic Beanstalk はオレオレPaaSを作るサービス。

マイグレーション・インテグレーション

他DCとの連携や移行作業などをサポートする

  • Import/Export Snowball(物理転送)

  • Migration(DB間マイグレーション&AWS移行をサポート)

  • StorageGateway: オンプレストレージをシームレスにS3/Gracierにつなげる
    • モデルは 3種類, キャッシュ/バックアップ/VTL(iSCSIテープ)
    • ユースケース: バックアップ, ディザスタリカバリ
  • DirectConnect: 専用線