AmazonWebService実践入門を読んで（書き途中）

# AWSの基礎知識

## AWSの特徴

1. 豊富なサービス
2. 柔軟なリソース
3. 従量課金

## AWSを支える概念

* **リージョン**・・・AWSの各サービスが提供されている地域のこと。リージョンによって利用可能なサービスが異なる。
* **アベイラビリティーゾーン**・・・独立したデータセンターと同義。どのリージョンでも耐障害性のため、必ず２つ以上存在する。アベイラビリティゾーン間は高速回線で接続されている。
* **エッジロケーション**・・・コンテンツ配信サービスのCloudFrontやDNSサーバサービスのRoute53を提供する場所のこと。

## Amazon EC2（Elastic Compute Cloud）の概要

* **EC2とは**・・・仮想サーバを必要なときに必要なだけ調達でき、使った分だけ料金を支払えばよいサービス。
* **インスタンスタイプとは**・・・サーバのスペックを定義するもの。インスタンスタイプの違いにより、主にCPU・メモリ・ストレージ・ネットワーク帯域が変わります。
* **AMI（AmazonMachineImage）とは**・・・仮想サーバの起動に必要な情報が入っている。イメージファイル。

# 仮想サーバの作成（EC2 基本編）

## EC2の概要

* EC2のストレージ
    * **EBS(Elastic Block Store)**
        * 可用性と耐久性を持つストレージ
        * ボリュームという単位で表現される。＞EBSボリュームと呼ばれる
    * **インスタンスストア**
        * インスタンス専用の一時的なストレージ。
            * 「インスタンス専用」とは他のインスタンスへ付け替えることができないという意味。
            * 「一時的な」とは、インスタンスを起動している間のみ利用できるという意味で、インスタンスの停止（stop）や削除（terminate）をすると復元できなくなります。

＜EBSとインスタンスストアの比較＞

| ストレージタイプ | 永続性 | 耐久性 | パフォーマンス | 用途 | 費用 |
|:--------------|:------------|:------------|:------------|:------------|:------------|
| EBS | 高い（スナップショット利用時） | 99.5~99.999% | ランダムアクセスに強い | OSやDBなどの永続性と耐久性が必要なストレージ | 有料 |
| インスタンスストア | 低い | EBSより低い | シーケンシャルアクセスに強い | 一時ファイル、キャッシュ・スワップなど、失われても問題がないストレージ | 無料 |

* **EBS(Elastic Block Store)**・・・


## EC2の停止/削除/再起動（マネージメントコンソール）

* **再起動と停止の違い**・・・インスタンス停止は、停止前とは別の物理サーバ上でインスタンスが起動する。再起動は、物理サーバは変わらずインスタンスストアも引き続き利用できる。
* **EBSとEIPの挙動**・・・「EBS」と「稼働しているインスタンスに付けていないEIP」は課金されるので注意。

## AWS CLIによる操作

AWSには、マネージメントコンソール以外に、

* **AWS API**・・・AWSのWebサービスAPI
* **各種言語のSDK**・・・間接的にWebサービスAPIを利用
* **AWS CLI**・・・間接的にWebサービスAPIを利用

のインターフェースがあります。


***

## AWS CLIのインストール

* 書籍では、Linux環境のクライアント想定となっていましたが、Windows環境のクライアント想定で実施しました。

* インストールは、[本家解説ページ](http://docs.aws.amazon.com/ja_jp/kinesis/latest/dev/kinesis-tutorial-cli-installation.html)の[Windows（64 ビット）用 の AWS CLI MSI インストーラのダウンロード](https://s3.amazonaws.com/aws-cli/AWSCLI64.msi)のリンクからインストール。

## AWS CLIのセットアップ
（そのうち書き足します）

# 仮想サーバの強化（EC2応用編）

## バックアップの作成

### AMI作成によるバックアップ
* EC2ではインスタンスの現在の状態を元に**AMIを作成することでインスタンスのバックアップを取ることができます。**
* :grey_exclamation: EBSボリュームはインスタンスを削除して消滅してもボリュームが残ったままになり、ボリューム分の課金が発生し続けることになるので注意が必要。

### EBSのスナップショットによるバックアップ
* 上記のAMIは、EBSボリュームを含めたインスタンス全てをアーカイブしますが、**EBSボリュームを単体でアーカイブすることも可能。　＝　スナップショットの作成。**

:grey_question: スナップショットからEBSボリュームやAMIを作成することも可能らしいがどんな用途があるのか不明…

## スケールアップ

### インスタンスタイプの変更

#### EBS-Backedインスタンスの場合（ルートデバイスがEBSの場合）
1. インスタンスを一度停止する。
2. :grey_exclamation: EC2-Classic環境ではパブリックIPなどがリセットされるので注意

#### Instance Store-Backedインスタンスの場合（ルートデバイスがインスタンスストアの場合）
* AMIを作成し、EIPを付け替えるなどして新たに起動したインスタンスと古いインスタンスを入れ替える。
* 複雑らしい。

## ディスク容量の追加

### EBSボリュームの追加（ボリュームそのものを別途追加してマウントする）
1. ボリュームを作成する
* :grey_exclamation: 作成の際にアベイラビリティゾーンを追加したいインスタンスと同じにすること
* インスタンスに作成したボリュームをアタッチする
* SSHでインスタンスにログインして、追加したボリュームをマウントする。
* :grey_exclamation: インスタンス停止時などにマウントが外れてしまわないように、fstabで自動マウントしておこう。

### ルートボリュームの容量追加（ボリューム数は増やさずに１つのボリュームの容量を拡大する）
1. 対象インスタンスのAMIを作成する
* 作成したAMIを使ってインスタンスを新たに作成する
* インスタンスを新たに作成する際にルートボリュームの容量を拡張する
* インスタンス作成後にSSHでログインしdfコマンドなどでサイズが拡張されていることを確認する
    * :grey_exclamation: 起動しただけではデバイスサイズの変更が反映されない場合があるらしく、その場合はresize2fsコマンドで変更を反映する必要があるらしい。
* このあとにIPアドレスの付け替えELBに接続するなどして新旧の入れ替えをする。

### 追加したボリューム(ルートデバイス以外のEBSボリューム)の容量追加
1. EC2インスタンスを停止
* 対象ボリュームのスナップショットを作成
* 作成されたスナップショットを選択してボリュームを作成
    * :grey_exclamation: ↑でボリューム作成の際にはインスタンスと同じアベイラビリティゾーンにする
* 旧ボリュームをでタッチして、新ボリュームをアタッチ。
    * :grey_exclamation: 起動しただけではデバイスサイズの変更が反映されない場合があるらしく、その場合はresize2fsコマンドで変更を反映する必要があるらしい。
    * また、ファイルシステムがXFSの場合はresize2fsコマンドが失敗するらしく、代わりにxfs_growfsコマンドを利用するとよいらしい。

## I/Oの高速化

### EC2のストレージ

EC2のストレージの種類は、「インスタンスストア」と「EBS」にわかれる。
「EBS」の場合のボリュームの種類は以下3種類になる。

| ボリューム | 説明 | 最大IOPS |
|:-----------------------|:------------------------|:------------------------ |
| SSD | 最もよく使われていると思われる。パフォーマンスはストレージ容量に比例する。ストレージの追加の際の選択肢では、汎用SSDと出てくる。汎用 (SSD) ボリュームは、3000 IOPS までのバーストが可能で、1GiB 当たりの基準となる一貫した 3 IOPS を提供します。 | 3000 IOPS までのバーストが可能 |
| SSD（プロビジョンドIOPS） | DBなど高いI/Oが飛鳥名場合に向いている。パフォーマンスの下限をある程度の範囲で指定できる。プロビジョンド IOPS (SSD) ボリュームは、最大 20000 IOPS まで提供することができ、EBS 最適化インスタンスに最適です。 | 最大 20000 IOPS まで提供 |
| マグネティック | 低いI/Oでも問題ない場合に使用する。以前はスタンダードボリュームと呼ばれていたマグネティックボリュームは、平均 100 IOPS を提供し、数百 IOPSまでのバーストが可能です。 | 平均 100 IOPS を提供し、数百 IOPSまでのバーストが可能 |

ボリュームに応じてI/Oの高速化する方法が異なるため、まずはどのボリュームタイプを選択しているかが重要となる。

### プロビジョンドIOPSの設定

* **IOPSとは**・・・IOPS（Input Output Per Second）は、そのストレージが1秒間に処理できるI/Oリクエストを数値化したもの
*