AWSパターン別構築・運用ガイド（Chapter1 AWSの基本）

「Amazon Web Services パターン別構築・運用ガイド」
Chapter1 AWSの基本のまとめ

#1-1.サービス全体像

#####Amazon Elastic Compute Cloud(EC2)
    仮装サーバ。起動された仮装サーバはインスタンスと呼ばれる。
#####AWS Elastic Load Balancing(ELB)
    EC2インスタンスの前に置かれる負荷分散装置。 
#####Auto Scaling
    CPUやメモリ利用率等決められた条件に応じてEC2インスタンスを自動的に増減するサービス。
#####Amazon Simple Storage Service(S3)
    オンラインストレージサービス。頭にオンラインがつく理由はS3の操作は全てHTTP/HTTPSによるAPIへのアクセスを通じて行われるため。
#####Amazon Glacier
    S#3同等の信頼性設計かつ1/3のコストで利用可能。ユースケースとしてはテープデバイスの代替。
#####Amazon Elastic Block Store(EBS)
    EC2インスタンスから利用するストレージ。イメージ的には外付けハードディスクだが、EC2との接続形態はネットワーク経由で、かつ内部的にはRAID1と似たようなイメージでディスクが冗長化されている。
    スナップショット形式でS3にバックアップすることにより保管や複製を容易に行うことができる
#####Amazon Relational Database Service(RDS)
    利用できるデータベースエンジンは、MySQL,Oracle,SQLServer,PostgreSQLの4種類。またAmazon RDS for AuroraというAmazonが独自で開発したMySQL互換のデータベースエンジンもある。
#####Amazon ElastiCache
    インメモリキャッシュシステムのPaaS。サポートエンジンはMemcachedとRedis。データーベースキャッシュ機能の高速化やアプリケーションのセッションストアとして耐久性の向上が実現できる。
#####Amazon Virtual Private Cloud(VPC)
    AWSのネットワーク内に論理的に分離したネットワークを作成するサービス。任意のプライベートアドレスでネットワーク作成やサブネット分割できるため、オンプレミス同等のDMZセグメントやTrustedセグメントといった構成を実現することができる。インターネットゲートウェイの設定をすることでインターネットとの通信も可能。VPNゲートウェイも作成可能で既存のデータセンターや社内ネットワークと専用線やVPN接続も可能。
#####AWS Direct Connect
    AWSのVPCの接続する専用線接続サービスです。自社センターから専用線でAWSに直結することが可能。
#####Amazon CloudFront
    コンテンツ配信ネットワークサービス。コンテンツをエッジロケーションと呼ばれる全世界に散らばる拠点から配信する。
#####Amazon Route 53
    ドメインネームサービス。100%のSLAを保証。
#####Amazon Simple Queue Service(SQS)
    メッセージキューサービス。
#####Amazon Simple Notification Service(SNS)
    プッシュ型のメッセージサービス。Eメールやモバイルプッシュ通信、SQS、HTTP/HTTPS等、さまざまなプロトコルで通知が可能。
#####Amazon Simple Email Service(SES)
    メール配信サービス。Sender Policy Framework(SPF)やDomainKeys Identified Mail(DKIM)といった認証メカニズムやメールの送信結果の統計情報といった機能を有している。
#####AWS Identify and Access Manager(IAM)
    アカウント管理サービス。ユーザやグループに対する、AWSのリソースに対するアクセスコントロールを行う。
#####AWS CloudTrail
    AWS APIの呼び出しを記録してロギングするサービス。
#####Amazon CloudWatch
    AWS上のアプリケーションのモニタリングサービス。閾値監視などが可能。
#####AWS Elastic Beanstalk
    webアプリケーションサーバのPaaS。サーバを構築することなく、Java, .Net, PHP, Node.js, Python, Ruby, Dockerのプラットフォームとして利用可能。Auto Scalingの設定しておくことでアプリケーションの縮退を自動的に行う。
#####AWS CloudFormation
    AWSの環境構築自動化ツール。JSON形式のテンプレートを作成することで何度でも環境を再現可能。
#####AWSサポート
    電話やメール、チャットで技術支援を行う。AWSサポートは日本語利用可能。
#####AWS Trusted Advisor
    AWSの適切な利用をサジェストするツール。最適化のアドバイス対象としては、セキュリティ、コスト削減可溶性向上、パフォーマンス問題等、多岐にわたる。

#1-2.AWSのネットワークサービス
大きく分けるとAWSネットワークとVPCネットワークの２つに大別できる。
#####リージョン
    AWSがサービス提供している拠点（国、地域）のこと
#####アベイラビリティーゾーン（AZ）
    データセンターとほぼ同義。
#####Amazon Virtual Private Cloud（VPC）
    オンプレミス同等のプライベートネットワーク構築サービス
#####Amazon Route 53
    DNSサービス、フォールトトレラントアーキテクチャー（DNSフェイルオーバー）

#1-3.ハードウェアリソースとしてのAWS
##Amazon Elastic Compute Cloud（EC2）
- os・・・RHEL, SUSE, Ubuntu, Fedora, Debian, CentOS, Gentoo Linux, Oracle Linux, FreeBSD, Windows Server
- インスタンスタイプ・・・T2,M3（汎用的）  C3,C4（CPU性能向上） R3（メモリ容量増加）など
- インスタンスストレージ・・・EC2を停止すると削除される。
- EBS-Backedインスタンス(推奨)とInstance Store-Backedインスタンス
  
##Amazon Elastic Block Store(EBS) ・・・外付けディスク相当。複数のボリュームタイプが選択可能。
- 汎用（SSD）・・・特別な要件がない限りはこれを選択。
- プロビジョンドIOPS（SSD）・・・非常に頻繁なI/Oがコンスタントに発生する場合。
- マグネティック・・・SSDに対応してからは非推奨。

##EC2におけるバックアップ
- Amazon Machine Image（AMI）・・・インスタンスの起動に必要な情報を保存。AMI単独作成はできず後述のEBSスナップショットに付加する起動情報という形で作成される。
- EBSスナップショット・・・EBSをバックアップしS3に保存する機能。増分バックアップ方式をとる。
- AMI, EBSスナップショットのリージョン間コピー・・・異なるリージョンにコピーを作成することが可能
- AMI, EBSスナップショットのAWSアカウント間共有・・・同じリージョン内で他のアカウントと共有し利用可能

##Amazon Simple Storage Service（S3）・・・REST, SOAPといったシンプルなWebサービスインタフェースで利用する。保存データは無制限。

- S3のバケットとオブジェクトの概念・・・バケットというコンテナを作成し、そこへオブジェクトとしてデータを保存していく
- S3のストレージオプション・・・標準ストレージと冗長化ストレージ（RRS）がある。シビアなコスト削減をする必要がある以外は標準ストレージを使う。
- S3の暗号化・・・データ保存時にAWS側でサーバサイド暗号化（SSE）を提供している。オブジェクト作成または属性を変更する際に暗号化オプションを指定することで暗号化し、オブジェクト参照時に複合を自動で行う。
- S3のアクセス管理・・・バケットポリシー、ACL、IAMでの制御
- S3のイベント通知・・・SNSのトピックへのメッセージ通知、SQSのキューへのメッセージ作成、LambdaのLambda Functionへの通知
- S3のWebホスティング機能・・・
 - 静的コンテンツにかぎってWebサイトとしてホスティングする環境を簡単な設定で作成可能。
 - 静的コンテンツのリリースはS3のバケットへ保存することで行うことができる
 - Ruby,Python,PHP,Perl等サーバサイドの動的なコンテンツに関してはS3のWebホスティングとして使用できない。動的コンテンツのWebホスティングを行う場合Elastic Beanstalkを利用する、あるいはEC2で独自にWebサーバを作成する等の方法がある
- EBSスナップショットとS3オブジェクトの違い・・・EBSスナップショットはS3領域に保存するがREST, SOAP通信でローカル環境に保存する操作はできない。
- S3のバージョン管理・・・簡単なバージョン管理機能あり。
- S3のライフサイクル管理・・・オブジェクト作成〜上書き・削除までの期間を管理する機能がある。

##Amazon Glacier
- アーカイブストレージサービス。低価格ではあるが取り出しに時間がかかる。磁気テープ相当の使い方が適している。

#1-4.アプリケーション基盤としてのAWS

##Amazon Relational Database Service（RDS）・・・EC2に独自に構築するか、RDSを使うか
- インスタンスタイプ
- RDSのインスタンスタイプ
- RDSのバックアップ
- RDSのアクセスポート
- セキュリティグループ
- VPCでの稼働可能
- マルチAZ
- フェイルオーバー時の注意点
- 手動フェイルオーバー
- IOPS・ストレージタイプ
- RDSのログ
- パラメータグループ
- オプショングループ
- メンテナンス

## AWS Elastic Beanstalk・・・アプリケーションをデプロイするだけでサービス開始できるサービス。Heroku, Engine Yardと同等。

- 対応言語・・・Docker, Tomcat, .NET(IIS), GlassFish(Docker), Node.js, PHP, Python, Ruby, Go(Docker)
- デプロイ方法・・・javaであればwar、その他はzipをアップロード
- ebコマンド・・・awsebcliをインストールすることでebコマンドが利用可能。
- 統合開発環境（IDE）・・・EclipseとVisualStudioからデプロイ可能
- Docker・・・Elastic BeanstalkはDockerコンテナをデプロイ可能。
- 環境枠（Environment Tiers）・・・作成したアプリケーションがどのような役割を持っているかという概念。２種類に分けられる。
 - Web Server・・・Webアプリケーションを動作させる環境
 - Worker・・・時間のかかる処理をバックグラウンドで処理するための環境枠。
- 環境タイプ・・・オートスケーリングする環境かしない環境か選択することができる。
 - Load-balancing, Autoscaling Environment・・・オートスケーリングする環境。ELBやAutoScalingの設定が自動で作成される。
 - Single-instance Environment・・・オートスケーリングしない環境。

##Amazon ElasticCache・・・インメモリキャッシュサーバを内包している。インメモリ処理の実現に強力な手段となる。

- Elastic Cacheとは？・・・データベースへのクエリ結果、セッション情報をキャッシュしたりすることが簡単に実現できる。
- サポートキャッシュエンジン・・・Memcached, Redis
- キャッシュノードタイプ・・・EC2やRDSのインスタンスタイプと同じ。m3タイプ（標準）、r3タイプ（メモリ最適化）、t2タイプ（低価格）。最新のタイプはCurrent Generationと呼ばれる。
- ElasticCacheクラスタ・ノードのIPアドレスとDNS・・・固有のDNSが割り当てられる。アクセスはこのDNSを利用する。
- ElasticCacheのアクセスポート・・・1150より大きい番号であれば好きな番号でOK。デフォルトは、Memcachedが11211, Redisが6379
- セキュリティグループ・・・EC2やRDSと同様にセキュリティグループを割り当てる必要がある。EC2やRDSインスタンスからのアクセス許可を忘れずに付与すること。
- RedisのマルチAZ機能・・・ElasticCacheのノードは複数のAZに配置できる。Redisを使えばさらにマルチAZ機能を使用できる。
- オートディスカバリ・・・クラスタにノードを追加、削除した際サーバの再起動なしで利用できる。
- ElasticCache Cluster Client・・・オートディスカバリ機能を使うためにMemcachedクライアントであるElasticCache Cluster Clientを利用する必要がある。（2015年2月 Java, .Net, PHP用が提供）
- パラメータグループ・・・用途機能はRDSと同じ
- メンテナンス・・・メンテナンス時間の調整はRDS同様にメンテナンスウィンドウで行う。曜日、開始時間が設定できる。

#1-5.サービスとしてのAWS
## Amazon Simple Email Service（SES）

- SESの制約
 - Bounce Mail（配信不能メール）の比率を5%以下に保ち続ける
 - 苦情を防ぐ（0.1%以下）
 - 悪意のあるコンテンツを送らない

##Amazon Simple Queue Service（SQS）・・・メッセージキューサービ

- 原則
 - 最低一度のメッセージの到達を保証。反面、2度以上同じメッセージを受信する可能性がある。
 - メッセージの順序を保証しない

##SNSとCloudWatch・・・プッシュ型の通知サービス

- 利用可能プロトコル・・・SMS, email, http/https, SQS, iOS/Android等モバイルへのプッシュ通知
- SNSの利用・・・
 - トピックという単位で管理。
 - 通知される人（Subscriber）が利用するトピック及び受け取るプロトコルを登録する（購読）。
 - 通知する人（Publisher）はトピックに対してメッセージを配信するだけで、Subscriberのこともプロトコルも意識する必要はない。

- Amazon CloudWatchとは・・・AWSの各種リソースをモニタリングするサービス。
 - CloudWatchのアラート機能・・・AWS上の各種リソースに対し監視条件（メトリクス）を作成する。アラートの閾値や通知はCloudWatch側で設定できる
 - CloudWatch Logs・・・
  - ログ収集・・・EC2インスタンスやElastic Beanstalk等のログをS3に保存。Fluentdによく似ている機能。
  - 監視機能・・・設定されたメトリックスで監視し、条件に一致すればアラートを発信する。

#1-6.AWSの利用コスト

##AWSの料金体系
- 時間ベース・・・EC2だと１時間いくら。
- 容量ベース・・・ネットワークだとインは無料、アウトは1GBあたりいくら。
- 回数ベース・・・S3だとAPIコール数

##料金計算の仕方
- Simple monthly Calculator・・・http://calculator.s3.amazonaws.com/index.html?ing=ja_JP

---
##AWS作成メモ
###VPC編
・VPC作成
・サブネット作成
・インターネットゲートウェイ作成
・ルートテーブル作成
・ネットワークACL作成
・セキュリティグループ作成

VPCの設定

|設定名|設定内容例|設定の割当最小単位|
|:-:|:-:|:-:|
|(1)VPC|デフォルトVPC全体のネットワークアドレス|リージョン|
|(2)サブネット||AZ|
|(3)ルートテーブル||サブネット|
|(4)インターネットゲートウェイ|インターネットへの接続用GWが作成され、ルートテーブルに割当られる|VPC|
|(5)ネットワークACL||サブネット|
|(6)セキュリティグループ||インスタンス|

###RDS編
・DB用サブネットの登録
・DBのパラメータグループの作成
・DB用セキュリティグループの作成（VPC指定）
　VPC内からのみDBへのアクセスを許可するポリシー