これまでは、リモートから直接EC2に接続していたが、今回はELBを投入してみることにする。
パブリックサブネットの作成
VPCの構築で、PublicSubnetを2つ作ったが、1つはIGW(Internet Gateway)に接続しているが、もう1つはとりあえず名ばかりのPublicSubnetだったので、ここで名実ともにパブリックサブネットにしてあげる。
VPC > ルートテーブル
IGWに接続しているルートテーブルに、172.16.0.0/16のPublicSubnetを追加する。
「サブネットの関連付け」タブから、サブネットの関連付けの編集を選択。
関連付けたいサブネットを選択
これでパブリックサブネットが2つできた
ALBの作成
EC2 > ロードバランシング > ロードバランサ―
ロードバランサーの作成
ロードバランサーの種類を選ぶ
今回は、ALB(Application Load Balancer)を選択
ALBの設定をしていきます。
- 名前:好きなものを設定
- スキーム:クライアントからインターネット経由でリクエストをターゲットに渡すので、「インターネット」を選択
- リスナー:HTTPで80番ポートを指定
アベイラビリティゾーンは、先ほど作成したパブリックサブネットを指定する
タグの追加
次の手順へ
セキュリティグループは、既存のものを流用
ルーティングの設定
- 名前:好きなものを設定
- ターゲットの種類:インスタンス(EC2につなぐ)
- プロトコル:HTTP
- ポート:80
ヘルスチェックは80番で受けたポートを3000番に上書きする
インスタンスを選択して、ポートを3000番にしたら「登録済みに追加」をクリック
確認画面で内容確認後、「作成」をクリックしたら、完了。
Blocked hostエラー回避対策
Rails6になったときに、DNSリバインディング攻撃から保護する機能(ミドルウェア)が追加されたそうで、許可するホストを自分で設定してやらねばならないらしい。
EC2にSSHでアクセスして、config\environments\development.rbをvimで編集する。
ファイルの末尾に下記を追加。
# clear WhiteLists config.hosts.clear
いざ、実行!
ALBのステータスがactiveになっていることを確認したら、rails s -b 0.0.0.0 でRailsサーバーを立ち上げる。
ロードバランサーのDNS名をコピー
ブラウザのURLバーに貼り付ければOK!
できた!(満足!)