チュートリアル: CloudWatch アラームを使用したコンテナインスタンスのスケーリング
2019 年 12 月から、Amazon ECS では、コンテナインスタンスのスケーリングの代わりに、クラスターの自動スケーリングを使用できるようになりました。詳細については、「Amazon ECS クラスターの Auto Scaling」を参照してください。
次の手順は、Amazon ECS クラスター用の Auto Scaling グループを作成するのに役立ちます。Auto Scaling グループ には、CloudWatch アラームを使用してスケールアウト (およびイン) できるコンテナインスタンスが含まれます。
クラスターで使用する Amazon EC2 インスタンスタイプ、およびクラスター内にあるコンテナインスタンスの数によっては、タスクの実行時に使用できるリソースの量に制限があります。Amazon ECS は、クラスター内で使用できるリソースをモニタリングし、スケジューラと連携してタスクを配置します。クラスターでメモリなどこれらのリソースが不足すると、コンテナインスタンスを追加したり、サービスのタスクの必要数を減らしたり、クラスターで実行中のタスクの一部を停止して制約のあるリソースを解放したりするまで、最終的には他のタスクを起動できなくなります。
このチュートリアルでは、クラスターの MemoryReservation
メトリクスを使用して、CloudWatch アラームとステップスケーリングポリシーを作成します。クラスターのメモリ予約が 75% を上回った (クラスター内のメモリの 25% しか新しいタスク用に予約できない) 場合、アラームによって Auto Scaling グループがトリガーされて、別のインスタンスが追加され、タスクとサービス用にリソースが増えます。
前提条件
このチュートリアルでは、クラスターとサービスに対して CloudWatch メトリクスを有効にしていることを前提としています。クラスターとサービスが CloudWatch にメトリクスを送信するまで、メトリクスは使用できません。また、まだ存在しないメトリクスに対して CloudWatch アラームを作成することはできません。詳細については、「CloudWatch メトリクスの有効化」を参照してください。
ステップ 1: メトリクスの CloudWatch アラームを作成する
クラスターとサービスに対して CloudWatch メトリクスを有効にし、クラスターのメトリクスが CloudWatch コンソールに表示されたら、メトリクスに関するアラームを設定できます。詳細については、Amazon CloudWatch ユーザーガイド の「Amazon CloudWatch アラームの作成」を参照してください。
このチュートリアルでは、クラスター MemoryReservation
メトリクスに関するアラームを作成して、クラスターのメモリ予約が 75% を上回ると警告されるようにします。
メトリクスの CloudWatch アラームを作成するには
CloudWatch コンソール (https://console.aws.amazon.com/cloudwatch/
) を開きます。 -
左ナビゲーションで、[アラーム]、[アラームの作成] の順に選択します。
-
[CloudWatch Metrics by Category] セクションで、[ECS Metrics > ClusterName] を選択します。
-
[Modify Alarm] ページで、デフォルトのクラスターの
MemoryReservation
メトリクスを選択してから、[Next] を選択します。 -
[Alarm Threshold] セクションで、アラームの名前と説明を入力します。
-
名前:
memory-above-75-pct
-
説明:
Cluster memory reservation above 75%
-
-
MemoryReservation
が 1 期間で 75% を上回ることを、しきい値と期間の条件として設定します。 -
(オプション) アラームのトリガー時に送信する通知を設定します。現時点で通知を設定する必要がない場合は、通知を削除するように選択することもできます。
-
[Create Alarm] (アラームの作成) を選択します。これで、このアラームを使用して、メモリ予約が 75% を上回ったときに Auto Scaling グループを開始して、コンテナインスタンスを追加できます。
-
(オプション) メモリ予約が 25% を下回ったときにトリガーされる別のアラームを作成することもできます。このアラームを使用して、この条件になったときに Auto Scaling グループからコンテナインスタンスを削除できます。
ステップ 2: Auto Scaling グループの起動設定を作成する
これで、CloudWatch メトリクスを有効にし、これらのメトリクスの 1 つに基づいてアラームを作成したので、クラスター用の起動設定と Auto Scaling グループを作成できます。詳細およびその他の設定オプションについては、起動設定のAmazon EC2 Auto Scaling ユーザーガイド。
Auto Scaling 起動設定を作成するには
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 -
ナビゲーションペインで、[Auto Scaling グループ] を選択します。
-
[Welcome to Auto Scaling] (オートスケーリングへようこそ) ページで、[Create Auto Scaling Group] (Auto Scaling グループの作成) を選択します。
-
[Auto Scaling グループの作成] ページで、[Create a new launch configuration (新しい起動設定を作成する)] を選択します。
-
[Create Auto Scaling Group (Auto Scaling グループの作成)] ウィザードの [Choose (AMI の選択)] ステップで、[Community AMIs (コミュニティ AMI)] を選択します。
-
Auto Scaling グループ用に、最新の Amazon ECS に最適化された Amazon Linux 2 AMI を選択します。Amazon ECS に最適化された Amazon Linux 2 AMI を取得する方法については、「Amazon ECS に最適化された AMI メタデータを取得する」を参照してください。
-
[Create Auto Scaling Group (Auto Scaling グループの作成)] ウィザードの [Choose Instance Type (インスタンスタイプの選択)] ステップで、 グループのインスタンスタイプを選択してから、[Next: Configure details (次の手順: 詳細設定)] を選択します。
-
[Create Auto Scaling Group] (Auto Scaling グループの作成) ウィザードの [Configure details] (詳細設定) ステップで、以下の情報を入力します。その他のフィールドはオプションです。詳細については、Amazon EC2 Auto Scaling ユーザーガイドの「起動設定を起動テンプレートに置き換える」を参照してください。
-
Name: 起動設定の名前を入力します。
-
IAM role: コンテナインスタンスの
ecsInstanceRole
を選択します。このロールを設定していない場合は、Amazon ECS コンテナインスタンスの IAM ロール を参照してください。 -
[IP アドレスタイプ] コンテナインスタンスに必要な IP アドレスタイプのオプションを選択します。外部トラフィックがコンテナに到達できるようにする場合は、[パブリック IP アドレスをすべてのインスタンスに割り当て] を選択します。
-
-
[Advanced Details (高度な詳細)] セクションを展開して、Amazon ECS コンテナインスタンスのユーザーデータを指定します。詳細については、「Amazon ECS コンテナエージェントの設定」を参照してください。
次のスクリプトを [ユーザーデータ] フィールドに貼り付けます。作業しているクラスターの名前を参照します。
#!/bin/bash echo ECS_CLUSTER=
my-cluster
>> /etc/ecs/ecs.config -
[Next: Add Storage] (次へ: ストレージの追加) をクリックします。
-
[Create Auto Scaling Group] (Auto Scaling グループの作成) ウィザードの [Add Storage] (ストレージの追加) ステップで、インスタンスに必要なストレージ設定の変更を行い、[Next: Configure Security Group] (次のステップ: セキュリティグループの設定) を選択します。
-
[Create Auto Scaling Group] (Auto Scaling グループの作成) ウィザードの [Configure Security Group] (セキュリティグループの設定) ステップで、コンテナのニーズを満たす既存のセキュリティグループを選択するか、新しいセキュリティグループを作成して、[Review] (確認) を選択します。
-
起動設定を確認し、[Create launch configuration] を選択します。
-
インスタンスへの SSH 接続に使用するプライベートキーを選択したら、[起動設定の作成] を選択します。新しい起動設定を使用する Auto Scaling グループを作成する手順に進みます。
ステップ 3: ステップスケーリングポリシーを使用して Auto Scaling グループを作成する
起動設定が完了したら、以下の手順に進み、起動設定を使用する Auto Scaling グループを作成します。
ステップスケーリングポリシーを使用する Auto Scaling グループを作成するには
-
[Create Auto Scaling Group] (Auto Scaling グループの作成) ウィザードの [Configure Auto Scaling group details] (Auto Scaling グループの詳細設定) のステップで、以下の情報を入力し、[Next: Configure scaling policies] (次のステップ: スケーリングポリシーの設定) を選択します。
-
グループ名:Auto Scaling グループの名前を入力します。
-
[グループサイズ:] Auto Scaling グループが開始されるコンテナインスタンスの数を指定します。
-
[ネットワーク] コンテナインスタンスを起動する VPC を選択します。
-
[サブネット] コンテナインスタンス起動するサブネットを選択します。可用性の高いクラスターに対しては、リージョン内のすべてのサブネットを有効にすることをお勧めします。
-
-
[Create Auto Scaling Group] (Auto Scaling グループの作成) ウィザードの [Configure scaling policies] (スケーリングポリシーの設定) ステップで、[Use scaling policies to adjust the capacity of this group] (スケーリングポリシーを使用してこのグループの容量を調整) を選択します。
-
Auto Scaling グループのコンテナインスタンスの最小数と最大数を入力します。
-
[Scale the Auto Scaling group using step or simple scaling policies (ステップまたは簡易スケーリングポリシーを使用して Auto Scaling グループをスケーリングする)] を選択します。
-
[Increase Group Size (グループサイズの増加)] ペインで、以下の情報を入力します。
-
[Execute policy when:] (次の場合にポリシーを実行:) 先ほど構成した
memory-above-75-pct
CloudWatch アラームを選択します。 -
[アクションを実行:] アラームがトリガーされたときにクラスターに追加するキャパシティーユニット (インスタンス) の数を入力します。
-
-
グループサイズの縮小をトリガーするようにアラームを設定した場合は、[Decrease Group Size] セクションでそのアラームを設定し、そのアラームがトリガーされた場合に削除するインスタンスの数を指定します。それ以外の場合は、[Decrease Group Size (グループサイズの減少)] セクションを折りたたみます。そのためには、このセクションの右上隅にある [X] を選択します。
注記 コンテナインスタンスを削除するように Auto Scaling グループを設定した場合、削除されるコンテナインスタンスで実行中のタスクはすべて停止されます。タスクがサービスの一部として実行されている場合、Amazon ECS は必要なリソース (CPU、メモリ、ポート) が使用可能であれば、 は別のインスタンスでそれらのタスクを再開します。ただし、手動で開始したタスクは自動的に再開されません。
-
[Review (レビュー)]、[Create Auto Scaling group (Auto Scaling グループを作成)] の順に選択します。
ステップ 4: Auto Scaling グループを検証してテストする
これで、Auto Scaling グループを作成したので、Amazon EC2 コンソールの [Instances (インスタンス)] ページで、インスタンスが起動するのを確認できます。これらのインスタンスも起動後に ECS クラスターに登録する必要があります。
EC2 インスタンスがクラスターに登録されていることを確認します。ECS コンソールから、インスタンスを登録したクラスターを選択します。[Cluster] ページで、[ECS Instances] を選択します。表示されたインスタンスの [エージェントに接続] の値が [True] であることを確認します。
Auto Scaling グループが適切に設定されているかどうかをテストするために、大量のメモリを消費してクラスターでの起動を開始するタスクをいくつか作成します。指定した期間に 75% のメモリ予約を上回ると、CloudWatch アラームがトリガーされて、Amazon EC2 コンソールで新しいインスタンスが起動されたら、テストは成功です。
ステップ 5: クリーンアップする
不要になったステップスケーリングポリシーは削除できます。CloudWatch アラームを削除することも必要になります。ステップスケーリングポリシーを削除すると、基盤となるアラームアクションも削除されます。ただし、スケーリングポリシーに関連付けられたアクションがない場合でも、関連付けられた CloudWatch アラームは削除されません。
ステップスケーリングポリシーとそれに関連付けられた CloudWatch アラームを削除するには
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 -
ナビゲーションペインの Auto Scaling で、[Auto Scaling Groups] (Auto Scaling グループ) を選択します。
-
Auto Scaling グループを選択します。
-
[Scaling Policies (スケーリングポリシー)] タブで、[Actions (アクション)]、[Delete (削除)] の順に選択します。
-
確認を求めるメッセージが表示されたら、[Yes、Delete] を選択します。
-
ポリシーに関連付けられた CloudWatch アラームを削除するには、以下の手順を実行します。
CloudWatch コンソール (https://console.aws.amazon.com/cloudwatch/
) を開きます。 -
ナビゲーションペインで、[アラーム] を選択します。
-
アラームを選択してから、[Action (アクション)]、[Delete (削除)] の順に選択します。
-
確認を求めるメッセージが表示されたら、[削除] を選択します。
このチュートリアルを完了したら、クラスターに対して Auto Scaling グループと Amazon EC2 インスタンが稼働中になるように選択できます。ただし、これらのリソースをアクティブに使用していない場合は、アカウントで不要な料金が発生しないように、リソースのクリーンアップを検討する必要があります。Auto Scaling グループを削除して、そのグループ内の Amazon EC2 インスタンスを削除することはできますが、起動設定はそのまま残ります。後で必要に応じて、その起動設定を使用して新しい Auto Scaling グループ を作成できます。
Auto Scaling グループを削除するには
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 -
ナビゲーションペインで、[Auto Scaling グループ] を選択します。
-
先ほど作成した Auto Scaling グループ を選択します。
-
[ Actions] で、[Delete ] を選択します。
-
[Yes, Delete] を選択します。