AWS認定ソリューションアーキテクト- アソシエイトレベル 勉強記（１）

何回シリーズになるか分かりませんが、資格合格を目指してAWSについて勉強していきたいと思います。


必須で抑えておくべきAWSサービス
----------------
大変参考になったHP

> http://dev.classmethod.jp/etc/how-to-get-a-certification-aws-architect-associate-level/

* AWSは「高い可用性」と「高いセキュリティ」と「高い耐障害性」をどのように実現しているか、また、自分で実現するにはどうしたら良いか確認する問題が出る

1. Amazon EC2：コンピューティング
1. Amazon VPC：仮想ネットワーク
1. Amazon S3：ストレージ
1. IAM：アカウント認証
1. Auto Scaling：スケーリング
1. Elastic Load Balancing：ロードバランサー
1. Amazon EBS：ディスク
1. Amazon Route 53：DNS
1. Amazon CloudFront：コンテンツ配信
1. Amazon RDS：データベースサービス
1. Amazon SQS：キューイング
1. Amazon SNS：メッセージング


可用性のあるシステム構成とは
----------
大変参考になったHP

> http://dev.classmethod.jp/cloud/aws/high-availability-on-aws/

* availability-zone
 * EC2はAWSから強制的に再起動を求められたりする。
 * 仮想サーバのインスタンスを稼動させる物理ロケーションを明示的に指定できる
 * リージョンの中に、複数のAZ（データセンター）が存在している
    *  AZが異なると、違うデータセンター（地理的に）にマシンが設定されている
    *  AZ間の通信は高速回線
    * リージョン間はインターネット通信
    

* Step1.非AZ体制の場合
      ![minimum-vpc-320x467.png](https://qiita-image-store.s3.amazonaws.com/0/25344/9a26bcb3-e18b-aa0f-afef-c55eed00600d.png)
     * 障害耐性や冗長化、負荷分散、オートスケール等の機能は完全に割り切ったミニマムなVPC構成
     * VPCの中には、サブネットを2つ作成する
         * 上側のサブネットは、インターネットとやり取りするため「public subnet」
          *  アプリケーションサーバはインターネットとやり取りをするため、このpublic subnetに配置する
          *  ユーザからのリクエストを受け付ける為に、Elastic IPによってグローバルIPを付与します。
          *  EBSを使用している
            * アプリケーションのデータファイルや、インストールするアプリケーション自身を配置するため
         * 下側のサブネットは、インターネットからは遮断
            * 内部のネットワークとのみやりとりをするため「private subnet」と呼びます。
            *  DBサーバはアプリケーションサーバからアクセスされるだけなので、private subnetに配置
     * DBが落ちたら、システムは正常稼働を続けられません。アプリサーバが落ちても同様

* Step2. HA体制の場合
     * AZ丸ごと落ちてもシステムが止まらないよう、この2台のAPをそれぞれ別のAZに配置する。
     * EC2インスタンスやAZが落ちた場合、ELBの死活監視機能によって落ちたapp-serverにはリクエストが振り分けられなくなる。
     * RDSの設定においてMultiAZの設定をONにするだけで、マスターDBがあるAZとは別のAZに、スタンバイDBを起動し、レプリケーションを行ってくれるようになります。
      * この設定により、マスタDBやマスタのあるAZが落ちたとしても、自動でフェイルオーバーが起こり、システムは稼働し続けるのです。
        ![ha-320x350.png](https://qiita-image-store.s3.amazonaws.com/0/25344/cef4ac57-d718-c10f-0ed7-263d4d9276e2.png)

Contents Delivery Network(CDN)
----------------------------------
* 静的コンテンツ配信パターンカタログ
 * 静的なコンテンツというのは、コンテンツをリクエストに応じて生成したりせず、完成品としてのファイルが手元にある状態
  * 近年の静的コンテンツは、動画やARのモデリングデータ、音声等…、とにかくサイズがデカい。

* Step1「EC2の自動割り当てホスト名 *2をハードコーディング」
　 ![EC2_jonokuti.png](https://qiita-image-store.s3.amazonaws.com/0/25344/16b46056-e0e1-bbf1-3ffd-919579f5c211.png)

* Step2「EC2 + EIP」
  * 複数台のインスタンス体制は組めませんので、可用性の点で問題があります。
  * 過大なアクセスに耐えるために、スケールアップ作業をする場合は、その間サービスをメンテナンス停止する必要がある
     ![3jyonidan.png](https://qiita-image-store.s3.amazonaws.com/0/25344/295ca687-c11e-0e2a-80ba-314d06bf44ee.png)

* Step3「EC2 + ELB」
 * アプリにハードコードされるのはELBのDNS名
 * スケールアップ時にも止まりませんので可用性問題は解決.マルチAZ体制もOK
 * コンテンツが管理画面からのアップロードにより次々に追加されるようなケースです。
  * ELB配下の全てのインスタンスに、新コンテンツを届けなければなりません。
    ![4sandanme.png](https://qiita-image-store.s3.amazonaws.com/0/25344/cf7c203d-9edc-6ee0-afe0-fde19d66b7a3.png)

* Step4「EC2 + ELB + CloudFront」
 * CloudFrontによりスパイク対策は基本的にはOK
   * CloudFront
    * 一度アクセスされたS3のオブジェクトをエッジサーバーにキャッシュします。以降のアクセス時にはそれを利用するため、比較的容量が大きく、頻繁にアクセスされるようなコンテンツに最適
    * 要するに「キャッシュ」ですので、キャッシュヒット率が悪いコンテンツ *5に対しては逆効果になったりもします。
    * キャッシュの入っているサーバをエッジサーバという
     * 東京リージョン内では、東京と大阪にエッジロケーション（エッジサーバが置いてある場所）
     * 全世界で数十拠点あり、１つのオリジンサーバから全世界に配信することができます
       ![5makushita.png](https://qiita-image-store.s3.amazonaws.com/0/25344/c58b7ef0-26ab-112d-09ac-69eaf5d035be.png)

* Step5「EC2 + Route53」
  * アプリに独自ドメインを埋め込むようにして、Route53を使ってみた。
  * Route53
    * DNSサーバ（IP⇒URL）
 
* Step 6「EC2 + ELB + CloudFront + Route53」
    ![8maegashira1.png](https://qiita-image-store.s3.amazonaws.com/0/25344/7513bfb4-5d12-6117-2c2b-83f8c5ee376e.png)

* Step7「S3 + CloudFront + Route53」
  ![1yokozuna.png](https://qiita-image-store.s3.amazonaws.com/0/25344/8f993f54-ce5d-d9b0-ad09-c999acf1dff6.png)
    * 静的ファイルの場合は、S3を利用すると安い


AWS試験全体について
----------------
> http://dev.classmethod.jp/etc/how-to-get-a-certification-aws-architect-associate-level/
> http://www.seeds-std.co.jp/seedsblog/1055.html

上記ページを読んでいて気になったポイントを上げます。

1. 疎結合

 1. AWS社が提供するサービス/プロダクトの数と同時多発的にアップデートされる機能は、彼らが社内で疎結合なプログラミングを行っているからだと思います。

1. ステートレス
 * サーバが落ちてしまったら、ユーザが入力中の情報が消えて無くなってしまいます。
  * 状態を保持したくないので、クラスタ化されたElastiCacheに保存します。これで負荷に応じてEC2インスタンスをいくらでも増減させることができます。

1. 推奨のサーバ構成
 1. Route53+ELB+EC2x2+ElastiCachex2+RDSMultiAZ/DynamoDB+S3
 1. ElastiCacheはインメモリなのでRDSよりも負荷に強いです。
 1. RDSはMultiAZ指定して、同期レプリケーションと自動フェイルオーバーによる早期復帰を実現します。   
 1. DynamoDBであればIOPSを指定して高速なI/O性能を使うことが出来ます。

1. 分散環境
 * 読み取り一貫性と結果整合性
  * 「更新はそのうち全体に反映される」
  * １つのファイルをアップロードすると順次分散用のコピーが始まります。これにより障害時にファイルが消える確率を最小化することができます。
  * 常に最新を表示する必要がないデータを扱う用途にはピッタリ
  * ロックやトランザクション処理は行われない

課題
--------
* Route53について調べておく
* Amazon VPCについて

> http://dev.classmethod.jp/cloud/vpcfor-infra-engineer-1/