Amazon Elastic Container Service
開発者ガイド (API バージョン 2014-11-13)

チュートリアル: CloudWatch アラームを使用したコンテナインスタンスのスケーリング

以下の手順は、CloudWatch アラームを使用してスケールアップ (およびダウン) できるコンテナインスタンスを含む Amazon ECS クラスター用の Auto Scaling グループを作成するために役立ちます。

クラスターで使用する Amazon EC2 インスタンスタイプ、クラスター内にあるコンテナインスタンスの数によっては、タスクの実行時に使用できるリソースの量に制限があります。Amazon ECS は、クラスター内で使用できるリソースをモニタリングし、スケジューラと連携してタスクを配置します。クラスターでメモリなどこれらのリソースが不足すると、コンテナインスタンスを追加したり、サービスのタスクの必要数を減らしたり、クラスターで実行中のタスクの一部を停止して制約のあるリソースを解放したりするまで、最終的には他のタスクを起動できなくなります。

このチュートリアルでは、クラスターの MemoryReservation メトリクスを使用して CloudWatch アラームを作成します。クラスターのメモリ予約が 75% を上回った (クラスター内のメモリの 25% しか新しいタスク用に予約できない) 場合、アラームによって Auto Scaling グループがトリガーされて、別のインスタンスが追加されて、タスクとサービス用にリソースが増えます。

前提条件

このチュートリアルでは、クラスターとサービスに対して CloudWatch メトリクスを有効にしていることを前提としています。クラスターとサービスが CloudWatch にメトリクスを送信するまで、メトリクスは使用できません。また、まだ存在しないメトリクスに対して CloudWatch アラームを作成することはできません。

Amazon ECS コンテナインスタンスには、CloudWatch メトリクスを使用可能にするために、コンテナエージェントのバージョン 1.4.0 以上が必要です。エージェントのバージョンの確認と最新バージョンへの更新については、「Amazon ECS コンテナエージェントの更新」を参照してください。

Amazon ECS コンテナインスタンスには、コンテナインスタンスを起動するための ecs:StartTelemetrySession アクセス権限を付与した IAM ロールも必要です。CloudWatch メトリクスが Amazon ECS で使用可能になる前に Amazon ECS コンテナインスタンスを作成した場合は、このアクセス権限を追加する必要がある場合があります。Amazon ECS コンテナインスタンスのロールの確認とコンテナインスタンスのマネージド IAM ポリシーのアタッチについては、「IAM コンソールで ecsInstanceRole を確認するには」を参照してください。

ステップ 1: メトリクスの CloudWatch アラームを作成する

クラスターとサービスに対して CloudWatch メトリクスを有効にし、クラスターのメトリクスが CloudWatch コンソールに表示されたら、メトリクスに関するアラームを設定できます。詳細については、Amazon CloudWatch ユーザーガイド の「Amazon CloudWatch アラームの作成」を参照してください。

このチュートリアルでは、クラスター MemoryReservation メトリクスに関するアラームを作成して、クラスターのメモリ予約が 75% を上回ると警告されるようにします。

メトリクスに関する CloudWatch アラームを作成するには

  1. https://console.aws.amazon.com/cloudwatch/にある CloudWatch コンソールを開きます。

  2. 左側のナビゲーションで [Alarms] を選択します。

  3. [Create Alarm] を選択します。

  4. [CloudWatch Metrics by Category] セクションで、[ECS Metrics > ClusterName] を選択します。

  5. [Modify Alarm] ページで、デフォルトのクラスターの MemoryReservation メトリクスを選択してから、[Next] を選択します。

  6. [Alarm Threshold] セクションで、アラームの名前と説明を入力します。

    • 名前: memory-above-75-pct

    • Description: Cluster memory reservation above 75%

  7. MemoryReservation が 1 期間で 75% を上回ることを、しきい値と期間の条件として設定します。

     CloudWatch アラームのしきい値
  8. (オプション) アラームのトリガー時に送信する通知を設定します。現時点で通知を設定する必要がない場合は、通知を削除するように選択することもできます。

  9. [Create Alarm] を選択します。これで、このアラームを使用して、メモリ予約が 75% を上回ったときに Auto Scaling グループを開始して、コンテナインスタンスを追加できます。

  10. (オプション) メモリ予約が 25% を下回ったときにトリガーされる別のアラームを作成することもできます。このアラームを使用して、この条件になったときに Auto Scaling グループからコンテナインスタンスを削除できます。

ステップ 2: Auto Scaling グループの起動設定を作成する

これで、CloudWatch メトリクスを有効にし、これらのメトリクスの 1 つに基づいてアラームを作成したので、クラスター用の起動設定と Auto Scaling グループを作成できます。詳細およびその他の設定オプションについては、Amazon EC2 Auto Scaling ユーザーガイド を参照してください。

Auto Scaling 起動設定を作成するには

  1. https://console.aws.amazon.com/ec2/) にある Amazon EC2 コンソールを開きます。

  2. 左側のナビゲーションで [Auto Scaling Groups] を選択します。

  3. [Welcome to Auto Scaling] ページで、[Create Auto Scaling Group] を選択します。

  4. [Create Auto Scaling Group] ページで、[Create launch configuration] を選択します。

  5. [Create Auto Scaling Group] ウィザードの [Choose AMI] ステップで、[Community AMIs] を選択します。

  6. Auto Scaling グループの ECS に最適化された AMI を選択します。

    Amazon ECS に最適化された AMI を使用するには、[Search community AMIs] フィールドに「amazon-ecs-optimized」と入力し、Enter キーを押します。["amzn-ami-2018.03.g-amazon-ecs-optimized"] AMI の横にある [Select] を選択します。

    参考までに、現在のリージョン別の Amazon ECS-optimized Linux AMI ID を以下に示します。

    サービス対象 AMI 名 AMI ID EC2 コンソールリンク
    us-east-2 amzn-ami-2018.03.g-amazon-ecs-optimized ami-09a64272e7fe706b6 インスタンスを起動する
    us-east-1 amzn-ami-2018.03.g-amazon-ecs-optimized ami-0b9a214f40c38d5eb インスタンスを起動する
    us-west-2 amzn-ami-2018.03.g-amazon-ecs-optimized ami-00430184c7bb49914 インスタンスを起動する
    us-west-1 amzn-ami-2018.03.g-amazon-ecs-optimized ami-0e7dd5fe55b87a5fe インスタンスを起動する
    eu-west-3 amzn-ami-2018.03.g-amazon-ecs-optimized ami-06b685336aa497c15 インスタンスを起動する
    eu-west-2 amzn-ami-2018.03.g-amazon-ecs-optimized ami-0209769f0c963e791 インスタンスを起動する
    eu-west-1 amzn-ami-2018.03.g-amazon-ecs-optimized ami-05b65c0f6a75c1c64 インスタンスを起動する
    eu-central-1 amzn-ami-2018.03.g-amazon-ecs-optimized ami-0bb804e8cd910a664 インスタンスを起動する
    ap-northeast-2 amzn-ami-2018.03.g-amazon-ecs-optimized ami-0d947b1901b27a37c インスタンスを起動する
    ap-northeast-1 amzn-ami-2018.03.g-amazon-ecs-optimized ami-08681de00a0aae54f インスタンスを起動する
    ap-southeast-2 amzn-ami-2018.03.g-amazon-ecs-optimized ami-05b48eda7f92aadbe インスタンスを起動する
    ap-southeast-1 amzn-ami-2018.03.g-amazon-ecs-optimized ami-0a3f70f0255af1d29 インスタンスを起動する
    ca-central-1 amzn-ami-2018.03.g-amazon-ecs-optimized ami-00d1bdbd447b5933a インスタンスを起動する
    ap-south-1 amzn-ami-2018.03.g-amazon-ecs-optimized ami-0590d0dd683026eab インスタンスを起動する
    sa-east-1 amzn-ami-2018.03.g-amazon-ecs-optimized ami-01bca91ecf4c1f494 インスタンスを起動する
    us-gov-west-1 amzn-ami-2018.03.g-amazon-ecs-optimized ami-5256cf33 インスタンスを起動する
  7. [Create Auto Scaling Group] ウィザードの [Choose Instance Type] ステップで、Auto Scaling グループのインスタンスタイプを選択してから、[Next: Configure details] を選択します。

  8. [Create Auto Scaling Group] ウィザードの [Configure details] ステップで、以下の情報を入力します。その他のフィールドはオプションです。詳細については、Amazon EC2 Auto Scaling ユーザーガイド の「起動設定の作成」を参照してください。

    • Name: 起動設定の名前を入力します。

    • IAM role: コンテナインスタンスの ecsInstanceRole を選択します。このロールを設定していない場合は、「Amazon ECS コンテナインスタンスの IAM ロール」を参照してください。

    • IP Address Type: コンテナインスタンスに必要な IP アドレスタイプのオプションを選択します。外部トラフィックがコンテナに到達できるようにする場合は、[Assign a public IP address to every instance] を選択します。

  9. (オプション) EC2 ユーザーデータを使用してコンテナインスタンスに渡す設定情報がある場合は、[Advanced Details] を選択し、[User data] フィールドにユーザーデータを入力します。詳細については、「Amazon ECS コンテナエージェントの設定」を参照してください。

  10. [次の手順: ストレージの追加] を選択します。

  11. [Create Auto Scaling Group] ウィザードの [Add Storage] ステップで、インスタンスに必要なストレージ設定の変更を行い、[Next: Configure Security Group] を選択します。

  12. [Create Auto Scaling Group] ウィザードの [Configure Security Group] ステップで、コンテナのニーズを満たす既存のセキュリティグループを選択するか、新しいセキュリティグループを作成して、[Review] を選択します。

  13. 起動設定を確認し、[Create launch configuration] を選択します。

  14. インスタンスへの SSH 接続に使用するプライベートキーを選択したら、[Create launch configuration] を選択して終了し、新しい起動設定を使用する Auto Scaling グループを作成する手順に進みます。

ステップ 3: クラスター用の Auto Scaling グループを作成する

起動設定が完了したら、以下の手順に進み、起動設定を使用する Auto Scaling グループを作成します。

Auto Scaling グループを作成するには

  1. [Create Auto Scaling Group] ウィザードの [Configure Auto Scaling group details] の手順で、以下の情報を入力し、[Next: Configure scaling policies] を選択します。

    • Group name: Auto Scaling グループの名前を入力します。

    • Group size: Auto Scaling グループが開始されるコンテナインスタンスの数を指定します。

    • Network: コンテナインスタンスを起動する VPC を選択します。

    • Subnet: コンテナインスタンスを起動するサブネットを選択します。可用性の高いクラスターに対しては、リージョン内のすべてのサブネットを有効にすることをお勧めします。

  2. [Create Auto Scaling Group] ウィザードの [Configure scaling policies] ステップで、[Use scaling policies to adjust the capacity of this group] を選択します。

  3. Auto Scaling グループのコンテナインスタンスの最小数と最大数を入力します。

  4. [Increase Group Size] ペインで、以下の情報を入力します。

    • Execute policy when: 先ほど設定した memory-above-75-pct CloudWatch アラームを選択します。

    • Take the action: アラームがトリガーされたときにクラスターに追加するインスタンスの数を入力します。

  5. グループサイズの縮小をトリガーするようにアラームを設定した場合は、[Decrease Group Size] セクションでそのアラームを設定し、そのアラームがトリガーされた場合に削除するインスタンスの数を指定します。それ以外の場合は、[Decrease Group Size] セクションを折りたたみます。そのためには、このセクションの右上隅にある [X] をクリックします。

    注記

    コンテナインスタンスを削除するように Auto Scaling グループを設定した場合、削除されるコンテナインスタンスで実行中のタスクはすべて強制終了されます。タスクがサービスの一部として実行されている場合、必要なリソース (CPU、メモリ、ポート) が使用可能であれば、Amazon ECS は別のインスタンスでそれらのタスクを再開します。ただし、手動で開始したタスクは自動的に再開されません。

  6. [Review] を選択して Auto Scaling グループを確認したら、[Create Auto Scaling Group] を選択して終了します。

ステップ 4: Auto Scaling グループを検証してテストする

これで、Auto Scaling グループを作成したので、Amazon EC2 コンソールの [Instances] ページで、インスタンスが起動していることを確認できます。これらのインスタンスも起動後に Amazon ECS クラスターに登録する必要があります。

Auto Scaling グループが適切に設定されているかどうかをテストするために、大量のメモリを消費してクラスターでの起動を開始するタスクをいくつか作成できます。指定した期間に 75% のメモリ予約を上回ると、CloudWatch アラームがトリガーされて、EC2 コンソールで新しいインスタンスが起動されたら、テストは成功です。

ステップ 5: クリーンアップする

このチュートリアルを完了したら、クラスターに対して Auto Scaling グループと Amazon EC2 インスタンスが稼働中になるように選択できます。ただし、これらのリソースをアクティブに使用していない場合は、アカウントで不要な料金が発生しないように、リソースのクリーンアップを検討する必要があります。Auto Scaling グループを削除して、そのグループ内の Amazon EC2 インスタンスを削除することはできますが、起動設定はそのまま残ります。そのため、後で必要に応じて、その設定を使用して新しい Auto Scaling グループを作成できます。

Auto Scaling グループを削除するには

  1. https://console.aws.amazon.com/ec2/) にある Amazon EC2 コンソールを開きます。

  2. 左側のナビゲーションで [Auto Scaling Groups] を選択します。

  3. このチュートリアルで作成した Auto Scaling グループを選択します。

  4. [Actions] を選択してから、[Delete ] を選択します。

  5. [Yes, Delete] を選択して、Auto Scaling グループを削除します。