AWSのEC2へのデプロイ①(EC2インスタンス作成からログインまで)

AWSのEC2へのデプロイをしたいと思い備忘録のために手順を記録します。
初学者の為、ご指摘等ありましたらご連絡いただければ幸いです。

今回は`EC2インスタンスの作成`をします。
EC2インスタンス作成が2つ目以降の方は無料枠から外れてしまうので気をつけましょう。
[こちら](https://qiita.com/mumucochimu/items/dd5728dc9a74b1545a01)でインスタンスを削除する方法をまとめてあるのでよろしければご参照ください。

今回の内容は使っている言語による違いはないと思います。

## 前提条件

- AWSアカウントを作成ずみであること


## ログインとリージョンの確認

1. [こちら](https://aws.amazon.com/jp/)から下記画像のように`コンソールにサインイン`を押下しログインします。
![スクリーンショット 2021-02-13 14.06.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1051152/fd3fba01-43d5-bc2a-358f-91b1133ca46c.png)

2. ログインしたら下記画像のように右上のところからリージョンを`東京`に変更します。
![スクリーンショット 2021-02-13 14.07.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1051152/a6441932-aaff-58d8-3a74-0aed3aa5ba37.png)


## EC2インスタンスの作成

### EC2とは?
AWSで「仮想マシン」と呼ばれるもの。サーバーを生成するに当たってAWSがすべてのサーバーを物理的に用意しているわけではなく、「仮想マシン」と呼ばれるソフトウェアを利用して仮想的に1つのLinuxサーバーを利用できる仕組みです。

では作成していきます。

1.下記画像のように`EC2`を選択します。
![スクリーンショット 2021-02-13 14.32.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1051152/e8ecee1c-e954-8dd3-befd-ab4fae9ce8a5.png)


2.下記画像のように`インスタンスを起動`を押下し、プルダウンで出てきた`インスタンスを起動`を押下します。
![スクリーンショット 2021-02-13 14.36.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1051152/2e14c444-e7aa-adc4-c2ea-487147f5617a.png)

3.AMIを選択します。
AMIとは「Amazon Machine Image」の略で、サーバーのデータをまるごと保存したデータのこと。自分でゼロから様々なツールをインストールする手間を削減できます。

今回は無料枠の対象である`AmazonLinux2AMI(HVM),SSDVolumeType`を利用します。AWSが独自に開発したAMIみたいです。

下記画像のように`64 ビット (x86)`が選ばれていることを確認した上で`選択`を押下します。
![スクリーンショット 2021-02-13 14.44.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1051152/383f8692-071a-b804-f160-95f03fb0fc1b.png)

4.下記画像のように無料枠の対象である`t2.micro`が選ばれていることを確認した上で`確認と作成`を押下します。
![スクリーンショット 2021-02-13 14.52.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1051152/c666c1e3-47a9-5a83-aed2-7dd2a17ec807.png)

5.下記画像のように`起動`を押下します。
![スクリーンショット 2021-02-13 14.55.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1051152/3dc95a03-28d6-457c-c9cc-9a320c5727c9.png)

6.キーペアを作成します。
キーペアとは、インスタンスへログインする際に必要となる`秘密鍵`のこと。
これがないとEC2インスタンスにログインできないので、必ずダウンロードしてPCに保存してください。`秘密鍵`ですので誰かに知られてはいけません。

下記画像のような画面になるので
①新しいキーペアの作成を選択
②ご自身でキーペア名を入力
③キーペアのダウンロードを押下
④インスタンスの作成を押下
をします。
![スクリーンショット 2021-02-13 15.19.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1051152/dd0b5609-af6b-16aa-d0ab-037daa34baa1.png)

7.下記画像のようになるので`インスタンスの表示`をクリックします。
![スクリーンショット 2021-02-13 15.29.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1051152/8dcf1e67-e047-bce5-9b61-44374286cf4f.png)

8.インスタンス一覧に遷移するので下記画像のように実行中インスタンスのIDを押下します。
![スクリーンショット 2021-02-13 16.15.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1051152/8be49ee1-597d-6fd1-7571-484f5bbe6ea4.png)

9.下記画像の画面になるのでインスタンスIDをコピーしてメモしておきましょう。
![スクリーンショット 2021-02-13 16.19.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1051152/b8e08448-8c0f-abed-98f8-451a2a691226.png)


## Elastic IPアドレスの紐付け

### Elastic IPアドレスとは?
AWSから割り振られた固定の「パブリックIPアドレス」のこと。
これを紐付けしておかないとサーバー再起動のたびにIPが変わってしまい、設定ファイルを変更しなければいけなくなります。Elastic IPアドレスであれば常に同じIPアドレスで通信できます。

1.下記画像のように左のメニューから`Elastic IP`を選択し、その後`Elastic IPの割り当て`を押下します。
![スクリーンショット 2021-02-13 16.27.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1051152/767247c6-fc39-4996-b43e-e1dffd07ba67.png)

2.下記画像のように`Amazon の IPv4 アドレスプール`が選択されていることを確認し`割り当て`を押下します。
![スクリーンショット 2021-02-13 16.31.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1051152/5acb9695-c581-b934-53f4-aa179ea6a823.png)

3.EC2インスタンスとの紐付けをします。
下記画像のように`アクション`を押下し、出てきたプルダウンから`Elastic IP アドレスの関連付け`を選択します。
![スクリーンショット 2021-02-13 16.35.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1051152/d3c8b3e8-ed0e-3590-3a27-860c1f2aceb0.png)

4.下記画像のように`インスタンス`が選択されていることを確認した上で、
その下の`インスタンス`の枠を押下すると先ほど作成したインスタンスIDがプルダウンで出てくるので選択し`関連付ける`を押下します。
![スクリーンショット 2021-02-13 16.40.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1051152/d25b0cad-a1d7-e7cf-40af-56af1d87e6ef.png)

5.きちんと設定できているか確認します。
下記画像のように左のメニューから`インスタンス`を選択しインスタンスIDを押下すると、その下に画面が出てくるので割り当てられていれば`Elastic IP アドレス`のところに表示されています。
![スクリーンショット 2021-02-13 16.57.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1051152/cee8f51b-7d21-8fd7-dbba-63ccf6a8334f.png)


## EC2インスタンスの設定を変更する

今のままだとsshでのアクセスしかできないのでHTTPでもできるように設定を変更します。

1.セキュリティグループのポートを設定します。
下記画像のように、先ほどのインスタンスの画面の下部から`セキュリティ`タブを選択し`セキュリティグループ`の青い文字を押下します。
![スクリーンショット 2021-02-13 17.08.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1051152/7e5c8a96-09ec-aa27-8fac-a76923e68d2e.png)


2.下記画像のように`インバウンドルール`のタブの`インバウンドルールを編集`を押下します。
![スクリーンショット 2021-02-13 17.20.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1051152/12aa3e19-a746-7f60-e8eb-83657fa128d2.png)

3.下記画像の手順でルールを追加し保存してください。
sshは消さないよう注意してください。
![スクリーンショット 2021-02-15 9.56.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1051152/aac65821-1a5a-5c5e-55cf-e9f6694a7245.png)



## EC2インスタンスへログインする

今後EC2にパッケージのインストールなどをする際、ログインが必要になります。
ターミナルで作業を行っていきます。

1.下記コマンドでホームディレクトリに移動します。

```PHP:ターミナル
% cd ~
```

2.下記コマンドで`ssh`をいうファイルを作成します。
既に作成したことがある場合は`File exists`というエラーが出ますが問題ありません。
そのまま続けていきます。

```PHP:ターミナル
% mkdir ~/.ssh
```

3.下記コマンドでダウンロードしたpemファイルを`ダウンロードディレクトリ`から`.sshディレクトリ`に移動します。
キーペアの名前を忘れてしまっていたらダウンロードディレクトリにダウンロードされている`~.pem`というファイル名があるので確認してください。

```PHP:ターミナル
% mv Downloads/キーペアの名前.pem .ssh/
```

4.下記コマンドで`.ssh`フォルダに移動します。

```PHP:ターミナル
% cd .ssh/
```

5.念のため、下記コマンドで`~.pem`ファイルが存在するか確認します。

```PHP:ターミナル
% ls
```

6.下記コマンドで権限を変更します。
権限とchmodコマンドについては[こちら](https://qiita.com/ntkgcj/items/6450e25c5564ccaa1b95)の記事が分かりやすかったです。ありがとうございます。

```PHP:ターミナル
chmod 600 キーペアの名前.pem
```

7.下記コマンドでログインします。

```PHP:ターミナル
ssh -i キーペアの名前.pem ec2-user@作成したEC2インスタンスと紐付けたElastic IP
```

`作成したEC2インスタンスと紐付けたElastic IP`は下記画像の手順で確認できます。

![スクリーンショット 2021-02-13 18.07.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1051152/ff8e97bb-7fda-f301-9716-dc46fa07d106.png)


8.下記のようなメッセージが出たら`yes`と入力します。

```PHP:ターミナル
Are you sure you want to continue connecting (yes/no)?
```

9.以下のように表示されればログイン完了です。

```PHP:ターミナル
Warning: Permanently added '54.×××' (ECDSA) to the list of known hosts.

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
```

ログイン後はターミナルが下記のようになると思います。

```PHP:ターミナル
[ec2-user@ip-×××-××-××-××× ~]$ 
```

一定時間立つとタイムアウトしますが、再度`ssh -i キーペアの名前.pem ec2-user@作成したEC2インスタンスと紐付けたElastic IP`でログインできます。


以上です。