LoginSignup
5
3

More than 1 year has passed since last update.

【AWS】ECS構築の基礎 −ELB・Auto Scaling編−

Last updated at Posted at 2021-07-05

はじめに

クラスタ作成、タスク定義、サービス作成を行ったので、今回はロードバランシング(ELB)とAuto Scalingの設定を行ってみました。

ロードバランシング

ECSクラスタにELBを連携する際、起動タイプによってネットワークモードなどの設定が変わってきます。

Fargate起動タイプ

  • ネットワークモードにawsvpcを使用(タスクごとにENIをアタッチ)
  • 各タスクが固有のIPをもつ
  • ENIごとにSecurityGroupを紐づける

EC2起動タイプ

  • ネットワークモードにbridgeを使用(インスタンスの任意のポートをコンテナのポートにマッピング)
  • インスタンスのENIを複数のタスクで共有
  • ELB(ALB)と連携する際には動的ポートで利用

実装

タスク定義・サービス編で構築したインフラにALBを新しく加えていきます。

インフラ構築

CloudFormationで一発でつくります。

$ aws cloudformation create-stack --stack-name external-alb --template-body file://./alb-external.yml
{
    "StackId": "arn:aws:cloudformation:ap-northeast-1:338233790232:stack/external-alb/6a9d91c0-dc5e-11eb-9aad-0a197b714f8d"
}

以下のリソースを含んだスタックが作成されます。
スクリーンショット 2021-07-04 9.29.52.png

ELBのリスナータブからルールを開くと、各パス(/ec2/ /fargate/)のターゲットグループが表示されます。
スクリーンショット 2021-07-04 15.41.15.png

サービス作成

Fargate起動タイプとEC2起動タイプでサービスを作成してタスクを実行し、ロードバランサーの挙動を確認します。

Fargate起動タイプ

Fargate起動タイプでサービスを作成します。
スクリーンショット 2021-07-04 15.46.47.png

ネットワーク構成ではVPCとサブネットを指定します。
スクリーンショット 2021-07-04 15.53.12.png

セキュリティグループのインバウンドルールでは、ELBのセキュリティグループからの受信を許可するようにします。
スクリーンショット 2021-07-04 15.50.18.png

また、ロードバランシングでロードバランサーの種類とIAMロールを選択し、ロードバランス用のコンテナを追加します。
スクリーンショット 2021-07-04 16.04.23.png

ロードバランサーのDNS名をコピーして、[DNS名]/fargate/にアクセスします。
スクリーンショット 2021-07-04 16.08.08.png

以下のページが開かれます。
このときページロードを何回も行うと、ELBのおかげでタスクが切り替わります。
スクリーンショット 2021-07-04 16.09.12.png

EC2起動タイプ

同様にサービスの作成を行います。
スクリーンショット 2021-07-04 16.16.31.png
スクリーンショット 2021-07-04 16.23.44.png

[DNS名]/ec2/にアクセスすると以下のページが開かれ、ロードを繰り返すとタスクが切り替わります。
スクリーンショット 2021-07-04 16.25.57.png

Auto Scaling

ECSタスクのAuto ScalingはEC2インスタンスのAuto Scalingとは別物ですが、CPU/RAMの使用率をCloudWatchでトラッキングして、CloudWatchアラームをトリガにしてスケーリングするといった仕組みは同じです。

また、タスクを実行するインフラを決定するためにCapacity Providerを利用します。
Fargate起動タイプの場合はFARGATEFARGATE_SPOTといったCapacity Providerが自動で追加され、EC2起動タイプの場合はAuto ScalingグループとCapacity Providerを連携する必要があります。

実装

ECS(EC2起動タイプ)タスクとインスタンスのAuto Scalingをそれぞれ設定してみます。

タスク

作成済のサービスsimplehttp-service-ec2のAuto Scalingを更新します。
タスクの最小数、必要数、最大数、IAMロールを設定します。
スクリーンショット 2021-07-04 17.01.55.png

次にスケールアウト、スケールインのときのスケーリングポリシーを作成します。

スケールアウトのポリシーは、CPUの使用率が5分以上20%を上回ったときにタスクを1つ追加するような設定にします。
スクリーンショット 2021-07-04 17.07.34.png

スケールインのポリシーは、CPUの使用率が2連続で5分以上15%以下になったときにタスクを1つ追加するような設定にします。
スクリーンショット 2021-07-04 17.12.52.png

サービスを更新すると、Auto Scalingのタブから作成した設定を確認することができます。
スクリーンショット 2021-07-04 17.25.19.png

インスタンス

該当するAuto Scalingグループを選択して、最小キャパシティと最大キャパシティを設定します。
スクリーンショット 2021-07-04 18.18.51.png

ECSからキャパシティプロバイダーを新しく作成します。
スクリーンショット 2021-07-04 18.22.27.png

新しくサービスを作成するのですが、このときに”キャパシティープロバイダー戦略に切り替える”をクリックします。
スクリーンショット 2021-07-04 18.24.55.png

以下のような設定を行います。
スクリーンショット 2021-07-04 18.30.39.png

タスクの配置には"ビンパック"を選択します。
スクリーンショット 2021-07-04 18.31.13.png

ロードバランシングとAuto Scalingはデフォルト設定のままでサービスを作成します。
1つのコンテナインスタンスに5つのタスクが実行されています。
スクリーンショット 2021-07-04 18.39.45.png

Auto Scalingの確認のために、タスク数を25にしてサービスを更新します。
CloudWatchをみると、CPUが400%くらいになっています。
スクリーンショット 2021-07-04 18.42.23.png

クラスターのECSインスタンスタブを開くと、コンテナインスタンスが3つに増えています。
スクリーンショット 2021-07-04 18.44.12.png

タスクも21個まで増えていることが確認できます。
スクリーンショット 2021-07-04 18.45.28.png

参考資料

5
3
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
3