AWSトレーニング(Amazon Web Services 実践入門 1 ～一日で学ぶ、AWSクラウド活用～)　受講してみました


## 概要
AWSトレーニングの初受講だったので、受講記録を残します。

## 用語紹介
* リージョン
   * 世界の地域ごとの拠点
* アベイラビリティゾーン（AZ）
   * リージョンごとのデータセンター郡
   * 別のアベイラビリティーゾーンで発生した障害から隔離するために作られた、リージョン内のデータセンター
* エッジロケーション
   * キャッシュサービス
   * 物理的に離れた相手に対してサービスをキャッシュに配置することで、
レスポンスを早くすることが出来る


## 今回利用したAWSサービス
* EC２
* AMI
* RDS
* ElasticLoadBalancing
* S3


## Amazon Elastic Compute Cloud(EC2)
### 特徴
* 重要課金で利用できる仮想サーバリソース
* 世界11箇所のリージョンで利用可能
* OSはWindows、Linuxどちらも選択可能 

### 課金体系
* 課金はインスタンス利用料と、アウトバウンドのデータ転送量
    * インスタンス利⽤用料($0.02/hour ~) 
    * データ転送量(OUT $0.14/GB )
* 作成と同時にEBSが出来るため、EBSの使用料も発生する。

### キーペア
公開鍵をAWS側が保管し、インスタンスが作成されるたびに埋め込んでいる。
キーペアの秘密鍵はキーペア作成タイミングで自動的にダウンロードされる。
紛失した場合、対応するインスタンスには入れなくなってしまう。
第三者に秘密鍵がわたってしまうと、簡単に不正アクセスが出来てしまう。

### セキュリティグループ
 FWの機能みたいなもの、初期状態では完全に遮断状態。
 リージョンごとに独立して管理する。
 
 * アクセスの許可できる内容
     * プロトコル：HTTP、SSH、ポート番号、ポートレンジ等
     * インバウンド：アクセス元（IPアドレス、セキュリティグループID)
     * アウトバウンド：アクセス先（IPアドレス、セキュリティグループID)

インスタンス起動前に、適切なセキュリティグループを選択しアクセスの制限をかける
稼働中にも編集することも可能
 IPの制限は0.0.0.0/0だとIPは完全開放状態となる
セキュリティグループにIPではなく許可するセキュリティグループの指定も可能。
たとえば、DBサーバに対してのセキュリティグループに、
Webサーバ専用のセキュリティグループIDを指定するとWebサーバからのみ、
接続可能とすることが出来る

### 柔軟性
#### スピード
* 必要な時に必要な分調達できる仮想サーバ
* 定義済みのスペック(インスタンスタイプ)、OSテンプレート(AMI) を 選択
* 障害や不要になったら即破棄ができる

#### 低コスト
* 物理ではないので、初期費用はかからない。使った分だけかかる従量課金制
* ケースバイケースでサーバの増減が簡単にできる。
    ※ ただし、増やしたら増やした分の利用費用はかかる。

#### 管理
 共有サーバと違い、与えられるユーザは管理者権限を持っている。
そのため、自由にソフトウェアやミドルウェアを入れることが出来る。

#### 安全性
セキュリティグループによる柔軟なネットワーク・セキュリティモデル

### 演習内容
* キーペアの作成
* セキュリティグループ（HTTP、SSHのみのアクセス許可）を作成
* EC2インスタンスの作成
* 作成したインスタンスへのSSH接続、Wordpress稼働環境のインストール


## Amazon Machine Image(AMI)
### 特徴
* 作成したインスタンスのイメージを生成でき、S3へ保管できる
* 作成したイメージから同じインスタンスを複製できる
* Amazon LinuxはAmazonが作成したLinux環境のAMI
* 作成したAMIはコミュニティ等に公開することが出来る。

### 課金体系
インスタンスイメージのスナップショット容量に応じた課金のみ。
スナップショットの保存先がS3になるため容量に応じたS3の料金が発生する。

### 注意点
AMIを削除しても、S3のスナップショットは残っているため課金は発生する。
そのため、AMI削除時にはスナップショットも一緒に削除する必要がある。

### 演習内容
* EC2の演習時に作成したEC2のAMIを作成
* AMIからEC2の生成
* 生成したEC2のDNSに対して接続し、Wordpressが入っていることを確認


## Amazon Simple Storage Service(Amazon S3)
### 特徴
* 高い堅牢性：99.999999999% 
* 配置ファイルの数量無制限
* 様々なAWSサービスとの連携が可能
* 静的Webサイトであれば、S3のみで公開可能
* リージョン指定がない
* バケットは最大100/AWSアカウントまで作成可能
* オブジェクトの最大容量は1オブジェクト5TBまで
* オブジェクトごとにURLを付与

### 課金体系
* データ格納容量
* データ転送量（OUT)
* APIリクエスト数

### 耐障害制
* 地理的に離れたデータセンターで３箇所で冗長に保持
* ２箇所のデータセンターが同時にロストしても耐えられる設計
* データロストに対して自動発見・自動修復

### 用語
* バケット：オブジェクトの置き場
* オブジェクト：アップロードしたファイル
* キー：オブジェクトごとに付与される一意の識別子
* ACL：バケット、オブジェクトへのアクセス制御のためのリスト

### 演習内容
* WordPressにプラグインを追加（Amazon S3 for WordPress with CloudFront）
* S3とWordPressを連携
* WordPressで画像付きの記事を投稿し、画像がS3に保存されることを確認。


## Amazon Relational Database Service(Amazon RDS)
### 特徴
* マネージドRDBMSサービス
管理部分をAmazonが行うRDBのサービス
* OracleやSqlServerなど、ライセンス費用がかかるサービスは
ライセンス費が従量課金になっている。
そのため、初期費用としてライセンス費用がかからない。
* バックアップ、パッチ適用、フェイルオーバーは自動で行われる

### 課金体系
* インスタンスタイプに応じて
* ストレージ利用料
* Multi-AZ配置を利用の場合、料金記載の料金

### Multi-AZ
同一AZではなく、複数のAZに対して同期レプリケーションを行う。
災害発生時等に、別のAZにあるスレーブにフェイルオーバーを自動で行うことが出来る。
他のフェイルオーバータイミングとしては、障害やパッチ適応などの
計画的メンテナスがある。

### バックアップ
* 自動スナップショット
    * Amazon RDS標準装備
	* 1日1回自動取得　+　トランザクションログバックアップ
	* 保存期間は最大35日間まで設定可能
* 手動スナップショット
    * 任意のタイミングでスナップショットを取得可能
* 自動パッチ適用
    * サーバOS更新とデータベースエンジンのマイナーアップグレード
    * 自動または手動での適用可能
    * 設定されたメンテナンス期間または次回、あるいは任意のタイミング

※データベースエンジンのメジャーアップグレードは手動で行う

### 復旧作業
* RDSインスタンスの削除の際、最後のスナップショットを保管することができる
* スナップショットからのリストアは既存のDBインスタンスを修復するのではなく、
新しいDBインスタンスを作成すること

※同じ識別子は使えないため、アプリ側のDBアクセス識別子の変更が必要
　ただし、リストア後に障害DBを削除すれば識別子を同様にすることも可能
　その分、システム停止時間は伸びる

### 演習内容
* WordPressの使用するMySQLをRDSにする
* RDS用のセキュリティグループを作成し、インバウンドには
EC２のセキュリティグループのIDを設定
* 復旧作業を行い、識別子が変更されると繋がらなくなることを確認
* 復旧後に古いRDSインスタンスを削除し、新規で作成したRDSの識別子を変更
* 正常にWordPressが動作することを確認


## Elastic Load Balancing (ELB)
### 特徴
* 複数のアベイラビリティゾーンにまたがって、 高レベルの耐障害性を実現
* ELB⾃体が⾃動的にキャパシティを増減
* 増減するELBはIPはそれに伴い変わるが、DNSを統一することでアクセス側は気にしなくてよくなっている
* バックエンドのEC2のセキュリティグループにELB からのトラフィックしか受けない設定が可能

### ELBの可⽤性
* ヘルスチェックを実施
    * EC2の状態を検出
* 正常稼働しているインスタンスにのみ負荷分散

### 演習内容
* ELB用のセキュリティグループ作成
* ELBを作成し、セキュリティグループを設定
* EC2インスタンスはRDSの演習時に作成したものを利用
* EC2２台で片方に負荷を与えて、切り替わるのを確認

## まとめ
#### Amazon EC2を使ったシステムの設計
* 故障に備えた設計 Design for Failureを意識
* 障害からの復旧時間(Mean Time To Repair , MTTR)を重視
    * 壊れたものを修復するのではなく、AMIやスナップショットから新しく作るほうが早い
* 平均故障間隔(Mean Time Between Failure, MTBF)にこだわらない
* AMIを常に作成
*  EBSスナップショットを定期的に取得
*  複数アベイラビリティゾーンへインスタンスを分散
⇛東京リージョンは2箇所ある

#### 次に押さえておきたいサービス
* IAM
* CloudWatch
* AutcoScaling
* VPC
* CloudFront

### 感想
長くなりましたが、受講記録は以上になります。
初めてAWSのトレーニングを受けたので、1Dayセミナーとしては楽しかったです。
割りと細かく教えていただけましたし、ハンズオンで結構好きに触らせてもらえました。
実践入門 ２についても受講しましたので、近々また公開します！