Chapter 12

AWS ALB(フロントエンド編)

hibriiiiidge
hibriiiiidge
2020.10.22に更新

それでは取得したドメインをロードバランサー Application Load Balancer(以下、ALB) に紐付けをします。
更に ECS を起動させ、 ECS へのアクセスを ALB 経由で行うようにしていきます。

  1. ALB の作成
  2. ALB と ECS の紐付け
  3. ALB と ドメインの紐付け
  4. ALB の微修正

1. ALB の作成

EC2 のダッシュボード画面にいき、サイドメニューにある [ロードバランサー] の項目をクリックします。
そして、[ロードバランサーの作成] ボタンをクリックします。

ALB の [作成] ボタンをクリックします。

「手順 1: ロードバランサーの設定」 で「名前」と「アベイラビリティーゾーン」を設定します。
アベイラビリティーゾーンについては、今回はデフォルトで用意されているものを使用します。

「手順 2: セキュリティ設定の構成」 は現時点では、 https プロトコルの設定はしないのでスキップします。

「手順 3: セキュリティグループの設定」 で、セキュリティグループを作成します。

以下の値をセットします。

項目
セキュリティグループ名 zenn-app-alb-security-group-frontend
説明 zenn-app-alb-security-group-frontend
タイプ http
プロトコル TCP
ポート範囲 80
ソース カスタム 0.0.0.0/0, ::/0 (or 任意の場所 でも OK)

「手順 4: ルーティングの設定」 で、ターゲットグループを作成します。
ここでターゲットグループを作成しますが、 ここで作成したものは使用せず、実際には ECS の紐付けにおいて、作成するターゲットグループを使用する形になります。
(ここでは、スキップできないので、とりあえず作るという感じです。この辺り知見ある方コメントください。)

「手順 5: ターゲットの登録」は現時点では利用可能なインスタンスはないのでスキップします。

「手順 6: 確認」 で内容を再確認し、問題なければ、 [作成] ボタンをクリックします。

「ロードバランサー作成状況」に「ロードバランサーを正常に作成しました」とメッセージが表示されれば OK です。

2. ALB と ECS の紐付け

それでは、 作成した ALB と ECS の紐付けを行っていきます。
まずは、新しく ECS を 0 から作成していので、10章で作成した ECS のサービスを削除してください。

そして、10章で作成したフローを辿って再度 ECS のタスクの定義・サービスの設定を行います。
重複する部分が多いので、ここでは10章と異なる点のみにフォーカスします。

異なる点1:タスクの定義におけるコンテナのポート設定

タスク定義において、先の設定では特にコンテナのポートは指定しなかったのですが、(なので、URLでアクセスした時に http://{PublicIP}:3000と 3000 ポートの指定が必要だった)、ロードバランサーを間に挟むことになったので、ポートを指定する必要があります。

異なる点2:サービスにおけるロードバランサーの設定

「ステップ2: ネットワーク構成」 の 「ロードバランシング」 の 「ロードバランサーの種類*」 で Application Load Balancer をチェックします。
そして、「ロードバランサー名」で先ほど作成したロードバランサー名を選択します。

次に、「ロードバランス用のコンテナ」で [ロードバランサーに追加] ボタンをクリックします。
すると、以下のようなロードバランサーの設定項目が表示れます。

各項目に以下の値をセットします。

項目
プロダクションリスナーポート* 80:HTTP
ターゲットグループ名 ecs-zenn-app-service-tg-frontend
ターゲットグループのプロトコル HTTP
パスパターン /
評価順 1
ヘルスチェックパス /

入力したら、次のステップに進み、それ以降は10章と同じフローになります。

3. ALB と ドメインの紐付け

ECS のステータスが RUNNING に変わったら、 ALB とドメインの紐付けを行います。
の前に一度、紐付けを行う状態の前に、ALB 経由で ECS にアクセスできるかを確認してみましょう。
ロードバランサーのダッシュボードで、以下の 「DNS名」 の値をコピーします。

コピーした値を直接 URL に入力し、アプリのトップ画面が表示されれば OK です。

それでは、DNS 名でアクセスした時に表示されているアプリの画面が、11章で取得したドメインでアクセスした時にも表示されるように設定していきます。

Route53 のダッシュボード画面に遷移し、ホストゾーンをクリックし、11章で取得したドメイン名をクリックします。

「ドメインのレコード詳細」画面に遷移するので、 [レコードを作成] ボタンをクリックします。

「ルーティングポリシー」を選択画面で、「シンプルルーティング」 を選択します。

「レコードを設定」で、[シンプルなレコードを定義] をクリックします。

「シンプルなレコードを定義」のモーダルが表示されます。
「値/トラフィックのルーティング先」の項目では以下を選択します。

項目
エンドポイントを選択 Application Load Balancer と Classic Load Balancer へのエイリアス
リージョンを選択 アジアパシフィック (東京) [ap-northeast-1]
ロードバランサーを選択 上で作成したロードバランサー

選択したら [シンプルなレコードを定義] ボタンをクリックします。

レコードが作成されます。

最後に、取得したドメインを URL に入力し、アプリのトップ画面が表示されれば OK です。

4. ALB の微修正

取得したドメインでアプリのトップ画面が無事表示されましたが、 開発者ツールを確認してみると以下のようにエラーが発生しています。

ロードバランサーのリスナーの設定を変更することで、エラーが発生しないようにしていきます。

EC2のダッシュボードのサイドメニューから「ロードバランサー」をクリックしてください。
そして、zenn-app のロードバランサーを選択し、リスナータブを開いてください。

登録されているリスナーの [ルールの表示/編集] リンクをクリックしてください。

登録されているルールの下のルールの編集アイコンをクリックしてください。

編集エリアに切り替わるので、設定されているルールを削除します。

そして、新規に[アクションの追加]でルールを作成します。

[遷移先...] を選択し、

ターゲットグループで ECS 登録時に作成したターゲットグループを選択して、チェックアイコンをクリックしてください。

最後に、 [変更] ボタンをクリックしてください。

再度、アプリ画面を開き、開発者ツールを開き、エラーが出ていなければ OK です。