ども、ECS は最近全然触れていないかっぱです。

追記

AWS CLI のでも操作してみた。

エブリデイ試した系ですいません。かっぱです。 tl;dr inokara.hateblo.jp の続き。 AWS CLI で ALB を作成して ECS の Service を作成して ALB と組み合わせてみる。尚、ALB を操作するには elbv2 というサブコマンドを利用する。 メモ ちょっとウンチク ここまで試...

inokara.hateblo.jp

先日、AWS Application Load Balancer がリリースされて、Amazon ECS の Dynamic Port Mapping にも対応されたとのことで、ECS と Application Load Balancer の組み合わせを試行錯誤している。内容な認識等に誤りがあるかもしれないのでご容赦下さい。

試した環境

手元の環境

% sw_vers
ProductName:    Mac OS X
ProductVersion: 10.11.6
BuildVersion:   15G24b

% ecs-cli --version
ecs-cli version 0.4.2 (9159726)

ECS

  • amzn-ami-2016.03.f-amazon-ecs-optimized (ami-ed26e78c)
  • ECS のクラスタは ecs-cli で作成済み
  • マネジメントコンソールより ECS の Service を作成していく
  • Service 内で起動する Task はコンテナ自身のホスト名を返す Sinatra アプリケーション(コンテナ内で 4567 ポートで Listen する)

memo

以下、殴り書き。(後で整理するかも)

  • 事前に Application Load Balancer を作っておく(以後、Application Load Balancer を ALB と記す)
  • ALB 作成の際にはターゲットグループを一つ作る必要がある(ターゲットにインスタンスを登録する必要は無い)
  • ターゲットグループを消す時にはALB を消してからターゲットグループを削除した方が良さそう (リスナーの定義を先に消せば良い)
  • 下図のように ECS の Service 作成時に ALB を指定することが出来る(ターゲットグループが生成される)

20160813103607
20160813103618

ecsServiceRole という IAM Role が付与される。この Role には AmazonEC2ContainerServiceRole というマネジメントポリシーが適用されている。

20160813103632
20160813103648
20160813103833

  • 既存の ECS Service には追加出来ない?(Service 作成時のみ ELB 定義が出来るようだ)
  • Container Instance に付ける Security Group は ALB に付与した Security Group から Container の Dynamic Port にアクセス出来るようなルールを定義しておく
source: public-access
protocol: TCP
port range: 0-65535
  • ALB からはコンテナはインスタンスとして見えている

20160813101535

  • ルーティングのルールはロードバランサーの一覧にて該当の ALB を指定してリスナーで修正する

20160813102651

/* としておくとクライアントのリクエストをそのままバックエンドに流すような挙動になった。

  • ALB に登録されたコンテナにアクセスしてみる
% curl -v alb-ecs-demo-xxxxxxxxxxxxxx.ap-northeast-1.elb.amazonaws.com/hostname
*   Trying 54.xx.xxx.xxx...
* Connected to alb-ecs-demo-xxxxxxxxxxxxxx.ap-northeast-1.elb.amazonaws.com (54.xx.xxx.xxx) port 80 (#0)
> GET /hostname HTTP/1.1
> Host: alb-ecs-demo-xxxxxxxxxxxxxx.ap-northeast-1.elb.amazonaws.com
> User-Agent: curl/7.43.0
> Accept: */*
> 

  • 当たり前だのクラッカーだけど Task のスケールアウトにも追随してくれる
#
# Task を 3 つに増やした後にアクセス
#
% curl alb-ecs-demo-1930795025.ap-northeast-1.elb.amazonaws.com/hostname
79a796b62150%                                                                                                                                                                                    
% curl alb-ecs-demo-1930795025.ap-northeast-1.elb.amazonaws.com/hostname
68cb8177a441%
% curl alb-ecs-demo-1930795025.ap-northeast-1.elb.amazonaws.com/hostname                                                                               59294f32f412% 

まとまってないけどまとめ

  • まさに産業革命
  • Dynamic Port Mapping やりくりする為に HAProxy とか入れなくても良くなったのは嬉しい
  • 後で CLI でもやってみる

元記事はこちら

Amazon ECS と AWS Application Load Balancer の組み合わせを試しているメモ