AWSを使ってアプリケーションを公開する手順(2)EC2インスタンスの作成

# はじめに
AWSを使ってアプリケーションを公開する手順を記載していく。
この記事ではEC2インスタンスの作成方法を記載する。

# AWSアカウントのリージョンを設定する
リージョンはAWSの物理的なサーバの場所で、世界各地に存在する。
EC2を作成するにあたり、どのリージョンにEC2インスタンスを作成するか指定する必要がある。
今回は「アジアパシフィック(東京)」を選択する。
![01_AWSリージョン設定スクショ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654714/389a8ffa-8b3d-1df2-8fe9-fad292755e49.png)

# EC2インスタンスを作成する
画面左上の「サービス」をクリックするとサービスの一覧が表示されるので、
「コンピューティング」の「EC2」をクリックする。
![02_EC2をクリックスクショ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654714/b8d02187-af28-b18d-58ed-07c3319addbe.png)

画面左上の「New EC2 Experience」をOFFにすると旧バージョンの操作画面に切り替えられる。
今回は旧バージョンの操作画面で進めていく。
![03_操作画面切り替えスクショ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654714/fd22772a-faf6-eb42-491b-215261248a56.png)

旧バージョンの操作画面に切り替えるとコンソールに対するフィードバックのウィンドウが表示されるが「キャンセル」をクリック。(もちろんフィードバックがあればしてもよい)
![04_コンソールに対するフィードバックスクショ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654714/d41a7616-197e-1428-af3a-dab3031cb5ab.png)

「インスタンスの作成」をクリックする。
![05_インスタンスの作成スクショ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654714/2302b358-a6b0-3284-7c38-dd7513821174.png)

## AMI(Amazon Machine Image)の選択
AMIにはインスタンスの起動に必要なデータが含まれている。
つまり、インスタンスを起動するためにはAMIを指定する必要がある。
今回は「Amazon LINUX AMI」を選択する。
![06_AMI選択スクショ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654714/8a2b21a5-7470-8210-165b-c6f44a498066.png)

## EC2インスタンスタイプの選択
EC2インスタンスにはいくつかタイプが用意されておりそれぞれCPUやメモリなどのスペックが異なる。
今回は「t2.micro」にチェックを入れ「確認と作成」をクリックする。
![07_インスタンスタイプの選択スクショ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654714/bd8baacc-8df8-693e-982f-59eb27c504cc.png)

## EC2インスタンスの起動
EC2インスタンス作成確認画面に遷移するので「起動」をクリックする。
![08_インスタンス作成確認画面スクショ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654714/e15269f0-dec2-8f0c-c770-6e2a90fbc2c9.png)

## キーペアのダウンロード
キーペアはインスタンスにSSHでログインする際に必要となる秘密鍵である。
プルダウンを「新しいキーペアの作成」に変更し、任意のキーペア名を入力する。(スペースは不可)
入力したら、「キーペアのダウンロード」をクリックし保存する。
ダウンロードが完了すると、「インスタンスの作成」ボタンが有効になるのでクリックする。
![09_キーペアのダウンロードスクショ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654714/7b5553dc-8a7b-6433-766c-2d5c35b502c5.png)

# ElasticIPの作成と割り当て
EC2インスタンスには作成時にパブリックIPアドレスが自動で割り振られている。しかし、サーバを再起動する度にこのパブリックIPが変わってしまう。
これを解決するためにElasticIPを利用する。ElasticIPはAWSより割り振られる固定のパブリックIPアドレスのことで、これをEC2インスタンスに紐付けることで常に同じIPアドレスで通信をすることが可能になる。

## ElasticIPを取得する
画面左側のメニューからElasticIPを選択する。
![11_ElasticIPメニュースクショ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654714/a05e5bee-2241-5f00-d488-6f427a4e8679.png)

「新しいアドレスの割り当て」をクリックする。
![12_アドレス割り当てスクショ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654714/a2f35fc5-119d-3bd6-8215-9aa17ecb6534.png)

ラジオボタンで「Amazonプール」を選択し「割り当て」をクリックする。
![13_Amazonプール選択スクショ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654714/534e439a-230f-11f4-1dd4-2f78e17c4f6f.png)

これでElasticIPが割り当てられるので確認して「閉じる」をクリック。
![14_アドレス確認画面スクショ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654714/a863761f-ee8c-a140-8055-659f6e9554e5.png)

「アクション」のプルダウンをクリックし、「アドレスの関連付け」をクリックする。
![15_アクション選択スクショ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654714/62a48622-ff12-7db8-9f90-7569f49b31a2.png)

プルダウンで作成したインスタンスを選択。
プライベートIPは空欄でOK。
「関連付け」をクリック。
![16_アドレスの関連付けスクショ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654714/7c09d8ec-08e3-1e02-180b-96e4750d06a3.png)

アドレスの関連付けが成功したら画像のページに遷移するので「閉じる」をクリック。
![17_アドレス関連付け完了スクショ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654714/d1ca9b13-dd2e-a682-e2ee-2a1640ef17c1.png)

# ポートを開放する
現状、EC2インスタンスにSSHでアクセスすることはできるが、HTTPなどの他の接続は一切繋がらない。EC2インスタンスをWEBサーバとして利用するため、HTTPで繋げるようにポートを開放する。

## セキュリティグループのポートを設定する
セキュリティグループはEC2インスタンスの仮想ファイアウォールとして機能し、送受信トラフィックの制御を行う。
セキュリティグループのポート設定を行う。

EC2インスタンス一覧画面から対象のインスタンスを選択しセキュリティグループのリンクをクリックする。
![18_セキュリティグループリンクスクショ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654714/aa3b54de-9728-d3fa-45ee-4ee48b723dcc.png)

セキュリティグループの設定画面に遷移するので、「インバウンド」タブを選択し「編集」をクリック。
![19_インバウンド編集スクショ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654714/077c0f42-9e6d-bce2-9f8c-41960b291315.png)

次のような画面が出てくるので「ルールの追加」をクリック。
タイプは「HTTP」、プロトコルは「TCP」、ポート範囲は「80」、ソースは「カスタム、0.0.0.0/0, ::0」と入力し「保存」をクリックする。
![20_ルール追加スクショ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654714/8e1d1b8a-6529-4bf4-a4c6-60a91df839ce.png)

# EC2インスタンスにSSHでアクセスする

## ホームディレクトリに「.ssh」という名前のディレクトリを作成する
ターミナルを起動して以下のコマンドを実行する。(すでに存在する場合はパスしてOK)

```
mkdir ~/.ssh
```

## ダウンロードしたpemファイルを「.ssh」ディレクトリに移動する
以下のコマンドを実行して前章でダウンロードしたpemファイルを先ほど作成した「.ssh」ディレクトリに移動する。

```
mv Downloads/xxx.pem ~/.ssh/
```

(前章でpemファイルをダウンロードした際、「Downloads」ディレクトリに「xxx.pem」という名前で保存している場合。)

## 「.ssh」ディレクトリに移動する
下記コマンドを実行し「.ssh」ディレクトリに移動する。

```
cd ~/.ssh/
```

下記コマンドを実行しpemファイルが「.ssh」に保存されていることを確認する。

```
ls
```

## pemファイルの権限を変更する
下記のコマンドを実行してpemファイルの権限を変更する。

```
chmod 600 xxx.pem
```

### なぜ600なのか？
chmodはパーミッション(ファイルやディレクトリのアクセス権)を変更するコマンドである。
三桁の数字でパーミッションを指定する。三桁の数字は左から順に所有者、グループ、その他の権限を表す。
次にそれぞれの数字の意味であるが、1,2,4のそれぞれの数字には以下のような意味があり、これらの組み合わせによって0〜7の数字が設定できる。

- 読み込みができる＝4
- 書き込み、変更ができる＝２
- 実行ができる＝１

今回pemファイルに与える権限は、所有者が読み書きができ、グループ・その他は何もできない設定にしたいので、「600」を指定する。

## ssh接続
以下のコマンドを実行してEC2インスタンスにsshでアクセスする。
(ダウンロードしたpemファイル名が「xxx.pem」、ElasticIPが12.345.67.890の場合)

```
ssh -i xxx.pem ec2-user@12.345.67.890
```

# 参考
[AMIとは](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/AMIs.html)
[セキュリティグループとは](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-security-groups.html)

# 関連記事
[AWSを使ってアプリケーションを公開する手順(1)AWSアカウントの作成](https://qiita.com/osawa4017/items/78ee5912084dd83c5a0d)
[AWSを使ってアプリケーションを公開する方法(3)EC2インスタンスの環境構築]
(https://qiita.com/osawa4017/items/8dc09203f84e04bf0e66)
[AWSを使ってアプリケーションを公開する手順(4)データベースの作成]
(https://qiita.com/osawa4017/items/7dba25f4fa30ab0b1246)
[AWSを使ってアプリケーションを公開する手順(5)アプリケーションを公開する]
(https://qiita.com/osawa4017/items/6f3125fcc21f73024311)
[AWSを使ってアプリケーションを公開する手順(6)Nginxを導入する]
(https://qiita.com/osawa4017/items/9b707baf6ddde623068c)