AWS

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のウィザード作成をクリック

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

スクリーンショット 2018-05-14 11.05.25.png

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

スクリーンショット 2018-05-14 11.08.00.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確認

スクリーンショット 2018-05-14 11.13.21.png

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

サブネット確認

送信先 ターゲット
10.0.0.0/16 local
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
サブネット VPCに登録済みのサブネット
自動割り当てパブリック IP 有効

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

プライマリ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

結果

スクリーンショット 2018-05-14 11.01.25.png

原因

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

終わり

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

参考

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