EC2（Elastic Computer Cloud）について

# 目次
[1. はじめに](#はじめに)
[2. EC2とは？](#EC2とは)
[3. EC2の構成要素・関連サービス](EC2の構成要素・関連サービス)
[4. 5つのメリット](#5つのメリット)
[5. 参考](#参考)
# はじめに
AWSのサービスの一つであるEC2についてまとめる。

# EC2とは？
EC2（Elastic Computer Cloud）はAWSが提供する仮想マシンサービスである。
下記のような特徴を持つ。
* 時間 or 秒単位の従量課金で利用可能
* 起動に必要なパラメータを設定することで数分足らずで起動可能
* 管理者権限で利用可能
* 独自のHW / Hypervisorにより最適化

### 物理層はAWS側が管理
ハイパーバイザー層と物理的な領域(HW)はAWSが管理・運用を実施。
そのため、仮想環境構築時の空きリソース管理やリプレース業務が不要。

### インフラコードの自動化
AWS CLIやAWS SDKを利用することで、コードやEC2の操作が可能。
コードの活用により、手動作業による工数や人的ミスが削減可能。

# EC2の構成要素・関連サービス

### インスタンスタイプ

メモリ、I/O、CPUクロック重視、GPU・FPGA搭載、価格重視など
それぞれの特徴を持ったインスタンスタイプが存在。

→　<font color="DarkOrange">処理するワークロードに合わせて自由に選択可能。</font>

| インスタンスの種類 | タイプ | 特徴 |
| :--- | :--- | :--- |
| 汎用 | T<br>M<br>A| バランス型で多様なワークロードに適用可能。<br>Webサーバやコードリポジトリなどに利用。 |
| コンピューティング最適化 | C | コンピューティング負荷が高いワークロードに適用。<br>ゲームサーバ、HPC、科学モデリングなどに利用。 |
| メモリ最適化 | R（メモリ最適化）<br>X（大規模アプリケーション）<br>ハイメモリ（インメモリデータベース）<br>Z（高周波数コア） | メモリ負荷が高いワークロードに適用。|
| 高速コンピューティング最適化 | P（GPU）<br>DL（Graudiアクセラレーター）<br>Inf（ML推論チップ）<br>G（グラフィック集約）<br>F（FPGA） | ハードウェアアクセラレーター（コアプロセッサ）を用いて、 CPUで実行するよりも効率的にワークロードを実行。<br>浮動小数点計算、グラフィック処理、パターンマッチングなどに利用。|
| ストレージ最適化 | H（ローカルストレージ・コンピューティング）<br>D（ローカルストレージ）<br>I（低レイテンシー） | ローカルストレージの大規模データセットに対する連続読み取り・書き込みアクセスが必要なワークロードに適用。<br>データウェアハウジングアプリケーション、高頻度のオンライントランザクション処理などに利用。 |
| HPC最適化 | HPC | HPCワークロードを実行するために構築。<br>大規模で複雑なシミュレーションや深層学習などで利用。 |

### コストモデルの種類
EC2はその利用方法によってコストモデルを選択する事が可能。

| コストモデル | 特徴 |
| :--- | :--- |
| オンデマンド | 長期間の契約なしで、時間単位の利用が可能。OSやインスタンスタイプで時間単位か秒単位か変わる。<br>途中で中断できない不規則な処理や短期的な処理におすすめ。 |
| リザーブド | 使用量一定 or 使用量が予測可能なワークロードに適している。<br>最大75%のコスト削減が見込める。 |
| スポット | 予備で確保されているEC2を最大90%のコスト割引で利用可能。<br>使用量（需要）が増えると強制終了のおそれがあるため、開始時間や終了時間が柔軟なアプリケーションやバッチ処理に適している。|
| Savings Plan | 1時間あたりの使用量を1year or 3yearで契約。最大72%のコスト削減が可能。 |
| Dedicated Hosts | EC2インスタンス専用の物理ホストの確保が可能。<br>コンプライアンス要件を満たすために利用する事ができる。 |
| ベアメタル | アプリケーションから基盤となるサーバーのプロセッサーとメモリに直接アクセス可能。<br>非仮想化環境での実行、独自のHypervisorを使用したいアプリケーションに適している。 |

※Dedicated Hostsとベアメタルの違いなどについては別記事で解説します。

### ストレージの種類
EC2直接アタッチするストレージとして2種類が挙げられる。

| ストレージ種類 | 特徴 |
| :--- | :--- |
| EBS | EC2に仮想的にアタッチされるブロックレベルのストレージサービス。<br>EC2インスタンス自体を停止・終了してもデータの保持が可能 → <font color="DarkOrange">不揮発性</font><br>1つのEBSを複数インスタンスにアタッチすることは不可。→ <font color="DarkOrange">同一AZ内で付け替えはOK</font>　 |
| インスタンスストア | EC2が稼働する仮想環境用のサーバーに内蔵されたローカルディスク。<br>EC2インスタンスを停止・終了すると同時にデータが消える　→ <font color="DarkOrange">揮発性</font> |


### IPアドレスの種類
IPアドレスの種類はEIP（Elastic IP）、プライベートIP、パブリックIPの3種類が挙げられる。

| IPアドレスの種類 | 静的 / 動的 | 内部 / 外部 | 端末から接続 | 特徴 | 
| :--- | :---: | :---: | :---: | :--- |
| EIP | 静的 | 外部 | OK| インスタンスを再起動してもIPアドレスが維持される。→<font color="DarkOrange">インスタンスに固有のIPアドレス</font><br>利用していない時間に課金される。<br>ex) <br>・EIPがEC2に割り当てられているが、EC2が停止している。<br>・EIPが付与されているが、EC2に割り当てられていない | 
| プライベートIP | 静的 | 内部| NG | インスタンスを再起動しても同じIPアドレスが割り当てられる。<br>インスタンス作成時にIPアドレスの指定が可能。<br>インスタンス作成時に必ず割り当てられる。<br>内部ネットワーク内で割り当てられたIPアドレス。 | 
| パブリックIP | 動的 | 外部 | OK | インスタンス起動時に自動で割り当てられる動的グローバルIPアドレス。<br>ランダム割当のため、IPアドレスの指定不可。<br>インスタンスを再起動すると別のIPアドレスになる。（動的割り当て） | 

※静的と動的について
    静的（Static） ：固定のIPアドレス。再起動しても変更されない。
    動的（Dynamic）：固定でないIPアドレス。再起動すると変更される。

### セキュリティグループ
セキュリティグループの特徴は以下の通り。

+ インスタンス（リソース）へのトラフィックのアクセスを制御できる機能である。
+ デフォルトではすべてのAWSリソースへのアクセスを拒否。（ホワイトリスト）
+ インバウンド（外 → 内）  ：未設定ではすべて拒否。
+ アウトバウンド（内 → 外）：デフォルトではすべてのトラフィックを許可。
+ ステートフル。
+ EC2ごとにセキュリティグループを設定する。

※ステートフル：状態を保持すること。
　　　　　　　　今回の場合、一度許可したトラフィックはそのレスポンスも許可する。

下の画像はアクセスチェックのイメージ図です。アクセスチェックが生じる部分に青色の丸印を置いています。
サブネット1ではアウトバウンドから始まるため、セキュリティグループでのチェックは起こりません。また、サブネットからのレスポンスもステートフルのためアクセスチェックは起こりません。
![セキュリティグループとネットワークACLのイメージ図_page-0001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3554634/a05c28c1-9f51-2311-9af0-15e600c102af.jpeg)


### キーペア

* インスタンスへの接続時に認証で使用するセキュリティ認証情報のセット。
* プライベートキーとパブリックキーで構成（公開鍵認証方式）

※認証と認可の違い
　認証（Authentication）：その人が誰なのか、正当な人なのかを確認。
　認可（Authorization）：その人が適切な権限を持っているのかを確認。

### AMI

* EC2インスタンスを起動するのに必要なOSやボリューム情報などのテンプレート。
* インスタンス立ち上げじには必ず指定する必要がある。
* 別アカウントへの共有、他リージョンへのコピーが可能。


# 5つのメリット
EC2を使用する5つのメリットを説明していく。

## 1.様々なインスタンスが構築できる。
先程述べたように、多種類のインスタンスからワークロードに適したインスタンスタイプを選択できる。
自分のワークロードに最適かつコストメリットがもたらされるインスタンスを選ぶと良い。

## 2.すぐに始められ、すぐに変更可能
* 固定資産から変動資産にサービスを変える事が可能。
* トライアンドエラーの試行回数が増え、より良いものに近づけていくことが容易になる。
* スケーリリングが容易になる。（垂直スケール、水平スケール）

※垂直スケールと水平スケールについて
* 垂直スケール：システムの性能自体を変化させる。例えば、メモリの増強やCPUをより良いものにする、反対にオーバースペックなのでCPUをダウングレードするなど。
    * スケールアップ：性能を高くする。
    * スケールダウン：性能を低くする。
* 水平スケール：システムの構成台数を変化させる。例えば、負荷分散のためにサーバーの台数を増やしたり、逆に減らしたりするなど。
    * スケールアウト：台数を増やす。
    * スケールイン　：台数を減らす。

## 3.従量課金で支払い
* 使った分だけに課金。
    * インスタンス構築時から利用時間により課金発生。
    * 秒単位、時間単位など、インスタンスの種類で課金方法は変わる。
    * GPUやハイメモリなど固定資産ではコストが高いものを安く利用可能。
* コストの最適化
    * 不要なインスタンスの停止でコストの最適化が可能。
    * 定期的なコストの見直しが必要。
    * CloudWatch、AutoScaling等を利用。

## 4.高可用性構成を簡単に作成
* 世界中２分散されたグローバルインフラストラクチャ
2023年10月15日時点のグローバルインフラストラクチャの数は以下の通り。


| 種類 | 数 |
| :--- | :--- |
| リージョン | 32 (今後さらに増える) |
| AZ | 102 |

* AZを利用することで高可用性を実現
複数のAZにまたぢあ構成にすることで高可用性を実現可能。

※AZ（Availability Zone）
* データセンター群
* 各リージョンには２つ以上のAZ
* １つのAZは１箇所以上のデータセンターで構成され、AZ感は低レイテンシー（数ms）のネットワークで接続
* AZ間は高い耐障害性を持つ

## 5.他のAWSサービスを活用してより便利に利用
マネージドサービス一覧は以下の通り。

| 種類 | サービス名 |
| :--- | :--- |
| ストレージ | S3、EFS、EBSなど |
| データベース | Redshift、RDSなど |
| 認証・認可 | AWS Directory Service<br>AWS Certificate Manager（ACM）<br>AWS Identity and Access Management（IAM）など |
| 監査・監視 | AWS Config、AWS CloudTrail、AWS CloudWatchなど|
| セキュリティ | Amazon Inspector<br>Amazon GuardDuty<br>AWS SecurityHubなど |

# 参考
* [Amazon Elastic Compute Cloud 入門（Amazon EC2）](https://pages.awscloud.com/rs/112-TZM-766/images/202111_AWS_Black_Belt_AWS_EC2_introduction.pdf)
* [【EC2】EC2とは](https://qiita.com/chiita__/items/af1bffa4670fc51c8ff4)
* [【AWS】EIP、パブリックIPアドレス、プライベートIPの違いとは？](https://qiita.com/empty948/items/ba242f0171a76ce0994f)
* [Amazon EC2 セキュリティグループ](https://qiita.com/leomaro7/items/42967c080814dfc82139)
* [EC2 における Public IP と Elastic IPの違いに関して](https://awsjp.com/AWS/hikaku/Elastic-IP_Public-IP-hikaku.html)
* [AWSのEC2インスタンスのキーペアとは](https://qiita.com/kaiyo_yume/items/8902f6e08881f0231002)
* [AWS AMI とは](https://qiita.com/miyuki_samitani/items/fa3a846407a4f8a36efe)
* [Amazon Machine Images の利用方法① インスタンスからの作成](https://recipe.kc-cloud.jp/archives/10045/)
* [リージョンとアベイラビリティーゾーン](https://aws.amazon.com/jp/about-aws/global-infrastructure/regions_az//)
* [Amazon EC2](https://aws.amazon.com/jp/ec2/instance-types/)
* [EC2インスタンスファミリーの特徴と覚え方](https://qiita.com/cloud-solution/items/c8dd9ed491abd3360516)
* [Amazon EC2 の特徴](https://aws.amazon.com/jp/ec2/features/)

-----------------
https://qiita.com/Aoi_Noguchi/items/ea33e53af83231629b19

https://qiita.com/Aoi_Noguchi/items/e22fa8d3abd8048e56eb