本文へスキップ
ECS

ECS のスケジュール実行バッチだけ CPU/メモリを増やす ── タスク定義を増やさない設定

Web と同じコンテナイメージで動くバッチだけ、実行時にリソースを上書きする方法。タスク定義を分けずに運用をシンプルに保てます。

ECS Fargate で Web アプリと夜間バッチを同じコンテナイメージで動かしていると、「バッチだけメモリが足りない」という場面がよくあります。リソースを変えるためだけにタスク定義を 2 つ持つと、イメージ更新や環境変数の変更を二重に管理することになり、設定漏れの原因になります。

方針:実行時に overrides で上書きする

ECS の RunTask API には overrides というパラメータがあり、タスク全体の CPU/メモリと、コンテナごとのコマンドを実行時に上書きできます。EventBridge Scheduler のユニバーサルターゲット(ecs:runTask)を使えば、スケジュールの Input にこの値を書くだけで済みます。

{
  "Cluster": "arn:aws:ecs:ap-northeast-1:123456789012:cluster/app",
  "TaskDefinition": "app-web",
  "LaunchType": "FARGATE",
  "NetworkConfiguration": {
    "AwsvpcConfiguration": {
      "Subnets": ["subnet-xxxx"],
      "SecurityGroups": ["sg-xxxx"]
    }
  },
  "Overrides": {
    "Cpu": "2048",
    "Memory": "8192",
    "ContainerOverrides": [
      { "Name": "app", "Command": ["bin/rails", "runner", "DailyReport.run"] }
    ]
  }
}

注意点

まとめ

タスク定義は 1 つに保ち、リソースが必要なジョブだけ実行時に上書きする構成にすると、デプロイの手間と設定ミスを同時に減らせます。バッチごとの必要量は CloudWatch の Container Insights で実測してから決めるのがおすすめです。

まずは30分、
日本語でお気軽にご相談ください。

「こんなことはできますか?」という段階でも構いません。1営業日以内にブリッジSEからご返信します。無理な営業は一切いたしません。

メールで相談無料相談