AWS EC2やEBS周りの勉強メモ

# EC2
## AMIを検索

CLIで確認。
表示される結果が多いのでマネジメントコンソールで探したほうがいいか。

```bash
aws --output table --profile [profile] ec2 describe-images \
    --filters "Name=architecture,Values=x86_64" \
              "Name=root-device-type,Values=ebs" \
              "Name=virtualization-type,Values=hvm" 
```

## ec2を作成・起動する

成功すれば、dry-runオプションを消して実行。

```bash
aws --region us-west-2 --profile [profile] ec2 run-instances \
    --image-id [AMI Id] \
    --key-name [key name] \
    --instance-type t2.micro \
    --user-data file://PATH/my_script.txt \
    --subnet-id [Subnet Id] \
    --dry-run
```

ユーザーデータはインスタンス作成時に実行するシェルスクリプトのファイル。
デフォルトだと作成したEC2インスタンスは停止して起動するたびに物理ホストが変わる。

## インスタンスからメタデータへのアクセス

インスタンス内からそのメタデータを参照できる。
ユーザーデータなどの初期化スクリプトで参照するのに便利。

取得先は下記。
http://169.254.169.254/latest/meta-data

例えば、instance-idは下記で取れる。
http://169.254.169.254/latest/meta-data/instance-id

参考: http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-instance-metadata.html

## 起動時のStatusチェック

下記の2つのチェックが行われる。

* System Status Checks: インフラ側
* Instance Status Checks: OS側

## T2系のCPUクレジット
ベースライン性能以上のCPU利用率時にバーストする。
ベースライン性能は

* t2.nano 5%
* t2.micro 10%
* t2.small 20%
* t2.medium 40%

と低い値。

参考: http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/t2-instances.html

## 仮想化方式

* 準仮想化(Paravirtual, PV)
* 完全仮想化(Hardware-assisted VM, HVM)

### VM Import/Export

VMWareやVirtualBoxのイメージからインポートできる。
http://dev.classmethod.jp/cloud/aws/vm-import-image-import/
HVMのみ対応。

## AWS Marketplace

AWS上で実行されるソフトウェアやサービスを見つけて購入し、すぐに使用開始できるオンラインソフトウェアストア。

## ボリューム

* インスタンスストア  
  EBSと異なり無料。  
  揮発性で停止すると、書き込んでいた内容は消える。  
  利用するには対応するインスタンスタイプを使用する必要がある。  
  下記表のInstance Storageで"EBS only"になっていないインスタンスタイプで利用可。
  <img width="1016" alt="instance store.png" src="https://qiita-image-store.s3.amazonaws.com/0/45959/5842336a-cb8c-29a4-d4be-d81cf7e77a78.png"> 
  タイプによって、利用できるインスタンスストアのサイズ等は決まっている。  
  http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/InstanceStorage.html  
  スワップ領域としても活用可能。  
  CloudWatchで確認するときはEC2のDisk Metricを確認する。
* EBS  
  CloudWatchで確認するときはEBSのDisk Metricを確認する。

## intance-store-backedインスタンスとEBS-backedインスタンス

intance-store-backedインスタンスはルートボリュームにインスタンスストアを指定したもの、
EBS-backedインスタンスはルートボリュームにEBSを指定したもの。
intance-store-backedインスタンスはs3-backedインスタンスとも呼ばれる。
intance-store-backedインスタンスは再起動と終了しかできない。

ルートボリュームはAMIの時点で決まっているので、intance-store-backedインスタンスを利用するにはそれ専用のAMIを利用する必要がある。

## その他

* EBS最適化インスタンス  
  EBSとの接続時はDiskI/OよりNetworkのI/Oがボトルネックになる。（Provisioning EBS）  
  これを解決するオプションで有効可していると帯域が確保される。  
  m4, c4といった最近のタイプだとデフォルトオン。  
* プレイスメントグループ  
  インスタンス間のネットワーク接続を高速化する。  
  同一AZで使用できる。
* Dedicatedインスタンス, EC2 Dedicated Host  
  物理ホストを他者と共存させない仕組み。
* Private IP  
  VPCであれば、Stop/StartしてもIPは変わらない。
* EC2が利用するIPアドレスレンジ  
  http://docs.aws.amazon.com/ja_jp/general/latest/gr/aws-ip-ranges.html  
  EC2の価格変更時にSNSで変更通知を受け取ることができる。  
  <img width="902" alt="AWS_SNS.png" src="https://qiita-image-store.s3.amazonaws.com/0/45959/fe2dd8e0-0c40-2598-63bb-f8e216fe74b1.png">
  参考: http://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/price-notification.html

# EBS

EBSはAZサービス。そのためあるAZ用に作成したEBSは別のAZからは利用できない。
別のAZから利用するためには一度Snapshotにしてから、別のAZ用に復元する。（別のリージョンで使用するときも同様）

<img width="838" alt="ebs_snapshot_copy.png" src="https://qiita-image-store.s3.amazonaws.com/0/45959/1c9bdd8d-81d9-52c0-475c-a0d3a552fb37.png">

## EBSスナップショット

EBSのバックアップをとること。
結果はS3に保存する。(ただし、保存先を見ることはできない。EC2のダッシュボードから確認できる)

取得の際、I/Oを停止する必要があり、対象のEBSボリュームをアンマウントしてから取得開始することが推奨されている。
ただし、開始後はそれ以降の書き込みはキャプチャ対象外となるため、完了を待たずに再マウントして使用できる。
作成を指示し、レスポンスが返ってきたらその時点で開始されている。この時点でI/Oを再開して問題なし。
1世代目は実データをすべてバックアップ。2世代目以降は差分バックアップ。
ちなみに、復元の際はもとのボリュームのサイズを大きくすることも可能。

## データボリュームの暗号化

暗号化を指定するとAES-256によって暗号化される。(Snapshotも同様)
暗号/復号にはハードウェア機能が用いられるため、パフォーマンスへの影響は極めて小さいとのこと。

## その他

EC2はタイプごとにサポートできるIOPSが決まっている。EBSもIOPSが決まっている。ボトルネックの解決はそこに注意。

http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/EBSOptimized.html
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/EBSVolumeTypes.html