スケジュールされたタスクを12時間ごとに実行することだけを目的としたAWSECSクラスターがあります。現在、クラスターを1インスタンスにスケーリングしたままにして、タスクを実行できる場所を確保しています。代わりに、クラスターを0インスタンスのままにして、スケジュールされたタスクの実行時に1インスタンスまで自動スケールアップし、タスクの終了時に0に戻すように構成したいと思います。
私の調査によると、ECS自動スケーリングは通常、リソース使用率などのメトリックに従ってインスタンスをスケーリングするために使用されるため、私が望むことは不可能な場合があります。私が見つけた最も近い解決策は、説明されているように、自動スケーリンググループのスケジュールされたアクションを作成することです ここ ;スケジュールされたタスクが実行される直前に、クラスターを12時間ごとにスケールアップするようにスケジュールすることはできますが、タスクの終了後にのみクラスターがスケールダウンするようにする方法はわかりません。 (これは本質的に この回答 によって提案された解決策ですが、それは2年以上前のものであり、状況が変化して私が望むものを許可することを望んでいます。)
したがって、理想的には、クラスターはスケジュールされたタスク自体に応じてスケーリングする必要があります。これは可能ですか?
ファーゲートコンテナでタスクを実行できますか?
Fargateを使用すると、EC2インスタンスを実行および管理する必要はありません。ジョブを、Fargateで実行するようにスケジュールするだけで、それを実行できます。 EC2ベースのECSクラスターと同じように、標準のDockerイメージを実行します。唯一の制限は、ネットワークファイルシステムのマウントや子コンテナの生成などの特権操作を実行できないことです。しかし、それが必要ない場合は、真剣に検討する必要があります。
お役に立てば幸いです:)
500GBのストレージが必要だとおっしゃっていますが、AWS StepFunctionを使用してストレージを調整することを検討してください。 ステップ関数を12時間ごとに、また次のことを行うたびにトリガーします。
AWS Batchジョブを作成し、必要なインスタンスタイプとディスク容量を指定します。 スポットインスタンスを使用してコストを削減することもできます。
ジョブが完了するまで待ちます。
成功を報告/失敗時に再試行します。
Step Functionsコンソールには、実際にはサンプルプロジェクトバッチジョブの管理があります。
または、必要に応じてAWS Batchなしで同じことを行い、カスタムLambda関数を作成して、インスタンスを起動し、成功を待ち、タスクを開始し、成功を待ち、インスタンスを破棄し、成功を待つことができます。ただし、Batchを使用してすべてを行うこともできます。
お役に立てば幸いです:)