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 の対応状況

仮想マシンを実行するサービス。インスタンス種別は以下から選べる。 マシンイメージは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のファイルとしてアーカイブする。

データベース

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

RDB

以下のインスタンスに対応している

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

ElasticCache

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

DynameDB

データモデル(公式)が参考になる。 Cassandra に似ている。

Primaryキーが似てると感じたのは、Cassandraの分散キーがHashタイプに、CassandraのクラスタリングキーがRangeタイプに対応する様に感じたため。 DynameDBLocalSecondaryIndexを定義できるところはCassandraSecondaryIndexが対応する。 CassandraってDynamoの論文インスパイアだけどDynamoDynamoDBは違うものだったはず。 カラムに使えるデータ型にはリスト・セット・マップなども使える。

Redshift

SQLデータウェアハウスとして機能する。

検索インデックス

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

  • ホスティング
    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: 専用線