

# スケジュールされたアクションを使用して Amazon ECS の予測値を上書きする
<a name="predictive-scaling-overriding-forecast-capacity"></a>

予測計算では考慮できない将来のアプリケーション要件に関する追加情報がある場合があります。例えば、予測の計算では、今後のマーケティングイベントに必要なタスクが過小評価される可能性があります。スケジュールされたアクションを使用して、将来の期間中の予測を一時的に上書きできます。スケジュールされたアクションは、繰り返し実行することも、1 回限りの需要変動がある特定の日時に実行することもできます。

例えば、予測される数よりも多いタスク数でスケジュールされたアクションを作成できます。実行時に、Amazon ECS はサービス内の最小タスク数を更新します。予測スケーリングはタスクの数に合わせて最適化するので、予測値を超える最小タスクの数でスケジュールされたアクションが尊重されます。これにより、タスクの数が予想を下回らないようになります。予測の上書きを停止するには、2 番目にスケジュールされたアクションを使用して、最小タスク数を元の設定に戻します。

次の手順では、将来の期間中の予測を上書きするステップを示します。

**Topics**
+ [ステップ 1: (オプション) 時系列データを分析する](#analyzing-time-series-data)
+ [ステップ 2: 2 つのスケジュールされたアクションを作成する](#scheduling-capacity)

**重要**  
このトピックでは、予測を上書きして、予測よりも大きなキャパシティにスケールしようとしていることを前提としています。予測スケーリングポリシーの干渉なしに一時的にタスク数を減らす必要がある場合は、代わりに *予測のみ* モードを使用します。予測のみモードでは、予測スケーリングは予測を生成し続けますが、自動的にタスク数を増やすことはありません。その後、リソース使用率をモニタリングし、必要に応じてタスク数を手動で減らすことができます。

## ステップ 1: (オプション) 時系列データを分析する
<a name="analyzing-time-series-data"></a>

まず、予測時系列データを分析します。これはオプションのステップですが、予測の詳細を理解したい場合に役立ちます。

1. **予測を取得する**

   予測が作成されたら、予測の特定の期間をクエリできます。このクエリの目的は、特定の期間の時系列データの完全なビューを取得することです。

   クエリには、将来の予測データを最大 2 日間含めることができます。予測スケーリングをしばらく使用している場合は、過去の予測データにアクセスすることもできます。ただし、開始時刻と終了時刻の間の最大期間は 30 日間です。

   [get-predictive-scaling-forecast](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/get-predictive-scaling-forecast.html) AWS CLI コマンドを使用して予測を取得するには、コマンドに次のパラメータを指定します。
   + `resource-id` パラメータにクラスター名を入力します。
   + ポリシーの名前を `--policy-name` パラメータに入力します。
   + 開始時刻を `--start-time` パラメータに入力して、指定した時刻以降の予測データのみが返されるようにします。
   + 終了時刻を `--end-time` パラメータに入力して、指定された時刻より前の予測データのみが返されるようにします。

   ```
   aws application-autoscaling get-predictive-scaling-forecast \
       --service-namespace ecs \
       --resource-id service/MyCluster/test \
       --policy-name {{cpu40-predictive-scaling-policy}} \
       --scalable-dimension ecs:service:DesiredCount \
       --start-time "{{2021-05-19T17:00:00Z}}" \
       --end-time "{{2021-05-19T23:00:00Z}}"
   ```

   成功すると、コマンドは次の例のようなデータを返します。

   ```
   {
       "LoadForecast": [
           {
               "Timestamps": [
                   "2021-05-19T17:00:00+00:00",
                   "2021-05-19T18:00:00+00:00",
                   "2021-05-19T19:00:00+00:00",
                   "2021-05-19T20:00:00+00:00",
                   "2021-05-19T21:00:00+00:00",
                   "2021-05-19T22:00:00+00:00",
                   "2021-05-19T23:00:00+00:00"
               ],
               "Values": [
                   153.0655799339254,
                   128.8288551285919,
                   107.1179447150675,
                   197.3601844551528,
                   626.4039934516954,
                   596.9441277518481,
                   677.9675713779869
               ],
               "MetricSpecification": {
                   "TargetValue": 40.0,
                   "PredefinedMetricPairSpecification": {
                       "PredefinedMetricType": "ASGCPUUtilization"
                   }
               }
           }
       ],
       "CapacityForecast": {
           "Timestamps": [
               "2021-05-19T17:00:00+00:00",
               "2021-05-19T18:00:00+00:00",
               "2021-05-19T19:00:00+00:00",
               "2021-05-19T20:00:00+00:00",
               "2021-05-19T21:00:00+00:00",
               "2021-05-19T22:00:00+00:00",
               "2021-05-19T23:00:00+00:00"
           ],
           "Values": [
               2.0,
               2.0,
               2.0,
               2.0,
               4.0,
               4.0,
               4.0
           ]
       },
       "UpdateTime": "2021-05-19T01:52:50.118000+00:00"
   }
   ```

   応答には `LoadForecast` と `CapacityForecast` の 2 つの予測が含まれています。`LoadForecast` は、時間ごとの負荷予測を示します。`CapacityForecast` は、40.0 の `TargetValue` (平均 CPU 使用率 40%) を維持しながら予測された負荷を処理するために時間単位で必要なキャパシティーの予測値を示します。

1. **ターゲット期間を特定する**

   1 回限りの需要変動が発生する時間または時間範囲を特定します。予測に表示される日付と時刻は UTC であることに注意してください。

## ステップ 2: 2 つのスケジュールされたアクションを作成する
<a name="scheduling-capacity"></a>

次に、アプリケーションの負荷が予測を上回る特定の期間に、2 つのスケジュールされたアクションを作成します。例えば､マーケティングイベントで一時的にトラフィックがサイトに流入する場合は、1 回限りのアクションをスケジュールして、開始時に最小キャパシティーを更新できます。次に、イベント終了時に最小キャパシティーを元の設定に戻す別のアクションをスケジュールします。

1. コンソールを[https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)で開きます。

1. **[クラスター]** ページで、クラスターを選択します。

1. [クラスターの詳細] ページの **[サービス]** セクションで、サービスを選択します。

   [サービス詳細] ページが表示されます。

1. **[サービスの自動スケーリング]** を選択します。

   [ポリシー] ページが表示されます。

1. **[スケジュールされたアクション]** を選択し、**[作成]** を選択します。

   **[スケジュールアクションの作成]** ページが表示されます。

1. **バケット名**に、一意の名前を入力します。

1. [**Time zone (タイムゾーン)**] でタイムゾーンを選択。

   リストされているすべてのタイムゾーンは、IANA タイムゾーンデータベースから取得されます。詳細については、「[List of tz database time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)」を参照してください。

1. **[開始時刻]** で、アクションが開始される **[日付]** と **[時刻]** を入力します。

1. [繰り返し] で、[1 回] を選択してください。********

1. **[タスク調整]** の [最小] には、タスクの最大数以下の値を入力します。

1. **[スケジュールされたアクションの作成]** を選択してください。

   [ポリシー] ページが表示されます。

1. イベントの終了時に、最小タスク数を元の設定に戻すように、2 番目にスケジュールされたアクションを設定します。予測スケーリングでは、**[最小]** に設定した値が予測値未満の場合のみ、タスク数をスケーリングできます。

**1 回限りのイベントに対して 2 つのスケジュールされたアクションを作成するには (AWS CLI)**  
AWS CLI を使用してスケジュールされたアクションを作成するには、[put-scheduled-update-group-action](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/put-scheduled-update-group-action.html) コマンドを使用します。

例えば、5 月 19 日の午後 5 時から 8 時間、最小キャパシティーを 3 インスタンスに維持するスケジュールを定義しましょう。以下のコマンドは、このシナリオを実装する方法を示しています。

最初の [put-scheduled-update-group-action](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/put-scheduled-update-group-action.html) コマンドは、2021 年 5 月 19 日の午後 5 時 (UTC) に指定された Auto Scaling グループの最小キャパシティーを更新するように Amazon EC2 Auto Scaling に指示します。

```
aws autoscaling put-scheduled-update-group-action --scheduled-action-name {{my-event-start}} \
  --auto-scaling-group-name {{my-asg}} --start-time "{{2021-05-19T17:00:00Z}}" --minimum-capacity {{3}}
```

2 番目のコマンドは、2021 年 5 月 20 日の午前 1 時 (UTC) にグループの最小キャパシティーを 1 に設定するように Amazon EC2 Auto Scaling に指示します。

```
aws autoscaling put-scheduled-update-group-action --scheduled-action-name {{my-event-end}} \
  --auto-scaling-group-name {{my-asg}} --start-time "{{2021-05-20T01:00:00Z}}" --minimum-capacity {{1}}
```

これらのスケジュールされたアクションを Auto Scaling グループに追加すると、Amazon EC2 Auto Scaling は次の処理を実行します。
+ 2021 年 5 月 19 日の午後 5 時 (UTC) に、最初にスケジュールされたアクションが実行されます。グループのインスタンスが 3 未満である場合、グループは 3 インスタンスにスケールアウトされます。この時刻以降の 8 時間の間、予測キャパシティーが実際のキャパシティーよりも大きい場合、または動的スケーリングポリシーが有効な場合、Amazon EC2 Auto Scaling は引き続きスケールアウトできます。
+ 2021 年 5 月 20 日の午前 1 時 (UTC) に、2 番目のスケジュールされたアクションが実行されます。これにより、イベントの終了時に最小キャパシティーが元の設定に戻ります。

### 繰り返し起こるスケジュールに基づくスケーリング
<a name="scheduling-recurring-actions"></a>

毎週同じ期間の予測を上書きするには、2 つのスケジュールされたアクションを作成し、cron 式を使用して日時のロジックを指定します。

この cron 式のフォーマットは、スペースで区切られた 5 つのフィールド ([分] [時間] [日] [月] [曜日]) で構成されます。フィールドには、特殊文字を含む任意の許容される値を含めることができます。

例えば、次の cron 式は、毎週火曜日の午前 6:30 にアクションを実行します。アスタリスクは、フィールドのすべての値を照合するワイルドカードとして使用されます。

```
30 6 * * 2
```

### 関連情報
<a name="scheduling-scaling-see-also"></a>

スケジュールされたアクションを管理する方法の詳細については、「[スケジュールされたアクションを使用して Amazon ECS サービスをスケールする](service-autoscaling-schedulescaling.md)」を参照してください。