AWSについてググったメモ


よくわかっていないサービスも多いのでAWSコンソールのトップに出てくるサービスについて一通りどんなものがあるか調べてみました。少しずつ内容は増やしていこうと思います。

# コンピューティング
## EC2

仮想マシンのインスタンスを時間単位の料金で利用できるサービス。CPU数やメモリのサイズなどパフォーマンスに応じて様々な価格帯のマシンがある。

各インスタンスにはEBS（Elastic Block Storage）というローカルディスクをアタッチできる。

各インスタンスはAMIという仮想マシンのイメージから作成する。AMIはAmazonが提供しているものや、サードパーティが提供しているもの、あるいは自分で作成したものを利用することができる。

特にサードパーティが提供しているものの中には有償ソフトウェアがインストールされているものがあり、通常だとパッケージを購入する必要がある製品が時間料金で使えるようになったり。

各EC2のネットワークは、VPC（Virtual Private Cloud）で環境をわけ、セキュリティグループで各マシンの通信範囲を制限できる。

ELB(Elastic Load Balancer)はEC2用のロードバランサーでAuto Scalingに対応。


## EC2 Container Service

Dockerのコンテナを実行できる。環境変数や実行時のコマンドなど細かく指定可能。

コンテナの投入時にAmazon ECSクラスタを作成します。ELBやVPCなどが設定されたクラスタで、クラスタ内のEC2は1台でも複数台でも必要な量のインスタンスが設定できます。

ちょっと使ってみたのですが、TaskとServiceの関係がいまいちわからなかった。また今度調べます。


## Elastic Beanstalk

友人が激推ししてたAWS上のPaaS。

RubyからJavaなど各言語に対応し、Docker(マルチコンテナも含め)にも対応したので、基本的にはどのようなサービスも載せられそうです。

WebだけではなくWorker TierもありSQSを使って非同期処理を行うWorkerを立てることもできます。

安心のAWSのインフラやエコシステム、また他のPaaSと違ってイメージも自由にいじれるところが強みでしょうか。

## Lambda

イベントに対してコードを実行できるサービス。

- S3にアップされたデータを自動処理する
- リアルタイムでのソーシャルメディア分析
- DBデータをRedShiftに抽出

などをサーバ無しで実現。API作ったりIoTと相性が良さそうな感じ。

言語は Node, Java, Python。 


# ストレージ＆コンテンツ配信

## S3

安価・安心のオブジェクトストレージ。（理論上は）99.999999999%の耐久性ということでデータの損失は無いものとして扱って良い。

2012年くらいに聞いた話ではあるのですが、喪失したデータはそれまでで0とのことでした。

静的なWebサイトのホスティングもできる。Wordpressのプラグインで記事を自動でアップロードしてS3でホスティングすることで格安運用みたいなことも。

## CloudFront

CDN（Contents Delivery Network）。特にS3の配信は簡単な設定で実現でき、他にも認証入れたり動画のRTMP配信とかもできる。


## Elastic File System (プレビュー)

EC2用のNFSv4。久しくNFS使った運用はしていないのでどういう使い方で利点があるのかちょっとイメージできないがNFSを使いたい場面があれば便利な気がする。

## Glacier

アーカイブ用ストレージ。グレイシャーと読む。

ほぼアクセスが必要無いデータの保管が安くなる。ただし読み出しコストが高いので読み込みが頻繁に起こるような場合はS3の方が安い。

S3の料金が気になり始めた時に検討しだす感じな気がする。その規模でのデータ保管をやるサービスって動画サービスくらいな気がするけどどうなんだろう。

## Import/Export Snowball

ペタバイト規模のデータ転送ソリューション。オンプレミスのデータをクラウドに移行するためのサービス。依頼するとアプライアンスが送られてきて、データを入れたらそれを送り返すとデータがアップされるとのこと。

暗号化とかちゃんとできてるので大企業さんも使って安心、みたいな感じと予想。


## Storage Gateway

アプライアンスをオンプレに配置することでS3やGlacierを仮想的にオンプレにあるかのように扱えるサービス。

テープバックアップとかめんどくさいからS3にしたらええんやで、って書いてあった。データセンター向けかな。

# データベース

## RDS

Relational Databaseを提供するサービス。MySQL, Oracle, PostgrSQL, SQL Server, MariaDB, Aurolaが使える。

AuroraはAmazonが作ったデータベースエンジンでMySQL5.6互換でストレージ自動拡張、可用性向上とか。Amazonと一蓮托生であれば良い選択肢。
参考: http://it.impressbm.co.jp/articles/-/12677

## DynamoDB

Amazonが提供するNoSQLデータベース。

高速で可用性が高いということで、RDBじゃないDBがありならこちらも検討対象。

## ElastiCache

https://aws.amazon.com/jp/elasticache/

マネージド型のオンメモリストレージで、具体的には memcachedとredisを提供。

## Redshift

大量ログの分析とかに使える模様。

以前調べた時はBigQueryのが安いから使うならBigQueryかなぁという結論になった気がする。Hadoopを使っていて遅さに悶えてる人はBigQueryやRedshiftなどの列指向ストレージの速さに感動するのは間違いない。


## DMS(Database Migration Service)

簡単、格安でデータベース移行ができるサービス。

# ネットワーキング

## VPC(Virtual Plrivate Cloud)

ネットワークを仮想的に分離することができる。

オンプレから接続するためにネットワークを分けたい場合や、ステージングと本番環境を分ける場合などに利用。

## Direct Connect

http://dev.classmethod.jp/cloud/aws/direct-connect-guide/

専用線接続。オフィスなどとAWSを専用線で接続するサービスで基本的にはAWSパートナーの企業と契約する形になるらしい。

## Route 53

DNSサービス。何が良いかはあんまりわかってないのですが、AWSでサービスを提供しているならDNSもそれで管理したほうがシンプルだよね、ということで利用中。ドメインをとったりもできる。


# 開発者用ツール

## CodeCommit

プライベートgitリポジトリ。特徴としてはGithHub Enterpriseよりは安いとか？

http://corporate.inter-edu.com/developper/1388

## CodeDeploy

GitHubとかで管理しているコードをEC2にデプロイできる。特にオートスケーリングするケースでのデプロイが親和性高くて便利そう。

AppSpecファイルでシェルスクリプトなどを実行してdeployする模様。

## CodePipeline

CIツールみたいな感じぽい。

> Web系のサービス等は開発および運用を並行して進める必要があるため、開発環境・ステージング環境・プロダクション環境のように異なる目的の環境を管理することでプロダクション環境の安定運用を目指すことが多いです。
> しかしながら、これら複数の環境に対してDeployを実施する場合、CodeDeployのようなサービスにてDeployを自動化したとしても、それだけでは複数の環境へのDeploy自体は手作業が発生してしまいます。
そこで、CodePipelineを用いることで、従来手順書を作成して実施していた作業を自動的に実行できるようになります。

http://qiita.com/rev4t/items/52f07edb4686e403d1e6

JenkinsのPipeline機能みたいなものを提供しているので継続的インテグレーションにおけるビルドパイプラインの実現ができたりとかそんな感じだと思います。

まだTokyo Regionには来ていない。

# 管理ツール

## CloudWatch

サービスのモニタリング。閾値を超えたら通知を送ったりができる。


## CloudFormation

AWSのリソース構成を記述して作成できる。Infrastracture as Code の流れをくむと大事な構成要素。
全てJSONで書くので大規模になると（コメントも書けないので）管理が難しくなる。Terraformという外部ツールではyamlで書けたりするのでこちらも検討対象。

## CloudTrail

AWSのAPI呼び出しをロギングしてセキュリティの分析などができる。監査などに使うだろうと予想。

## Config

AWSのリソースの設定履歴や設定変更通知がある。セキュリティとかコンプライアンスとかそんな感じ。

## OpsWorks

Chefのレシピを使ってEC2をデプロイできるぽい。

AutoScalingは対応していないものの、Time-based, Load-basedでインスタンスを起動できる。

## Service Catalog

システム構成情報をカタログ化し、利用ユーザがカタログから選択してシステムを作れるサービス。例えば企業内において、情報システム部がAWS Service Catalogを使ってシステム構成(本番用構成、開発用構成など)をメニューとして作成しておき、各部署のIT担当がそのカタログからシステム構成を選び、システム構築を行える。CloudFormationテンプレートを利用する。

http://dev.classmethod.jp/cloud/aws-service-catalog/

## Trusted Advisor

https://aws.amazon.com/jp/premiumsupport/trustedadvisor/

"このサービスでは、お客様の AWS 環境を検査し、コスト削減、システムパフォーマンス向上、セキュリティギャップの封鎖につながる推奨事項をお知らせします"。

サポートプランを契約していないと簡易な確認しかしてくれない模様。


# セキュリティ＆アイデンティティ

## Identity & Access Management

権限管理を一元的にできるサービス。

## Directory Service

Active Directory が導入できる。

## Inspector(プレビュー)

自動セキュリティ評価サービス。今のところ 米国西部 (オレゴン) リージョンのみ。

http://aws.typepad.com/aws_japan/2015/10/amazon-inspector-automated-security-assessment-service.html

## WAF

AWSのWeb Application Firewall。
レイヤー7でのセキュリティを担保したい場合に使って良いかも？

## Certificate Manager

SSL証明書の発行。AWSで利用するのであれば無料で利用可能。
CloudFrontとELBに簡単に証明書をアタッチできる最強なやつ。

# 分析

## EMR

分析や科学シミュレーションなど大規模計算のためのHadoopクラスターサービス。

## Data Pipeline

保存されたデータを、変換や処理を行って別の場所に保存できる。データのCronによるバッチ処理をサーバ無しでできるイメージ。

## Elasticsearch Service

その名前の通り ElasticSearch を提供するサービス。たまにElasticという名前からElasticsearch自体がAmazonの開発したものだと思っている人もいるがそういうわけではない。

> Elasticsearch はログ分析、リアルタイムのアプリケーションモニタリング、クリックストリーム分析などのユースケース向けの、人気の高いオープンソースの検索および分析エンジンです

自動でKibanaがインストールされているのでログを送ってグラフ化みたいなのが非常に簡単にできる。

## Kinesis

継続的に大量に発生するデータ(ストリーミングデータ)の読み込みや分析ができる。大規模にキューの処理ができるとかそんなイメージらしい

http://dev.classmethod.jp/cloud/aws/what-is-kinesis/

## Machine Learning

はやりの機械学習ができるらしい。構成図見るとなんとなくイメージ出来た。

http://aws.amazon.com/jp/solutions/case-studies/buildfax-and-amazon-machine-learning/

# IoT

## AWS IoT

IoT向けの色々。今後使ってみたい。

https://aws.amazon.com/jp/iot/how-it-works/

## GameLift

"セッションベースのマルチプレーヤーゲームを、前払いをすることなく、数分でクラウド内でデプロイおよびスケールできます。"ということでゲーム用の色々を作れるらしい。AmazonのゲームエンジンAmazon Lumberyardを使ってる人向けのサービス。だれか使ってるんだろうか。。


## Mobile Hub

> Mobile Hubは、環境構築 + テンプレートソースコード自動生成するものらしい。AWSのリソースは複数のサービスを連携して使用する必要があるため(例えば、LambdaとIAMを設定等)、それをサクッとやってくれると。

http://umenon.com/2016/01/30/awsmobilehub/


## Cognito

デバイスやプラットフォームをまたいで一貫性のあるユーザ認証を提供するとのこと。MobileHubの一要素になってる。

## Device Farm

実際のデバイスを使ってアプリをテストできる。"デバイス分"の料金単位で、250USDで月額固定のプランも有り。今のところ 米国西部 (オレゴン) リージョンのみ。

## Mobile Analytics

AWS Mobile SDKを導入して分析ができる。Google Analyticsで良いかなという雰囲気。

## SNS

GCM/APNsのプッシュ通知サービス。

# アプリケーションサービス

## API Gateway

LambdaやEC2を使ってAPIを提供するフロントエンド。

## AppStream

サーバ上でアプリを動かし、その画面の送る仕組みでリッチなアプリケーションをデバイスにかかわらず実現するサービス。

## CloudSearch

ElasticSearchのAmazon版みたいなイメージでスケーリングなどに優位性があり。

## SES

Eメール送信サービス。SNSの通知発行やLambdaを利用したカスタムコードの送信にも対応。
東京リージョンにはない。とはいえメールなら遅延とか気にならないから問題ないかも。

ドメインの有効性の認証とかが必要。

## SQS

キューイングサービス。色々できる。

## SWF(Amazon Simple Workflow)

ワークフローを定義できる。異常終了しうる動画エンコーディングとか人間の作業を伴う製品カタログとかがユースケースとして。


# エンタープライズアプリケーション

## WorkSpaces

仮想デスクトップ。

## WorkDocs

セキュアなエンタープライズストレージ。柔軟なセキュリティ設定とアクセス制御ができる。社内のActive Directoryとの統合が可能。

## WorkMail

企業向けEメール及びカレンダーのマネージメント型サービス。Exchangeの管理サーバみたいなものと予想。


# おわりに

私は個人あるいはスタートアップの中で使ってきただけだったのですが、こうしてみるとスタートアップが使うようなサービスだけでなく、かなりの部分で大規模なデータセンタ向け、エンタープライズ向けのサービスがあることがわかりました。SIerにいる友人がAWSに打ち込んでいるのも納得です。

このレベルでやられると日本のIaaS事業者が対抗しようとすると難しいですね。コスト面の勝負するしかなくてそこではあまり稼げないでしょうし。

ということで、AWSも最低費用が高めだったりネットワークの送受信のコストが高かったりするので常に最適というわけではないですが、とりあえずAWSを選択するのは間違っていないのではないでしょうか。