EC2　Webサーバーを構築しよう①

##はじめに
EC2を学ぶ上での備忘録として

#EC2とは
EC2とは「Amazon Elastic Compute Cloud」の略称で、AWSで利用できるシステムのひとつ。

伸縮性や弾力性を意味するElasticという言葉通り、ユーザーの必要に応じてスペックを変更できるのがEC2の魅力です。
継続利用時に起こりがちなスペック不足やディスク容量問題への対処も容易なコンピューティングキャパシティーであるため、長期的な運用も視野に入れることができます。

EC2では仮想サーバの事を「インスタンス」という単位で扱います。

インスタンスには様々な種類や性能のものがあるため、ユーザーの求める形で利用が可能です。
インスタンスを複数使って仮想サーバーを分割することで、可用性や信頼性を考慮した運用ができます。

インスタンスによって柔軟にWeb上のインフラ環境を構築することができるため、サーバーの増強が必要になった場合や、さらなる効率化を求めて改善が行われる際にも、対応がしやすく
インスタンスはコピーも削除も簡単に行えるので、スピーディな業務レベルを維持可能です。


###EC2のメリット
EC2のメリットは大きく分けて４つあります。

1. **簡単なスペック変更**
1. **従量課金によるコストメリット**
1. **スピーディな構築による時間短縮**
1. **冗長化も簡単に行える**

####簡単なスペック変更
EC2最大の魅力は、サーバースペックの簡単な変更機能にあります。
内容によって大きく変動する要求スペックに対して柔軟な変更が可能な点は、サーバーの運用において大きなメリットになります。
サーバーの追加・削除、マシンスペック変更は数分で可能です。
OSより上のレイヤについては自由に設定できます。

####従量課金によるコストメリット
EC2は基本的に従量課金制であるため、実際に利用した分に対して請求が行われます。
サーバー運用にかかるコストをカットしたいときには、不要なサーバーを停止するといった対応をすることで利用時のコストメリットが大きくなります。
数分で起動し、１時間または秒単位の従量課金です。

####スピーディな構築による時間短縮
ハードウェア設定が必要な物理サーバーなどを使う場合には、設定完了まで数日のタイムラグが発生することも珍しくありませんが、EC2によって構築されるシステムはわずか数分あれば立ち上げが完了します。

####冗長化も簡単に行える
仮想サーバーのテンプレート化や複製が容易であるため、事前に複数台数を用意することで安定したサーバー運用を実現できます。
冗長化によって負荷の分散を行ったり、システム上に障害が発生しても全体の環境を維持することが可能であるため、万が一に備えながらのサーバー運用が可能です。

#EC2の作成
###EC2の作成手順
1. **AMIの選択**
1. **インスタンスタイプの選択**
1. **ストレージの追加**
1. **セキュリティグループの設定**
1. **SSHキーペアの設定**

###AMIとは
AMIとはAmazon Machine Imageの略です。インスタンス（サーバー）起動に必要な情報が入ったOSのイメージ。
サーバーのテンプレートのようなもの。

###インスタンスタイプとは
サーバーのスペックを定義したものです。
インスタンスタイプにより、CPU、メモリ、ストレージ、ネットワーク帯域が異なります。
インスタンスタイプのスペックの違いにより料金が異なります。当然、スペックが高いほど料金も高くなります。
アクセス数などに応じて必要なスペックのあるインスタンスタイプを選択する必要があります。

###ストレージとは
サーバーにくっつけるデータの保存場所。EC2のストレージには２種類あります。
EBS(Elastic Block Store)とインスタンスストアです。

|EBS                  | インスタンスストア　　　　　　　　　　　　|
|---------------------|------------------------------------|
|高い可用性と耐久性を持つストレージ|インスタンス専用の一時的なストレージ|
|他のインスタンスに付け替え可能|他のインスタンスに付け替えができない　　|
|EC2インスタンスをStop/TerminateしてもEBSは保持可能|EC2インスタンスをStop/Terminateするとクリアされる|
|Snapshotを取得しS3に保存可能|                                  |
|EBSの費用が別途発生　　　　|追加費用なし（無料）　　　　　　　　　　　　|
|OSやDBなどの永続性や耐久性が必要なデータを置く|一時的ファイル、キャッシュなど消えても問題ないデータを置く|

##EC2を作ってみよう
それでは実際にEC2インスタンスを作成していきます。

###1.AMIの選択

[![Image from Gyazo](https://i.gyazo.com/b9898bbeeb7358c07d258d02d88b82f2.png)](https://gyazo.com/b9898bbeeb7358c07d258d02d88b82f2)

EC2を検索し、クリックします。

[![Image from Gyazo](https://i.gyazo.com/f8db3d32a11dbd54379b505bab1bf513.png)](https://gyazo.com/f8db3d32a11dbd54379b505bab1bf513)

EC2のページに移動しました。インスタンスをクリックします。

[![Image from Gyazo](https://i.gyazo.com/8409ad7ac8fbbbc19462d5da2fcdc899.png)](https://gyazo.com/8409ad7ac8fbbbc19462d5da2fcdc899)

インスタンスを起動をクリックします。

[![Image from Gyazo](https://i.gyazo.com/6bd83eca2e86f45b2376be4079807b7e.png)](https://gyazo.com/6bd83eca2e86f45b2376be4079807b7e)

まずはAMIを選択していきます。
クイックスタートや自分で作成したマイ AMIやサードパーティが作成したAWS Marcketplaceなどがありますが
今回はクイックスタートで作成していきます。

[![Image from Gyazo](https://i.gyazo.com/576fc265fe6b4693b2ec1a7dd4ec792d.png)](https://gyazo.com/576fc265fe6b4693b2ec1a7dd4ec792d)

一番上にあるAmazon Linux 2 AMIを選択します。

[![Image from Gyazo](https://i.gyazo.com/0392925ad456cf4a4afb38d4227ffb78.png)](https://gyazo.com/0392925ad456cf4a4afb38d4227ffb78)

選択するとインスタンスタイプの選択ページに遷移しました。 

###2.インスタンスタイプの選択

[![Image from Gyazo](https://i.gyazo.com/e079a1b5cad7a5de501de9ed58cb88e7.png)](https://gyazo.com/e079a1b5cad7a5de501de9ed58cb88e7)
今回は無料枠での利用を考えているためt2.microを選択して次のステップに進みます。

**インスタンスタイプの種類についてはこちら**
[AWS EC2 インスタンスタイプ](https://aws.amazon.com/jp/ec2/instance-types/)

[![Image from Gyazo](https://i.gyazo.com/0406cc56ae4e0f2875dc6e019287f5d5.png)](https://gyazo.com/0406cc56ae4e0f2875dc6e019287f5d5)

次にインスタンスタイプの詳細を決めていきます。

**インスタンス数**は起動するインスタンスの数です。今回は１にします。

**購入のオプション**はスポットインスタンスを使うかということですが、今回は使用しません。
[スポットインスタンスとは](https://aws.amazon.com/jp/ec2/spot/?cards.sort-by=item.additionalFields.startDateTime&cards.sort-order=asc)

**ネットワーク、サブネット**任意のものを指定します。

**自動割り当てパブリックIP**はインターネット経由でアクセスするグローバルIPアドレスをつけるかどうかを選択します。インターネットからアクセスできるようにしたいので、今回は有効を選択します。

**配置グループ**は複数のEC2インスタンス間の通信を高速化するグループです。今回はスルーします。

**キャパシティーの予約**はAWSではAZごとにリソースの上限が決まっていて、それを超えるとEC2インスタンスの起動ができなくなります。キャパシティの予約をしていると事前にリソースを確保してくれます。（別料金がかかります）
今回はチェックしません。

**IAMロール**はEC2インスタンスが他のAWSサービスと連携する際の権限を設定できます。
今回はなしにします。

**シャットダウン動作**はインスタンスをシャットダウンした時に停止状態で残すか、削除するかを設定します。
今回は停止で設定します。

[![Image from Gyazo](https://i.gyazo.com/30b41a75f5bd8daa4745253b7b18ffcf.png)](https://gyazo.com/30b41a75f5bd8daa4745253b7b18ffcf)

**終了保護の有効化**はインスタンスを誤って終了しないように保護することができます。有効になると、終了保護を無効にしない限り、API や AWS Management Console を使用してこのインスタンスを終了できなくなります。
本番環境では設定することがあるようですが、今回は違うため設定しません。

**モニタリング**は通常5分間隔で設定されているところを1分間隔にすることができる設定です。
厳密にする必要は今回はないので設定しません。

**テナンシー**はハードウェアを共有のものを使用するか専有するかの設定です。
今回は専有する必要はないので共有を選択します。

**Elastic Inference**は機械学習でGPUを使用する際に設定します。今回は使用しないのでチェックしません。

**クレジット仕様**は通常CPUには制限がかかっていて、制限よりも多く処理が必要な場合はバーストモードになり、CPUの性能を最大限利用できるようになります。クレジットがある内は利用できるのですが、クレジットを超える処理になると性能が低下してしまいます。それを制限なしにするかしないかの設定です。

[![Image from Gyazo](https://i.gyazo.com/d39260b37800af7e687d1a0970e1a106.png)](https://gyazo.com/d39260b37800af7e687d1a0970e1a106)

**ネットワークインターフェイス**はこのインスタンスにパブリックIPだけでなくプライベートIPをつけることができます。
ネットワークインターフェイスのプライマリIPにパブリックサブネットの範囲内のIPアドレスを指定します。

次のステップに進みます。

###3.ストレージの追加

[![Image from Gyazo](https://i.gyazo.com/a3e1b0d31382a66bb896a538b4d88d2b.png)](https://gyazo.com/a3e1b0d31382a66bb896a538b4d88d2b)

必要に応じてストレージを追加していきます。
**Amazon EBS（Amazon Elastic Block Storage）は長期間データを保存できますが、料金がかかりますので、必要に応じて追加します。**
無料利用枠では30GBまで使えます。30GBとして無料期間が終了した場合は、その分がそのまま課金されます。

**ボリュームタイプ**がルートになっているものはOSが入っているストレージです。

**デバイス**はEBSかインスタンスストアだと名前を設定できます。ルートの場合は自動で決まっています。

**スナップショット**はスナップショットは、S3 に保存された EC2 ボリュームのバックアップです。ルートの場合は自動で決まっています。

**サイズ**はボリュームのサイズです。ボリュームサイズは、0 または使用されるスナップショットのサイズ以上である必要があります。

**ボリュームタイプ**はルートかEBSの場合選択可能で、汎用SSDはその中で価格と性能のバランスが良いため、よく使用されます。
プロピジョンドSSDはデータベースなどに使用されます。
マグネティックはデバイスへの入出力があまりないときに使用します。

**スループット**は一秒間でのデータ転送速度です。

**終了時に削除はインスタンスを削除したときに一緒に削除するかを選択できます。
消し忘れによる課金を防止できます。

[![Image from Gyazo](https://i.gyazo.com/d20fd6efa36554d869c4db033cab3b8c.png)](https://gyazo.com/d20fd6efa36554d869c4db033cab3b8c)

次へ進みます。

[![Image from Gyazo](https://i.gyazo.com/e7614f90c00503a8f11668a756073c94.png)](https://gyazo.com/e7614f90c00503a8f11668a756073c94)

次にインスタンスに付与するタグを設定します。
この項目では作成するインスタンスにタグ付けし、他のインスタンスと区別することができます。

[![Image from Gyazo](https://i.gyazo.com/bf2b6f1e6def80015b11a7f4f71f3ae6.png)](https://gyazo.com/bf2b6f1e6def80015b11a7f4f71f3ae6)

EC2インスタンス起動後にマネジメントコンソールで探しやすいように、Nameタグのみ設定しておきます。「タグの追加」をクリックし、キーに「Name」、値に区別しやすいEC2インスタンス名を入力します。
次へ進みます。

[![Image from Gyazo](https://i.gyazo.com/2635f5e8f19ddfd60337c370f42c5d9a.png)](https://gyazo.com/2635f5e8f19ddfd60337c370f42c5d9a)

###4.セキュリティグループの設定

次はセキュリティグループの設定です。
セキュリティグループはEC2インスタンスの仮想ファイアウォールです。
必要に応じて設定します。

[![Image from Gyazo](https://i.gyazo.com/062b84f270d6815c22dfb32c73d30cc8.png)](https://gyazo.com/062b84f270d6815c22dfb32c73d30cc8)

設定できたら確認と作成をクリックします。

[![Image from Gyazo](https://i.gyazo.com/5fe49f1294e8c48cfdd5f47d969e36c5.png)](https://gyazo.com/5fe49f1294e8c48cfdd5f47d969e36c5)

設定内容を確認しましょう。
問題なければ起動ボタンをクリックします。

[![Image from Gyazo](https://i.gyazo.com/3fcff317ce1d1608fcef4419e7092ca3.png)](https://gyazo.com/3fcff317ce1d1608fcef4419e7092ca3)

するとキーペアの設定画面が開きます。

###5.SSHキーペアの設定

**キーペア**とはインスタンスにログインするための鍵のことです。
これがないとインスタンスにログインすることができません。
新しいキーペアを作成します。

[![Image from Gyazo](https://i.gyazo.com/2122a7f9147429a3aaf9b19f2e903395.png)](https://gyazo.com/2122a7f9147429a3aaf9b19f2e903395)

任意のキーペアの名前を記入します。

[![Image from Gyazo](https://i.gyazo.com/a41597a9f6a9a9c9b5cd2012d9e12e66.png)](https://gyazo.com/a41597a9f6a9a9c9b5cd2012d9e12e66)

キーペアのダウンロードをクリックします。

[![Image from Gyazo](https://i.gyazo.com/66e98c0d3688bcba0565b4ff145fce65.png)](https://gyazo.com/66e98c0d3688bcba0565b4ff145fce65)

ダウンロードされました。この鍵はもう一度ダウンロードはできないのでなくさないよう管理しましょう。

[![Image from Gyazo](https://i.gyazo.com/eeed1df634357dc8b3cf15f7e25e014e.png)](https://gyazo.com/eeed1df634357dc8b3cf15f7e25e014e)

次にインスタンスの作成をクリックします。

[![Image from Gyazo](https://i.gyazo.com/3b6db96043d9f1c1e28e44103ecc0ef5.png)](https://gyazo.com/3b6db96043d9f1c1e28e44103ecc0ef5)

作成ステータスの画面に遷移しました。

[![Image from Gyazo](https://i.gyazo.com/7ca011f87a81ea74b9dcbe2d04a43dd5.png)](https://gyazo.com/7ca011f87a81ea74b9dcbe2d04a43dd5)

インスタンスの表示をクリックします。

[![Image from Gyazo](https://i.gyazo.com/b5d79b55ed652c4c3cefcc420b66a435.png)](https://gyazo.com/b5d79b55ed652c4c3cefcc420b66a435)

インスタンスの作成ができました。
お疲れ様でした。

次回はキーペアでインスタンスにアクセスするなどをまとめていきます。


>参考サイト
[Rito Labo AWS EC2インスタンスを作成する（AMI:Amazon Linux / Amazon EBSの設定など）](https://www.ritolab.com/entry/17#Step_3_Set_instance_details)
[Qiita AWS EC2 インスタンスの作成](https://qiita.com/kanegoon/items/4bcdf5184cf1752eb44f)
[HACK NOTE AWSにEC2インスタンスを立ち上げよう](https://hacknote.jp/archives/41967/)
[Waf Charm 【EC2ってなに？】初心者でもわかる簡単 AWS 用語解説](https://www.wafcharm.com/blog/ec2-for-beginners/)
[AWS Column AWSのインスタンス作成手順7つ｜使う際のメリットや注意点も紹介](https://www.fenet.jp/aws/column/technique/208/)