AWSのEC2についてのまとめ

##EC2（Elastic compute cloud）とは
AWSの**仮想サーバーサービス**のことです。
EC2を利用することで、OSを乗せた仮想環境をクラウド上にすばやく作ることができます。
EC2はインスタンスという単位で、サーバー環境構築します。
インスタンスとは簡単に言えば、OSを載せた仮想サーバーのことです。
また、インスタンスは複数作成して実行することもできます。

###サーバーとは
クライアントからのリクエストに対して、レスポンスを返してくれるコンピューターのことです。
例としては、Webサイトを見るときにURLをクリックしたりして、どこどこのページをクライアント側から要求します。
それに対して、その対象のページのデータをクライアント側に返してくれるためのコンピュータがサーバーです。

###仮想サーバーとは
簡単に言うと実際のサーバーの上に論理的なサーバーを構築することを言います。

###EC2で作成する仮想サーバー
一般的な仮想サーバーの構成とEC2で作成する仮想サーバーのちがいについて図で説明します。
![img02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367456/0e71e0b8-3ab1-17ff-d23b-7b0571b6f7d6.png)


##AMI（Amazon Machine Image）
**AMIとはサーバーのOSに当たるもので、インスタンス作成に必要な情報です。**
EC2を作成するときには、使用するAMIを指定する必要があります。
OSを何を使うかを指定したり、中にはOSだけではなくwordpressなどのソフトウェアが搭載されているものもあります。
中には有料のものもあるので注意が必要です。
基本的にはamazon linux2を選択で大丈夫です。

##インスタンスタイプ
名前の通りインスタンスのタイプを指定します。
インスタンスのスペックを決める部分で、インスタンスタイプにはさまざまな種類が存在し、指定するインスタンスタイプによって容量などが変わってきます。

「t2.micro」を例にして、名前の意味を説明すると以下のようになります。
2021年現在ではt3が最新になります。
![img03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367456/3035031e-5980-6080-658a-855562757876.png)
無料枠ではt2までが使えるようになっているので、有料ならt3、無料枠を使いたいなら基本的にはt2を使うようにします。

##EBS（Elastic Block Store）
EC2にアタッチして使用する外付けのディスクのことです。
種類に応じて**IOPS（性能）**が異なります。
また、スナップショット（差分形式のバックアップ）が取得できます。
特徴としてはAZをまたいでのアタッチはできません。
![img04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367456/5fa9ba3c-d580-aa11-ecb1-7f277b0afa02.png)

EBSには以下の４種類が存在します。
基本的に理由がなければ、汎用SSDを選択で大丈夫です。
それぞれ、容量や書き込みスピードなどが違います。
![img05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367456/b2490f18-84a6-d759-76bc-751b5da0fc54.png)

バックアップは後ほど説明するスナップショットで取得することができます。

##ENI（Elastic network interface）
仮想ネットワークインターフェイスの略で、EC2インスタンスなどにIPアドレスをアタッチすることができる機能です。
同じAZ内のインスタンスにアタッチ/デタッチができます。
EC2にはデフォルトでENIが付与されている。
一つのインスタンスに複数のENIを付与することができる。
このENIとインターネットゲートウェイが接続することで、Public subnetとインターネットが接続可能になる。
![img06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367456/55e7704d-e07d-22a2-05ab-658617e1584e.png)
この辺の知識はネットワークとも関係があるので、はVPCの記事でも紹介しています。
[https://qiita.com/a_goto/items/85e85095c1091c94bdc5](https://qiita.com/a_goto/items/85e85095c1091c94bdc5)

##スナップショット
EC2インスタンスをバックアップするには幾つかの方法がありますが、その中で最も手軽なのがスナップショットの作成です。

EBSを丸っとコピーしていると考えてもらえれば良いでしょう。 なお、繰り返してスナップショットを取得すると、差分を保存するようにできているため、1回目のスナップショット作成はやや時間がかかり、それ以降はあまり時間がかかなりような特性があります。
**スナップショットを作成する時は、インスタンスを停止することが推奨されています。**

これは、ファイルシステムが更新されている途中など、中途半端な状態でのスナップショットを作成してしまうと、復元時に問題が発生する可能性があるからです。 インスタンスを停止すれば安全にスナップショットが作成できます。
![img07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367456/b6eb6aeb-775b-b7b7-b069-5d62de8a0713.png)

###スナップショットを元にAMIを使ってバックアップを復元
AMIとスナップショットをマッピングさせて、どのスナップショットの状態のバックアップを使ってEC2を起動するか選べます。
マッピングしたスナップショットを元にAMIを使いEC2を起動し、EBSの状態を復元できます。
![img08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367456/fc3cc2fc-51ce-6b6d-0ae5-b7c6d7d9a3c6.png)

##User data
EC2が**初回起動**する際に実行するスクリプトのことです。
実行権限はrootユーザー権限で行われます。
![img09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367456/681a2480-3383-3ea1-619a-0cb54f05447b.png)

##EC2が作成されるまでのフロー
**AMIを使いOSを選択肢 → インスタンスタイプでスペックを選択 → EC2が起動 → EBS,ENIをアタッチ → User dataが実行される。**
![img10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367456/c3b0af18-8c70-9ff7-a428-0631161e0831.png)


##Instance meta data
インスタンスの中に埋め込まれたデータのことです。
Instance meta dataはターミナルなどのコマンドツールを使って確認することができます。
またAWS専用のコマンドも存在します。
※ただAWS専用コマンドを使うと余計なテキストが付随してくるため、プログラム内で実行すると、そのテキストを削除する処理が必要になるため、通常のコマンドで呼び出すほうが実務では推奨します。自分の目で確認したいだけなら、専用コマンドのほうが短いコマンドで実行できます。

**Instance meta dataの例)
・EC2のIPアドレス
・EC2のホストネーム
・EC2が使用しているAMIのID番号**

##キーペア
EC2へログインするための**秘密鍵と公開鍵のペア**のことです。
EC2にろぐいんするためにはAWSが管理する公開鍵と、ユーザー自身が保持しておく必要がある秘密鍵が必要になります。
秘密鍵と公開鍵を照合することで、EC2にログインすることができるため、ユーザーは秘密鍵を厳重に保存しておく必要があります。
この秘密鍵を他社に共有してしまったり、誰かにわかる場所に置いてしまうと、EC2に勝手にログインされてしまい、攻撃を受けたり、やりようによっては予期しない料金を課せられることにつながるため、絶対に他人に取得されないようにしましょう。
間違ってもgitなどでパブリックで公開したりしないようにしてください。過去にそういう事例もあったみたいです。