AWSの「EC2とは何か?」

今回はAWSの「EC2」について学習した事をアウトプットさせて頂きたいと思います。

##EC2 (Elastic Compute Cloud)
EC2とは、AWSの仮想サーバーのことです。
仮想サーバーとは、サーバーの上に論理的にサーバーを組み立てたものになります。
代表的なソフトウェアとしては、VMwareのブランドが有名です。

###そもそもサーバーとは？
業務用コンピューターのことでです。
サーバーの役割は、クライアントからのリクエストに対してレスポンスを返すことです。

サーバーの環境を構築するためには、以下のハードウェアが必要です。
そしてAWSではそれぞれ次のサービスで仮想サーバーを実現してます。

|ハードウェア|AWSサービス|
|-----------|------------------------------------------|
|OS         |AMI　Amazon Machine                        |
|CPU＋Memory|インタンスタイプ t2nano, t3micro M2mediumなど  |
|SSD        |EBS Amazon Elastic Block Store             |
|NIC        |ENI Elastic Network Interface              |

###AMI
AMIは、インスタンスを起動するのに必要なOSやボリュームの情報などのテンプレートのことです。
ローカル環境でもサーバー構築にOSが必要なように、EC2インスタンスの作成時には、まずはじめにAMIを指定します。
AMIには、Wordpressなどのソフトウェアがあらかじめ用意されているものやマイAMIといった自分で登録したAMIを選択することもできます。

####インスタンスタイプ
EC2のAMIを選択したら、次にインスタンスタイプを指定します。
インスタンス名の構成にはそれぞれ名前に意味があり、例えばAWSのインスタイプの中でもテスト環境として使用されることが多い、t2.microのインスタンスタイプには次のような意味合いがあります。

例） t2.micro
tはファミリー名
数字は世代番号
microはインタンスのサイズ（これによってCPUやメモリのサイズが変わる）

**インタンスタイプの種類**
インスタンスタイプの種類は次の種類と特徴があります。

|種類|特徴 |
|----|---|
|t3系|・テスト向き<br>・CPUバーストが特徴（CPU不要時は力をためて必要な時に使える）<br>・t3...CPUがIntel<br>・t3a...CPUがAMD(t3...と比較して10%ほど安価)|
|M系|・汎用タイプでどんなタイプにも合わせやすい。|
|C系|・コンピューティング最適化<br>・処理の多いウェブサーバー向き<br>・科学的なモデリング<br>・機械学習/深層学習の推論|
|R系|・メモリ最適化<br>・ハイパフォーマンスのデータベース<br>・ビッグデータ<br>・Hadoopクラスター|
|P系|・高速コンピューティング最適化<br>・GPUがついている（最大の特徴）<br>・機械学習/深層学習|
|H系|・ストレージ最適化<br>|・分散ファイルシステム<br>|・Apache Kafkaなどのログ分析<br>・ビッグデータのワークロード用クラスター|

このようにインタンスタイプには様々な系統・種類がありますが、迷った際には、**t3系**か**M系**を使用すれば、一番間違いがないかと思います。


###EBS（Elastic Block Store）
EC2にアタッチして使用する外付けディスクになります。
EBSの特徴としては、種類に応じてIOPS（性能）が異なる点とスナップショットが取得できることが特徴としてあげられるでしょう。
ちなみにスナップショットとは、バックアップのことです。
EBSの種類は大きく分類して`SSDタイプ（料金が高いけど高速）`、`HDDタイプ(低速だが安価)`の2種類があり、またその中で更にグレードが2つに分かれているので全部で4種類あります。
詳細は以下のとおりです。

####EBSの種類

**SSDタイプの種類**

|種類|特徴|
|----------|----------|
|汎用SSD|デフォルトで設定されている|
|プロビジョンド IOPS SSD|特別な性能を付けたい時に使用|

**HDDタイプの種類**

|種類|特徴|
|----------|----------|
|HDD(st1)|スループット最適化|
|Cold HDD(sc1)|保管用で料金が一番安い|


###EC2のバックアップについて
EC2にはバックアップするための方法が大き分けて２種類あります。
１つ目はスナップショットでバックアップする方法です。
この場合、S3に保管してあるスナップショットからバックアップすることができます。
S3の詳細は割愛しますが、AWSで用意されたインターネット用のストレージのことです。
本番環境で画像や動画などを保存する時によく使用されますが、バックアップ用途としても使用することができます。

もう一つはAMIからバックアップする方法があります。
こちらは、AWS Backupというサービスがあるので、そちらからバックアップしたい
インスタンスの選択などを行い、バックアッププランを作成することでバックアップ用のAMIを用意することができるので、何かあった際にはそちらのAMIから新しいインタンスが作成すると良いかと思います。

###User dataについて
EC2が初回起動する際に実行されるスクリプトのことです。
実行権限は、rootユーザー権限になります。
例えば以下のようにUser dataをセットすれば、インスタンスの初回起動時に
パッケージのアップデートとソフトウェアのインストールができます。

パッケージのアップデート    `yum update -y`
ソフトウェアのインストール   `yum install httpd -y`

###Instace Meta Data
インスタンスの中に埋め込まれたデータのことです。
EC2にログインした状態でcurlコマンドかec2-metadataコマンドを使用することで
インスタンス内のあらゆるデータを確認することができます。
使用例）
EC2のIPアドレス
EC2のホストネーム
EC2が使用しているAMIのID番号など

```:curlコマンドを使用してAMI-IDを探した場合

curl http://169.254.xxx.xxx/latest/meta-data/ami-id
```

```:ec2-metadataコマンドを使用して同様にAMI-IDを探した場合
ec2-metadata --ami-id
```
ec2-metadataコマンドのオプションはたくさんあるので、覚えていない場合は
ec2-metadata --helpコマンドでオプションを検索してあげると良いと思います。

###キーペア
EC2へログインするために使用する秘密鍵、公開鍵のペアのことです。
EC2にはあらかじめ、公開鍵がセットされており、秘密鍵をxxx.pem形式でダウンロードすることで、秘密鍵を使用してEC2内にログインができるようになっています。

もし秘密鍵をなくしてしまったら？
以下の手順で作業を行うことで問題解決ができると思います。

①AMIとして一度バックアップを取得します。
②インスタンスを起動し直す際に新たにキーペアを作成。
③新しい秘密鍵を使用してEC2にログインし直す。

###まとめ
EC2はAWSの仮想サーバーを構築するためのサービスであり、EC2を作成する時にはAMI、インスタンスタイプの選択が必要であり、インスタンス作成時にはEBSなどがアタッチされます。
インスタンスの作成時に、User dataを設定することでインスタンスの初回起動時に設定したスクリプトが自動で実行されます。またインスタンスの作成時にはキーペアが作成されるので、その際に秘密鍵をダウンロードし、秘密鍵のあるディレクトリで作成したインスタンスのPublic IPアドレスにSSHで接続することでEC2にログインすることができます。（※セキュリティグループのインバウンドルールの22番ポートが開いている＋秘密鍵の権限が付与されている必要がある）

ざっくりとした内容ですが、今回のアウトプットはここまでとさせて頂きたいと思います。


この記事はAWS初学者を導く体系的な動画学習サービス
「AWS CloudTech」の課題カリキュラムで作成しました。
https://aws-cloud-tech.com