吉方位確認サービス「楽方位」α版を公開しました。

ALB のパスベースのルーティングで、EC2 と ECS + Fargate にアクセスを振り分ける

Sponsored Links

はじめに

Route 53 で独自ドメインを取得し、そのドメイン用の TLS サーバー証明書を ACM で取得し、その証明書を Application Load Balancer (ABL) に適用させ、ALB の配下に AWS Marketplace の WordPress (EC2) を可動させるという環境が既にあります。つまりは、この WordPress ブログ https://hirooka.pro です。

その構築手順はこちら。

今回、このドメインでウェブアプリケーションを稼働させることにしました。当然ながら Marketplace の WordPress 上にウェブアプリケーションをデプロイするのは現実的ではありません。このウェブアプリケーションはイベントドリブンではないため API Gateway や Lambda には適していません。Java 11 を使用しているため、Elastic Beanstalk は使用できません。EC2 インスタンスの管理や Kubernetes のクラスタの管理をしたくないため、EKS ではなく ECS と Fargate の組合せでウェブアプリケーションを構築し、ALB のパスベースのルーティングで WordPress の EC2 と ECS + Fargate へのへのアクセスを振り分けることにしました。

ゴールとしては、下記の通りです。

  • https://hirooka.pro/houi へのアクセスは ECS + Fargate ウェブアプリケーション
  • それ以外の https://hirooka.pro/ 以下へのアクセスは EC2 WordPress

なお、ここでは CI/CD まではやりません。ウェブアプリケーションのソースコードが確定すればローカルで Docker イメージをビルドし、手動で ECR に登録します。

ウェブアプリケーション開発

ウェブアプリケーションを開発し、Dockerfile を作成し、Docker イメージを作成できるところまで終わらせておきます。

ECR への Docker イメージ登録

まず、ECR の使用を開始し、リポジトリを作成します。すると、リポジトリの URI が発行され、ECR への Docker イメージへの登録方法が表示されます。ウェブアプリケーションを開発している環境で Docker イメージをビルドし、ECR に push します。

docker build -t houi .
docker tag houi:latest 000000000000.dkr.ecr.ap-northeast-1.amazonaws.com/houi:latest
docker push 000000000000.dkr.ecr.ap-northeast-1.amazonaws.com/houi:latest

ECS の設定

タスク定義

まず、タスク定義を作成します。起動タイプには Fargate を選択します。

主にデフォルト値以外のものをメモしておきます。小さなウェブアプリケーションのため、タスクメモリとタスク CPU は最小のものを選択しました。

タスク定義名なにか適当なもの
タスクロールブランクのまま
タスクメモリ0.5 GB
タスク CPU0.25 vCPU

コンテナの定義です。今回のウェブアプリケーションは 8080:TCP で動かすようにしています。

コンテナ名なにか適当なもの
イメージECR に登録した Docker イメージの Image URI
ポートマッピング8080:TCP

クラスターの作成

「ネットワーキングのみ」を選択します。Fargate を使用します。クラスター名のみ適当に設定しておきます。

サービスの作成

クラスター作成後、サービスを作成します。

起動タイプは FARGATE を選択し、既に作成しているタスク定義を設定します。タスクの数は 1 としました。

ネットワーク構成

既に ALB + EC2 WordPress で使用しているものを設定します。

クラスターVPCvpc-hirooka.pro (既に EC2 WordPress で使用しているもの)
サブネットvpc-hirooka.pro-1a, 1c (既に EC2 WordPress で使用しているもの)
セキュリティグループ新規で TCP:8080 追加
パブリック IP の自動割当ENABLED
ELB タイプApplication Load Balancer
ELB 名alb-hirooka-pro (既に EC2 WordPress で使用しているもの)

リスナーポートは ALB の既存のものを設定します。ターゲットグループは新規に作成します。ターゲットグループ作成時に ALB のルール設定を行います。そこで、パスベースのルーティング設定を行います。具体的には、/houi* に対する転送先を、ここで作成したターゲットグループとしました。

リスナーポート443
ターゲットグループ新規

サービス作成後、タスクが RUNNING となることを確認します。そして、パスベースのルーティングがされていることを確認します。

実に楽で、便利ですね。

今回作成したウェブアプリケーション

このブログ https://hirooka.pro は EC2 の WordPress で動いていますが、今回作成したウェブアプリケーションの URL は同じドメインの https://hirooka.pro/houi です。そして、EC2 の WordPress とは別の ECS + Fargate で動いています。

単に Google Maps 上に西偏角を考慮した正方位線を描画するだけのウェブアプリケーションです。我が家は方位を異常に気にするため、引越し時には重宝しています。

https://hirooka.pro/houi
AWS
Sponsored Links
hirooka.pro