2023.01.21  

【AWS】ALBでECSのサービス単位でパスパターンごとにルーティングを行う

AWS    

ALBを利用してECSのサービス単位でパスパターンごとにルーティングを行う方法についてメモ書きします。

構成は下記のようになります。

このシステムではXXX_APIYYY_APIの2つのAPIがあります。

<ホスト名>/v1/YYY/*にアクセスがあった時はYYY_APIがあるECSサービスに接続します。

上記のパスパターンでない時はXXX_APIにアクセスするようにします。

パスパターンの設定の仕方

マネージメントコンソールから EC2 --> Load balancers --> <対象ALB> --> <対象 listener>にアクセスし、Rulesタブから設定を行います。

上記は<ホスト名>/v1/YYY/*にアクセスがあった時、ターゲットグループYYY-tgにPriority (優先度) 1 (最優先)で接続する設定と、パスパターンが<ホスト名>/v1/YYY/*以外の場合はターゲットグループXXX-tgに接続するような設定となっています。

Manager rulesをクリックするとパスパターンの設定を行うことができます。

ターゲットグループについて

マネージメントコンソールから EC2 --> ターゲットグループにアクセスすることで、ターゲットグループを作成することができます。

ターゲットグループXXX-tgYYY-tgについてはそれぞれ次の設定が行っています。
※ 下記はマネージメントコンソールの設定項目を書き出したものです。

"Choose a target type" =  "IP addresses"
"Protocol : Port" = "HTTP: 4000"
"IP address type" = "IPv4"
"Protocol version" = "HTTP1"
"Health check protocol" = "http"
"Health check path" =  "/health"

Port については、ECSサービス、ECSタスクのcontainerPortと同じ値にする必要があります。

Health check pathについては、<host名>/health に接続できた際にレスポンス200を返すAPIがあることを前提に記載しています。実行してレスポンス200を返すAPIならなんでも良いです。

レスポンス200が返ってこないとコンテナに異常があると判断され、コンテナが再起動されます。
つまり、きちんとレスポンス200を返すAPIを設定しないとコンテナの再起動が繰り返されるので注意が必要です。

ターゲットグループとECSサービス(プラベートサブネットに配置)を紐づけると、ターゲットグループにECSサービスのプライベートアドレスが自動的に割り振られるようです。(未検証)

ALBとECSサービスの紐付け方

ALBとECSサービスの紐付けは、ALBのターゲットグループをECSサービスに設定することで行うことができます。

つまり、今回の場合は下記の作業が必要となります。

ターゲットグループXXX-tgを作成して、ECSサービスXXX-servicetargetGroupArnに設定する
ターゲットグループYYY-tgを作成して、ECSサービスYYY-servicetargetGroupArnに設定する

紐付けを行うには、まずマネージメントコンソールからAmazon ECS --> クラスター --> <対象クラスター名>にアクセスし、「サービス」タブから「作成」ボタンをクリックします。(更新はできない)

ECSサービス作成中のステップ2: ネットワーク構成まで遷移すると紐づけが行えます。

下記ではYYY_API用のECSサービスの設定を行っています。

指定するALBはXXX_APIとYYY_APIで共通で使用する「XY-alb」を指定しています。

「ロードバランサーに追加」ボタンを押下するとどのターゲットグループを使用するか指定できます。

あとはサービスの作成を完了させて、XXX_API用のサービスも作成すればパスパターンごとにAPIを実行できるようになります。

コメント
現在コメントはありません。
コメントする
コメント入力

名前 (※ 必須)

メールアドレス (※ 必須 画面には表示されません)

送信