AWS Webアプリ公開①~VPC、EC2、SSH接続~

#前説
今週は一旦Railsから離れてAWSの勉強しようかなと思いました。(Railsもちょこちょこやる）


#やりたいこと(2つ)
- AWSでExpressの環境構築
- Railsアプリをデプロイ

#まず何をすべき？
- AWS VPCでネットワーク整備
- AWS EC2で仮想環境作成
- EC2内で環境構築


#実際作った
##一回目に作った環境にSSHしたが・・・
```
ssh: connect to host 184.168.221.104 port 22: Connection refused
```

認証の問題でもなく、何かがアクセスを弾いてる？ネットワークが完成していないのか？

うーん。。。接続できてない。
パプリックDNSで検索しても同じ結果。DNS逆引きしてみる。

```
Non-authoritative answer:
Name:	ip-10-0-1-8.ap-northeast-1.compute.amazonaws.com
Address: 184.168.212.72
```

```
ping  184.168.212.72
```

```
64 bytes from 184.168.221.104: icmp_seq=2 ttl=49 time=174.616 ms
64 bytes from 184.168.221.104: icmp_seq=3 ttl=49 time=194.756 ms
```

上のような感じで出てきました。
グローバルIPでpingを打つとしっかりとパケットが帰ってきます。
つまり、接続はできていると・・・。何らかののファイアウォールが弾いてるのかと予想。

やり直すか

#というわけで2回目
#VPCでネットワーク整備
##VPC構成準備
VPCのウィザード作成をクリック

最初にこういう画面が出てきますよね！

<img width="1065" alt="スクリーンショット 2018-05-14 11.05.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/253129/b985429c-2ce0-889f-b03b-1334d8eb91c7.png">

これはネットワークの構成を選択できます。
サブネットは同一IPネットワークで形成された空間を分割する仕組みです。
VPC構築時点でサブネットによってIP空間を分割してくれるよう指定できるわけです。
そのVPC構成をここで選択できます。

<img width="682" alt="スクリーンショット 2018-05-14 11.08.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/253129/56f7bfa4-d6c6-ed73-92d9-da3f12ff7dff.png">


今回僕らが選んだのはパブリックサブネットのみを作成する構成。
一応、VPC作成後もパブリックサブネットとプライベートサブネットに分割できるっぽい。

CIDRブロックはVPCのイメージとしては全体「10.0.0.0/16」
サブネットは「10.0.1.0/24」(ここにWebサーバーを設置)
アベイラビリティゾーンでは「ap-northeast-1a」(アジア東京)を指定。
1回目は「ap-northeast-1c」にしてた。
これが原因で弾かれていたのかもしれない・・・

Web系の環境構築だとこんな感じになりそうですね！

- パブリックIPアドレスにおいて、Webサーバーやメールサーバーなどインターネットとの接続の必要があるサーバーを設置します。
- プライベートIPアドレスにおいて、データベースサーバーなどインターネットとは接続しないサーバーを設置します。

##VPC作成後
###VPC確認

<img width="507" alt="スクリーンショット 2018-05-14 11.13.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/253129/116a47b1-f4a2-7417-3c85-8dd36885f21a.png">


VPC作成により「10.0.0.0/16」のプライベートIPアドレスを取得

###サブネット確認

| 送信先       |       ターゲット |   
|:-----------------|------------------:|:------------------:|
| 10.0.0.0/16             |              local |        This        |
| 0.0.0.0/0           |     igw-★★★★★★★     |


今回は「10.0.1.0/24」というプライベートIPアドレスでパブリックIPネットワーク空間を形成。
「0.0.0.0/0」というインターネットゲートウェイが自動で追加されてます。

インターネットゲートウェイの役割としては、VPCからインターネットへのアクセスやプライベートIPアドレスとグローバルIPアドレス変換を行うNATの役割を果たしてくれるらしい。(自信ない)


###ルーティングテーブル確認

「サブネット関連づけ」
作成したサブネットが登録されているのを確認！
「10.0.0.0/16」
「0.0.0.0/0」
が揃っていれば問題ないです。


#EC2インスタンスを作成

##AMI
無料利用枠のLinuxのAMIを選択。

##インスタンスタイプ
無料利用枠のインスタンスタイプを選択。

##インスタンスの設定

真ん中のネットワーク関連の設定にて

| 項目       |       選択 |    
|:-----------------|------------------:|:------------------:|
| ネットワーク            |           自分が作成したVPC |        This        |
| サブネット           |            VPCに登録済みのサブネット |       column       |
| 自動割り当てパブリック IP             |             有効 |        will        |

下のネットワークインターフェイスにて

プライマリIPは10.0.1.0/16内に作成するので10.0.1.10とした。


##ストレージ
デフォルトでいい。

##タグ
特になし

##セキュリティグループ
セキュリティグループに以下の設定を行う

|   タイプ    |  プロトコル  |   ポート範囲 | ソース|
|:-----------------|------------------:|:------------------:|:-----------------
| HTTP             |              TCP |        80        |0.0.0.0/0|
| SSH           |            TCP |       22      |0.0.0.0/0|

HTTPを追加する。
しかし、サーバー公開するとなった場合、この「0.0.0.0/0」とデフォルトのポート範囲はセキュリティ上まずいので変更は必須すべきかなと思う。
悪い人にアドレスやポート番号の予測をつけられやすくなるため。

##キーペア作成
なんでもいいです。ダウンロードしてローカルPCに配置しましょう。

##インスタンス作成
これで作成！！


#SSH接続

ターミナルにて

```
ssh -i keyペアファイル名 ec2-user@パブリックDNS or パブリックIP
```

#結果


<img width="467" alt="スクリーンショット 2018-05-14 11.01.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/253129/5fe1c18d-7007-59fb-0b76-41872ea44e09.png">

#原因

リージョンとアベイラビリティゾーンの設定がよろしくなく、外部IPとして認識してセキュリティグループの設定に乗っ取り弾いていた説。


#終わり
次回はnode.js環境の構築をするか。
初心者なのでアドバイスや鉞、ドシドシ応募しています！！

#参考
https://qiita.com/shunsuke227ono/items/23dbf4f3bc663a2875f0
https://qiita.com/hit/items/336dfa6d1121a09fb4e5