LoginSignup
5
1

More than 3 years have passed since last update.

ELBを含めてVPC + EC2でアプリを構築する。

Last updated at Posted at 2020-11-18

はじめに

本稿は『VPC + EC2 + Docker でアプリケーションをデプロイする。』の補足として書いています。
何か詰まるところがあれば、上記の記事をみていただけるといいかと思います。

対象読者

  • ELB(ALB)の構築方法を知りたい方
  • 安定したサービスをデプロイしたい方
  • 自分

全体構造

201111 ELBの構成図-Page-1.png

ELB

ELBとは

ELBとは、Elastic Load Balancingの略称でアプリケーションのトラフィックを自動的に複数のターゲットに分散してくれる機能です。
また、トラフィックを複数のAZに分散することもできるので、瞬間的な同時アクセスや何かしらの障害によってAZがダウンしたとしても、他のAZさえ生き残っていればサービスを継続させることができます。すごいです。
今回は、ELBの3つのロードバランサーの1つである、ALBを使用します。
違いは、この記事がさっくりしていてわかりやすかったです。

ELBを含めた設計の流れ

VPCの構築

まずは、前回と同様にどおりVPCサブネットを構築していきます。

まずはAWSのトップ画面の『サービスを検索する』から『VPC』を選択。
スクリーンショット 2020-11-08 22.32.33.png
VPCウィザードの起動』を押下。
スクリーンショット 2020-11-08 22.34.03.png

選択』を押下。
スクリーンショット 2020-11-08 22.49.21.png

それぞれ以下のように記入して『VPCの作成』を押下。
スクリーンショット 2020-11-08 22.50.40.png

OK』を押下
スクリーンショット 2020-11-08 22.50.53.png

現在のサブネットの状況です。
スクリーンショット 2020-11-11 14.04.42.png
着目すべきは、IPv4アベイラリティゾーンです。
先ほど作ったサブネットは、『ap-northeast-1a』というAZで、『10.0.0.0/24』のIPを持っています。
では、これと被らないように他のAZパブリックサブネットをもう1個作ります。

VPCのメニューの『サブネット』を選択。
サブネットの作成』を押下。
スクリーンショット 2020-11-11 14.12.00.png

以下のようにして、2つ目のサブネットを作成。
IPv4は、『パブリックサブネット-1a』で『10.0.0.0/24』を使用しているので、今回は『10.0.1.0/24』を使う。
スクリーンショット 2020-11-11 14.15.40.png

VPCウィザードで構築した1つ目のサブネットは自動でIGWのルーティングがされていますが、2つ目以降は自分で行わなければいけません。
なので、このサブネットのルートテーブルを変更します。

VPCメニューから『サブネット』を選択。
2つ目に作成した、サブネットを選択。
下のメニューの中から『ルートテーブル』を選択して、『ルートテーブルの関連付けの意義』を押下。
スクリーンショット 2020-11-11 14.28.46.png

すでに選択されているルートテーブルとは違う方を選択。
(この時、このVPCには2つしかルートテーブルが存在しないはず)
スクリーンショット 2020-11-11 14.36.41.png
ルートの向き先にIGWが存在することを確認して、『保存』を押下。
スクリーンショット 2020-11-11 14.36.28.png

これで今回使うサブネットの作成が完了しました。

現在の構成図

名称未設定.png

EC2の作成

前回の記事と変わるところはありません。
ので、1つ目のサブネットにデプロイするとこまではスキップします。

現在の構成図

名称未設定.png

ELBの構築

いよいよELBを構築していきます。
ELBの細かい説明に関しては、こちらをご覧ください。

メインメニューから『EC2』を選択。
スクリーンショット 2020-11-11 15.53.43.png

EC2メニューから、『ロードバランサー』を選択。
ロードバランサーの作成』を押下。
スクリーンショット 2020-11-11 15.54.00.png

Application Load Balancerの『作成』を押下。
スクリーンショット 2020-11-11 15.54.22.png

以下のようにELBに好きな名前をつける。
ロードバランサーが通信を受ける外部のポート番号を入力。
自分のVPCを選択。
アベイラリティゾーンにチェックを入れ、ELBにつなげるサブネットを選択する。
次の手順を押下』する。
スクリーンショット 2020-11-17 16.58.28.png


ちなみに、今回のdocker-compose.yml

docker-compose.yml
version: '3.7'
services:
  web:

    ~~  省略  ~~

    ports:
      - '3000:3000'
    environment:
      PORT: 3000
      HOST: 0.0.0.0

    ~~  省略  ~~

としています。


次の手順』を押下。
スクリーンショット 2020-11-11 15.55.23.png

新しいセキュリティグループを作成する』を選択。
セキュリティグループ名』に今回のセキュリティグループの名前(説明も名前と一緒でOK)を記入。
タイプ』は『カスタムTCP』を選択。
ポート範囲』は『80』を選択。
ソース』は『カスタム』『0.0.0.0. ::/0』を選択。
次の手順』を押下。
スクリーンショット 2020-11-17 16.58.50.png

新しいターゲットグループ』を選択して名前を記入。
ポート』に自分が開くポート番号を記入
次の手順』を押下。
スクリーンショット 2020-11-13 16.39.11.png

登録済みに追加』を押下。
登録済みターゲット』にEC2のインスタンスが追加されているか確認。
次の手順』を押下。
スクリーンショット 2020-11-13 16.39.17.png

作成』を押下。
スクリーンショット 2020-11-11 16.01.45.png

以上でELBの作成が完了します。

次に、作成したELBを確認します。

先ほど作成したELBを選択。
スクリーンショット 2020-11-11 16.02.04.png

リスナー』を選択。
転送先』の自分で設定したターゲット名を押下。
スクリーンショット 2020-11-13 16.39.34.png

一覧の中からさきほど作成した、ターゲットグループを押下。
スクリーンショット 2020-11-13 16.39.51.png

下のメニューの中にある『Target』を押下。
インスタンスとの接続状況はStatusで見ることができます。
最初は『initial』と表示されていると思いますが、インスタンスとの接続が上手くいけば『healthy』になります。
スクリーンショット 2020-11-13 16.42.47.png

これでELBの作成はいったん完成です。

現在の構成図

201111 ELBの構成図.png

AMI

現在のままでは、ELBとしての機能がほぼ死んでます。笑
そのため、ELBが結びつく先のサブネットを増やしてあげます。
増やすサブネットの内容はパブリックサブネット-1aと同じ物なので、そのままコピーしてきます。
この時に、使用するサービスがAMIです。

AMIとは

公式によると、

Amazon マシンイメージ (AMI) は、ソフトウェア構成 (オペレーティングシステム、アプリケーションサーバー、アプリケーションなど) を記録したテンプレートです。AMI から、クラウドで仮想サーバーとして実行される AMI のコピーであるインスタンスを起動します。以下の図に示すように、1 つの AMI の複数のインスタンスを起動することができます。

要するに、Dockerのインスタンス版だと考えていいと思います。

AMIの作成

EC2メニューから『インスタンス』を選択。
自分の複製したいインスタンスを選択。
アクション』を押下。
Image and Template』を押下。
イメージを作成』を押下。
スクリーンショット 2020-11-15 15.33.40.png

イメージ名』『イメージの説明』でAMIにつける名前・説明を記入。
イメージの作成』を押下。
スクリーンショット 2020-11-15 15.39.23.png
これで、AMIの作成が完了です。
一応確認してみます。

EC2メニューから『AMI』を選択。
先ほど作成されたAMIのステータスがpendingからavailableになれば、無事成功です。
スクリーンショット 2020-11-15 15.51.46.png

現在の構成図

201111 ELBの構成図.png

2つ目のインスタンスの作成

AMIを利用して、2つ目のインスタンスを作成したいと思います。

EC2メニューから、『AMI』を選択。
自分の作成した、AMIを選択。
起動』を押下。
スクリーンショット 2020-11-15 16.02.09.png

今回は、『t2.micro』が選択されていることを確認。
次のステップ』を押下。
スクリーンショット 2020-11-15 16.08.38.png

ネットワーク』に今回使用するVPCを、『サブネット』に今回使用するサブネットをそれぞれ選択。
自動割り当てパブリックIP』は『有効』にしておく。
次のステップ』を押下。
スクリーンショット 2020-11-15 16.02.50.png

そのまま『次のステップ』を押下。
スクリーンショット 2020-11-15 16.02.59.png

好みでタグをつけておく。
今回は以下のようにしておく。
スクリーンショット 2020-11-15 16.03.30.png

既存のセキュリティグループを選択する』を選択。
1つ目のインスタンスと同じセキュリティグループを選択。
確認と作成』を押下。
スクリーンショット 2020-11-15 16.25.19.png

そのまま『起動』を押下。
スクリーンショット 2020-11-15 16.04.15.png

そのまま『インスタンスの表示』を押下。

現在の構成図

201111 ELBの構成図-Page-1.png

2つ目のインスタンスをELBに追加

上の構成図を見ると残った工程は、2つ目のインスタンスELBの行先に追加してあげることのみです。
では早速やっていきましょう。

EC2メニューから『ターゲットグループ』を選択。
今回使用するターゲットグループを押下。
スクリーンショット 2020-11-18 13.16.36.png

Target』を選択。
Register targets』を押下。
スクリーンショット 2020-11-18 13.16.49.png

2つ目のインスタンス(ap-northeast-1c)を選択。
Include as pending below』を押下。
スクリーンショット 2020-11-18 13.20.47.png

このように『Targets』に2個インスタンスが出てくればOK。
スクリーンショット 2020-11-18 13.20.57.png

前回記事と同じように2つ目のインスタンスにssh接続して docker を起動すればELBの接続が完了です。

現在の構成図

201111 ELBの構成図-Page-1.png

まとめ

以上でELBを使ってデプロイすることができました。
次回は、Route53を使って、DNSを構築していきたいと思います。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1