【Node.js】LINE MessageAPIで作った天気予報アプリをAWSでデプロイしてみる！

先日、Node.jsでアプリを天気予報アプリを作成しました。

https://qiita.com/Ryo9597/items/bf93618663f28e9d8f7f

この記事内ではデプロイは、`Glitch`を使いました。

https://glitch.com/

まぁ無料なわけで色々問題があります。
・プロジェクトは、利用されていないときは5分でスリープ状態になる
・4000件/1hのリクエスト制限がある(Error: 429 too many requests)

ということでAWSにデプロイすることにします。
それではアーキテクチャに関してみていきましょう。

## アーキテクチャ

![Architecture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/479f319c-9032-4137-65d3-3aa6a37b9b5d.png)


ちなみにAWSのアーキテクチャなどを作るときは、`drawio`がおすすめです。
VSCodeから使えるので是非使ってみてください。

https://github.com/hediet/vscode-drawio

## ハンズオン
### 1. AWSへログイン

### 2. 東京リージョンになっていることを確認
![スクリーンショット 2021-05-01 14.21.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/73a9450b-47d7-5c13-54a7-e5e882db1e49.png)

### 3. VPCを作成（IP：10.0.0.0/21）
■ルート
コンソールで「VPC」と検索→左ペイン内の「VPC」を選択→「VPCを作成」を選択

![スクリーンショット 2021-06-22 9.05.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/4ca220d3-2a89-48a0-7c7f-a2eb828ecf91.png)

### 4. サブネットを作成（IP:10.0.0.0/24, 10.0.1.0/24）
■ルート
コンソールで「VPC」と検索→左ペイン内の「サブネット」を選択→「サブネットを作成」を選択

#### Public Subnetを作成（IP:10.0.0.0/24, 10.0.1.0/24)
Node.jsで使うサブネットを作成します。

![スクリーンショット 2021-06-22 9.06.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/c927c9cd-cf64-7451-0125-56af2b136eb6.png)

![スクリーンショット 2021-06-22 9.07.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/3ab2d1c1-9a9d-b9cb-36cc-749a40a46f38.png)

### 5. Publicサブネットをインターネットに接続するためにInternet Gatewayを作成しアタッチする
■ルート
コンソールで「VPC」と検索→左ペイン内の「インターネットゲートウェイ」を選択→「インターネットゲートウェイの作成」を選択

![スクリーンショット 2021-06-22 9.07.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/46961b51-16df-565d-3445-de1e77441d35.png)

**「VPCへアタッチ」**をクリックする

![スクリーンショット 2021-06-22 9.08.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/69c3e6e2-7e53-b82d-fe17-1e2d6d3f41f5.png)

作成したVPCにアタッチします。

![スクリーンショット 2021-06-22 9.10.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/4213bcb3-1392-b839-0d6c-d3c6dff37d81.png)

### 6. EC2がインターネット接続するためにルートテーブルを作成
■ルート
コンソールで「VPC」と検索→左ペイン内の「サブネット」を選択→「Node-Pub-1」を選択→「ルートテーブル」を選択→「ルート」へ移動→「ルートを編集」を選択

![スクリーンショット 2021-06-22 9.11.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/ff24ec2c-8582-d15a-8391-ea2ebd9d21f9.png)

### 7. Publicサブネット内にEC2を構築
■ルート
コンソールで「EC2」と検索→左ペイン内の「インスタンス」を選択→「インスタンスを起動」を選択

#### ■ステップの流れ
##### ①**Amazon Linux 2 AMI (HVM), SSD Volume Type**を選択
##### ②**t2.micro**を選択
##### ③インスタンスの詳細の設定の、`ネットワーク`, `サブネット`, `自動割り当てパブリックIP`を変更
![スクリーンショット 2021-06-22 9.14.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/108b22fa-87df-0f7e-eaaf-b97794266402.png)
##### ④ストレージはそのままでOK
##### ⑤キーを`Name`で追加（値は任意でOK）
![スクリーンショット 2021-06-16 13.15.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/b70592c2-3eaf-4604-e050-d139546edced.png)
##### ⑥セキュリティーグループを変更
Node.jsは、TCPの3000番ポートでリクエストを受けるので、Security Groupに追加します。
![スクリーンショット 2021-06-22 9.16.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/1713776b-8bee-f894-3a37-8e5bb8bdd446.png)
##### ⑦キーペアの作成
私は事前に作成しているキーペアがあるのでそちらを使います。
このキーペアは`desktop`にでも保存しておきましょう。
![スクリーンショット 2021-06-16 13.17.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/d426e29d-5932-46e7-abb5-6cfc32557698.png)

以前書いたEC2の記事です。
基本的な内容になっているのでEC2ってなんやねんって方は見てもらえると！

https://qiita.com/Ryo9597/items/342cf2037878e4ef782c

### 8. EC2のIPアドレスを固定するために`Elastic IP`を導入する
IPアドレスを固定する理由としては、インスタンスを再起動しても同じIPアドレスに固定しておきたいためです。

通常、インスタンスを再起動するとIPアドレスが変わってしまいます。
それでは再起動する度にSSH接続の設定を変えないといけないため、IPアドレスを固定します。

ちなみに、Elastic IPは関連づけを行わなければ費用が発生します。
その点はご注意ください。

■ルート
コンソールで「EC2」と検索→左ペイン内の「Elastic IP」を選択→「Elastic IPアドレスの割り当て」を選択

![スクリーンショット 2021-06-22 9.20.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/2dc97691-0926-b031-85bb-0540136f6be1.png)

作成できたら次は関連づけを行います。

![スクリーンショット 2021-06-22 9.20.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/90427d9a-8814-8f1f-45f6-985404521fd6.png)

![スクリーンショット 2021-06-22 9.21.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/e44067a0-3088-f402-551d-515c96420217.png)

### 9. SSH接続でログイン
ターミナルを開きましょう。

```terminal:ターミナル
// ①キーペアがあるところへ移動
$ cd desktop

// ②キーペア発見
$ ls -l Keypair.pem
-rw-r--r--@ 1 ryo  staff  1704  5  1 14:38 Keypair.pem

// ③権限を４００に変更
$ chmod 400 Keypair.pem

// ④SSH接続
$ ssh -i Keypair.pem ec2-user@(パブリックIPアドレス)

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

これでEC2にログインできました。
それでは動作するために必要なものをまとめてみましょう。
<ul>
<li>**パッケージのアップデート**</li>
<li>**g++コンパイラのインストール**</li>
<li>**Gitのインストール**</li>
<li>**nvmのインストール**</li>
<ul>
<li>nvmのダウンロード</li>
<li>nvmのパスを通す</li>
<li>nvmコマンドのパス設定</li>
</ul>
<li>**Node.jsをインストールする**</li>
<li>**GitHubからソースコードをクローン**</li>
<ul>
<li>環境設定ファイルの準備</li>
<li>node_modulesなどをダウンロード</li>
<li>インスタンスが起動したら自動的にアプリケーションが起動するようにする</li>
</ul>
</ul>

結構やることは多いですがそんなに難しくないので頑張りましょう！

#### パッケージのアップデート
まずはパッケージのアップデートを以下のコマンドで行います。

```terminal:ターミナル
$ sudo yum update -y
```

#### g++コンパイラのインストール
Nodeモジュールのコンパイルなどに使います。

```terminal:ターミナル
$ sudo yum -y install gcc-c++
```

#### Gitのインストール
後述するnvmのインストールや、リポジトリのダウンロードに使います。

```terminal:ターミナル
$ sudo yum -y install git
```

#### nvmのインストール
##### nvmのダウンロード
Githubからnvmをクローンします。

```terminal:ターミナル
$ git clone https://github.com/creationix/nvm.git ~/.nvm
```

##### nvmのパスを通す
これでどこからでも`nvm`が使えるようになります。（しかし後述の作業をしなければ毎回SSH接続するたびこの作業が必要になります）

```terminal:ターミナル
$ source ~/.nvm/nvm.sh
```

##### nvmコマンドのパス設定
このままだとログアウトすると、nvmへのパスがリセットされます。
つまりnvmコマンドが使用できなくなり、その度にパスを通す必要があります。
そこで、Linuxにログインしたときに実行される`.bash_profile`に設定をします。

```terminal:ターミナル
$ vi .bash_profile
```

以下のテキストを追記してください。

```shell
# nvm
if [[ -s ~/.nvm/nvm.sh ]] ; then
    source ~/.nvm/nvm.sh ;
fi
```

`vim`初心者の方はこちらの記事で操作方法を確認してください。

https://qiita.com/tomoya1993/items/7b7dfffd3553e55601ef

#### Node.jsをインストールする
まずはインストール可能なNode.jsのバージョンを確認しましょう。

```terminal:ターミナル
$ nvm ls-remote
(省略)
v14.14.0
v14.15.0   (LTS: Fermium)
v14.15.1   (LTS: Fermium)
v14.15.2   (LTS: Fermium)
v14.15.3   (LTS: Fermium)
v14.15.4   (LTS: Fermium)
v14.15.5   (LTS: Fermium)
v14.16.0   (LTS: Fermium)
v14.16.1   (LTS: Fermium)
v14.17.0   (LTS: Fermium)
v14.17.1   (Latest LTS: Fermium)
v15.0.0
(省略)
```

2021年6月22日現在の最新のLTSは`v14.17.1`ということなのでこちらを使います。
ではインストールしましょう！

```terminal:ターミナル
$ nvm install 14.17.1
Downloading and installing node v14.17.1...
Downloading https://nodejs.org/dist/v14.17.1/node-v14.17.1-linux-x64.tar.xz...
######################################################################### 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v14.17.1 (npm v6.14.13)
Creating default alias: default -> 14.17.1 (-> v14.17.1)
```

では使用するバージョンの指定を行います。

```terminal:ターミナル
$ nvm use v14.17.1
Now using node v14.17.1 (npm v6.14.13)
```

最後に確認作業を行います。

```terminal:ターミナル
$ node -v
v14.17.1
```

#### GitHubからソースコードをクローン

```terminal:ターミナル
// GitHubからソースコードをクローンをする準備
// ディレクトリを作成して移動する
$ sudo mkdir /var/www
$ cd /var/www

// アクセス権限を変更
$ sudo chmod 777 .

// GitHubからソースコードをクローン
$ git clone https://github.com/ssk9597/LINE-Node-Weather.git

// アクセス権限を変更して誰でも書き込みできないようにする
$ sudo chmod 0755 .
```

この後は`.env`や`node_modules`のダウンロードなどを行います。
なのでディレクトリの移動をしましょう。

```terminal:ターミナル
[ec2-user@ip-10-0-0-61 www]$ cd LINE-Node-Weather
```

##### 環境設定ファイルの準備
`.env.example`の値は仮なので`.env`の値は修正しましょう。

```terminal:ターミナル
// .env
[ec2-user@ip-10-0-0-61 LINE-Node-Weather]$ cp .env.example .env
[ec2-user@ip-10-0-0-61 LINE-Node-Weather]$ vi .env
```

##### node_modulesなどをダウンロード
GitHubからクローンしても`node_modules`は付属してきません。
その理由としてはそもそもnode_modulesはパッケージの根幹機能がまとまったディレクトリになります。

そのため、バージョンが同じであれば同じ内容になります。
しかも容量が大きいためGitHubにアップロードするのは非効率です。

なので個別にダウンロードする必要があります。

```terminal:ターミナル
[ec2-user@ip-10-0-0-61 LINE-Node-Weather]$ npm install
```

##### インスタンスが起動したら自動的にアプリケーションが起動するようにする
Node.jsのアプリを起動するには、`node api/index.js`を実行する必要があります。
しかしこれだとサーバーに接続した状態じゃなければサーバーが止まってしまいます。
なので、PM2というプロセスマネージャーを利用してアプリの自動起動を行いましょう。

https://pm2.keymetrics.io/

簡単にPM2の説明をしておきます。
PM2はKeymetrics社によって開発が行われているNode.jsアプリケーションのプロセス管理を行うためのオープンソースです。
プロセスをデーモン化し、シェルを抜けてもアプリケーションが終了していた、ということが起きなくなります。

PM2は、PayPal、Microsoft、IBM、SOUTHWEST.COMなどのアプリケーションの１部で利用されているようです。

```terminal:ターミナル
// PM2のインストール
[ec2-user@ip-10-0-0-61 LINE-Node-Weather]$ npm install pm2@latest -g

// api/index.jsでアプリケーションの開始
[ec2-user@ip-10-0-0-61 LINE-Node-Weather]$ pm2 start api/index.js
```

###### 起動時にスクリプトやアプリケーションを自動的に開始する
PM2はスタートアップスクリプトを生成することで、マシンの再起動時にスクリプトやアプリケーションを自動的に開始することができます。

https://pm2.keymetrics.io/docs/usage/startup/

```terminal:ターミナル
// スタートアップスクリプトを作成
[ec2-user@ip-10-0-0-61 LINE-Node-Weather]$ pm2 startup
[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/home/ec2-user/.nvm/versions/node/v14.17.1/bin /home/ec2-user/.nvm/versions/node/v14.17.1/lib/node_modules/pm2/bin/pm2 startup systemd -u ec2-user --hp /home/ec2-user

// 上記で出力されたコマンドをコピーして実行
[ec2-user@ip-10-0-0-61 LINE-Node-Weather]$ sudo env PATH=$PATH:/home/ec2-user/.nvm/versions/node/v14.17.1/bin /home/ec2-user/.nvm/versions/node/v14.17.1/lib/node_modules/pm2/bin/pm2 startup systemd -u ec2-user --hp /home/ec2-user

// プロセスリストを確認しましょう
[ec2-user@ip-10-0-0-61 LINE-Node-Weather]$ pm2 list
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name               │ mode     │ ↺    │ status    │ cpu      │ memory   │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0  │ index              │ fork     │ 0    │ online    │ 0%       │ 43.0mb   │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘
```

これで、EC2インスタンスを再起動したら、自動的にスクリプトが実行されます。
自分自身の「パブリックIPv4アドレス」に書き換えて下記にアクセスしてみましょう。

http://18.182.172.116:3000/

![スクリーンショット 2021-06-17 9.22.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/3c206152-9b4d-5ca2-e65b-982fc393830d.png)

となれば成功です。

### 10. AMIの作成
今回は冗長化されたウェブサービスを作るので上記と同じ内容のEC2インスタンスを作る必要があります。
しかし、またゼロからポチポチするのもめんどくさいので、上記で作ったEC2インスタンスからコピーしましょう。
その仕組みをAMIと言います。

作成した**001-LINE-Weather**を停止してAMIを作成します。

■ルート
コンソールで「EC2」と検索→左ペイン内の「インスタンス」を選択→「インスタンスの状態」から停止を選択
コンソールで「EC2」と検索→左ペイン内の「インスタンス」を選択→「アクション」から「イメージを作成」を選択

![スクリーンショット 2021-06-22 9.32.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/d22f9f5c-cc59-018c-a573-05c368dc4da6.png)

`AMI`のステータスが`available`になるまで待ちます。

![スクリーンショット 2021-06-22 9.35.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/3966c4cd-6833-7985-5e13-3f674956cb7f.png)

### 11. 作成したAMIを使ってインスタンスを作成
■ルート
コンソールで「EC2」と検索→左ペイン内の「インスタンス」を選択→「インスタンスを起動」を選択

#### ■ステップの流れ
##### ①**作成したAMI**を選択
![スクリーンショット 2021-06-22 9.37.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/578ff7bf-c1d8-b8ad-ebff-9fe41ec60df7.png)
##### ②**t2.micro**を選択
##### ③インスタンスの詳細の設定の、`ネットワーク`, `サブネット`, `自動割り当てパブリックIP`を変更
![スクリーンショット 2021-06-22 9.39.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/b12b8799-22e5-3a8a-0085-4668460e640d.png)
##### ④ストレージはそのままでOK
##### ⑤キーを`Name`で追加（値は任意でOK）
![スクリーンショット 2021-06-22 9.41.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/8948a02a-faa3-e902-e976-3f0abcb5f4d2.png)
##### ⑥セキュリティーグループを変更
![スクリーンショット 2021-06-22 9.41.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/9959a730-f301-6345-e9b2-bfa02d8df88d.png)
##### ⑦キーペアの作成
先ほど使ったキーペアにしましょう。
![スクリーンショット 2021-06-22 9.43.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/b1207cf0-badb-0777-ad4d-ed78202c386c.png)

### 12. EC2のIPアドレスを固定するために`Elastic IP`を導入する
新しく作成したEC2インスタンスの**002-LINE-Weather**に`Elastic IP`を導入しましょう。
上記でやったことを繰り返すだけなので省略します。

先ほど停止した**001-LINE-Weather**も再起動し以下のようになれば完了です。

![スクリーンショット 2021-06-22 9.45.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/09a5c2e1-d15d-93de-f731-7fd8618ef2f9.png)

### 13. ロードバランサーを導入
ロードバランサーは、負荷のバランスを取る装置です。
例えばWebサーバーに負荷がかかりやすいアプリケーションの場合、複数のサーバーに負荷を振り分けます。
これを冗長化と言います。
今回も2台のEC2を使っており冗長化しております。

ロードバランサーの主な機能としては3つです。
①ELBにはDNSのアクセスポイントが付与されます。
つまり、アクセスポイントを1つにして負荷を分散させることができます。

②ヘルスチェック機能がある
異常なインスタンスを発見したら通信をキャンセルしてくれます。

③ELBに証明書を付与することでSSL通信の終端になってくれる
HTTPS通信を復号する処理を担当してくれます。
つまり、internet gatewayの段階ではHTTPSだが、サブネット内ではHTTP通信となります。

以前書いたELBの記事です。
ELBに関して詳しく知りたい方はどうぞ。

https://qiita.com/Ryo9597/items/b565755667b423765ff4

■ルート
コンソールで「EC2」と検索→左ペイン内の「ロードバランサー」を選択→「ロードバランサーの作成」を選択

今回は以下の記事と同じことをするのでこれだけでは意味がわからんという方はこちらを参照されてください。

https://dev.classmethod.jp/articles/aws-alb-port/

現在は3000番ポートをつけないとアクセスできません。
![スクリーンショット 2021-06-22 9.52.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/b603f4f9-062b-d459-54ec-93257753a8ed.png)
ポート番号なしでアクセスできるようにするためにロードバランサーを使います。
つまり、「ALBで80番で受けて3000番に転送する」ということです。

`ALB → ターゲットグループ → EC2`の流れでリクエストされるので、ALB(80)→TG(80->3000)→EC2(3000)になります。

それではやっていきましょう。

![スクリーンショット 2021-06-22 9.46.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/13b9fefb-0a20-b032-67e8-0a2ad3f9f166.png)

![スクリーンショット 2021-06-22 9.50.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/9835cb74-113e-20a2-a710-a99dbc5f68b0.png)

![スクリーンショット 2021-06-22 9.56.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/063e6b2d-bbfe-5e59-c14c-845b2209622e.png)

![スクリーンショット 2021-06-22 9.57.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/482d1936-ebed-4cc5-ef85-402182852796.png)

![スクリーンショット 2021-06-22 9.57.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/42c71615-47db-aaa3-66fe-c35bcf2f76ae.png)

作成できました。
![スクリーンショット 2021-06-22 10.02.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/b91052b1-5a98-17bf-12d6-8bee32326ffe.png)

では、動作確認のためにDNS名でアクセスしてみましょう。
![スクリーンショット 2021-06-22 10.04.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/7e17fd7a-a050-88fc-2006-1ccd070620cf.png)

アクセスできました！！

### 14. EC2のセキュリティグループのアクセス許可をロードバランサーからに変更する
■ルート
コンソールで「EC2」と検索→左ペイン内の「セキュリティグループ」を選択→「EC2-LINE-Weather-SG」を選択

![スクリーンショット 2021-06-22 10.05.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/3e931971-4ae0-222a-f87b-f6397a8a1f8a.png)


### 15. Freenomでドメインを購入する
Freenomは1年間ドメインを無料で使えます。
なのでこちらでドメインを購入しましょう！

https://www.freenom.com/ja/index.html

どうやればいいかわからない方は以下の記事がわかりやすいので以下の記事を参考にしてみてください。

https://note.com/dafujii/n/n406f385651e2

今回私は、`line-weather-fashion.tk`というドメインを取得しました。

![スクリーンショット 2021-06-07 10.04.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/7197d808-7826-be5d-90c0-1a06fd9581aa.png)

### 16. Route53と独自ドメインの紐付け
■ルート
コンソールで「Route53」と検索→左ペイン内の「ホストゾーン」を選択→「ホストゾーンの作成」を選択

![スクリーンショット 2021-06-22 10.08.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/be4cea8e-1b1e-adc1-c15e-b923c8f04acf.png)

作成が正常に完了すると、NSレコードと呼ばれる値が割り振られます。

![スクリーンショット 2021-06-22 10.09.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/b7513221-065c-a8af-84a5-3d7960c096ac.png)

この値をFreenomの方に書き写していきます。

![スクリーンショット 2021-06-22 10.11.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/53b983c9-15e7-0a8c-623f-a1ffe439ec31.png)

以前書いたS3とRoute 53の記事です。
S3とRoute 53に関して詳しく知りたい方はどうぞ。

https://qiita.com/Ryo9597/items/6d89595840a659b646cb

### 17. ドメインとロードバランサーを紐付ける
■ルート
コンソールで「Route53」と検索→左ペイン内の「ホストゾーン」を選択→「line-weather-fashion.tk」を選択→「レコードを作成」を選択

![スクリーンショット 2021-06-22 10.12.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/c9eae5c4-c0eb-89a3-1d35-e6d80a62a758.png)

![スクリーンショット 2021-06-22 10.13.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/d6873819-6900-6037-a9eb-3665cc7dd7fd.png)

![スクリーンショット 2021-06-22 10.14.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/b5d9754f-ee87-2026-1851-9aac414d0ce9.png)


これでロードバランサーと`line-weather-fashion.tk`は結びつきました。

![スクリーンショット 2021-06-22 10.14.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/4ad97ff6-e48a-ff84-5c18-555741c54a8b.png)

それではアクセスできるか確認してみましょう。

![スクリーンショット 2021-06-22 10.21.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/f1e7fb29-ff39-eecd-6c03-01ce0de1008b.png)

成功ですね！

もしアクセスができない時はDNSの設定をチェックしましょう。

https://dnscheck.jp/

![スクリーンショット 2021-06-22 10.23.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/008f95bc-4379-75d7-c1f5-f6096f10be67.png)

　`Freenom`の値がまだ入っていないようであれば、まだDNSの更新がされていないので待ちましょう！
![スクリーンショット 2021-06-22 10.24.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/6e26c7e3-e8d1-e11c-fd1e-63ec4c8de0aa.png)

### 18. ロードバランサーでリスナーを追加する
AWS Certificate Manager（ACM） で証明書を取得します。

現状http通信でしかアプリケーションを利用できない状態です。

近年は常時SSL化（常に暗号化したデータをユーザーとサーバーでやりとり）が推奨されていて、
Google Chromeではhttp通信のままだと保護されていない通信と出てしまいます。

また、LINEでも`https`でなければいけません。

![スクリーンショット 2021-06-07 10.14.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/80992ba4-0bc9-856d-0f58-0c6f78c02605.png)

■ルート
コンソールで「EC2」と検索→左ペイン内の「ロードバランサー」を選択→「LINE-Weather-LB」を選択→「リスナーの追加」を選択

![スクリーンショット 2021-06-22 10.26.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/b962226e-ac58-2527-1065-4b7cac4fce2b.png)

![スクリーンショット 2021-06-22 10.28.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/9aa2a0da-cfbc-6fcb-ae68-274813f55945.png)

証明書を発行しましょう

![スクリーンショット 2021-06-22 10.41.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/3fb32215-db5a-605b-f76d-82e2ebf5f0f5.png)

![スクリーンショット 2021-06-22 10.32.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/142a4b96-d89e-dd7b-45b1-e9e50e83f0ec.png)

Route 53でレコードの作成を行います。

![スクリーンショット 2021-06-22 10.45.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/471f37e7-e6d5-33c7-81de-e61dffd65b9a.png)

![スクリーンショット 2021-06-22 10.45.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/943ce2a8-26a9-7d13-5dca-9ac70d4b80f2.png)

証明書の検証に時間がかかるので成功になるまで待ちましょう。

![スクリーンショット 2021-06-22 10.46.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/dd435356-7020-b2d1-a4b7-6d35aad660d6.png)

次はリスナーの追加に戻ってSSL証明書を取得しましょう。

![スクリーンショット 2021-06-22 10.47.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/218ea65a-af38-32b6-82aa-ac68982856c0.png)

### 19. セキュリティグループの修正でHTTPSへのリダイレクト設定
■ルート
コンソールで「EC2」と検索→左ペイン内の「ロードバランサー」を選択→「LB-LINE-Weather-SG」を選択→「セキュリティグループ」を選択

![スクリーンショット 2021-06-22 10.37.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/fc1c7b7e-0ddf-4257-098a-45019e1dfd03.png)


最後にロードバランサーのリスナーを`HTTPS`のみにしましょう。

![スクリーンショット 2021-06-22 10.38.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/d3883283-1790-97f5-3482-9a223379623a.png)

## 終わりに
HTTPSでアクセスできました。
たまにキャッシュなどで表示されないのでプライベートウィンドウの方が安全です。

![スクリーンショット 2021-06-22 10.49.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/f5581670-dc7e-a36b-5d07-a80e4bc5fc61.png)

では実際にLINEが送られるか検証しましょう。

![スクリーンショット 2021-06-22 10.51.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/85da1725-5de9-c3eb-58fe-b6e5b6683146.png)

![名称未設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/4f58be42-d30f-ec97-d087-e992da5172fe.png)

完成です！！