こんにちは、新卒1年目のインフラエンジニアです。
今回は、AWSのECS(Elastic Container Service)でよく出てくる
「サービス」と「タスク」の違いについて整理しました。おそらく調べてみれば誰でもわかる内容ですが、、、、
ECSとは
ECSは、AWS上でDockerコンテナを管理・実行するサービスです。
インフラを意識せずにコンテナを動かせる点が特徴です。
ECSでクラスターを作成すると、サービスやタスクを作成できます。
タスク(Task)とは?
タスクは、1つまたは複数のコンテナをまとめた「実行単位」です。
- 実行内容は「タスク定義(Task Definition)」に記述します
- タスクが実行されると、指定したコンテナ群が起動します
タスク定義 = タスクの設計図で、JSONで記述されます。AWSのGUIからポチポチする分にはJSONを意識することはありません。
タスク = 設計図をもとに起動された実行中のアプリケーション
タスク定義で決めること(一部抜粋)
項目 | 説明例 |
---|---|
コンテナイメージ |
nginx:latest など、ECR/DockerHub から指定 |
ポート | 例: 80(外部公開)、3000(アプリ用) |
環境変数 | DB接続情報、APIキーなど |
メモリ・CPU | 例: 512MB, 0.25vCPU |
ログ設定 | CloudWatch Logs に出すかどうか |
起動タイプ | Fargate または EC2 |
サービス(Service)とは?
サービスは、指定した数のタスクを常に維持する仕組みです。
- タスクがなんらかの理由で落ちたら自動で再起動
- タスク数のスケーリングも可能
- ALBとの連携で、外部公開にも対応
- CodeDeployなどと組み合わせて、ローリングアップデートも可能
サービス作成時に決めること
項目 | 説明例 |
---|---|
起動するタスク定義 | 例: my-app-task:5 (v5) |
タスク数 | 例: 常時3つ動かしたいなら「3」 |
デプロイ戦略 | ローリング更新 / blue-green(CodeDeploy)など |
ロードバランサー | ALBを使って外部に公開するか |
ヘルスチェック | タスクが正常に動いているかの監視方法 |
Auto Scaling | CPU/メモリ使用量に応じて増減させるかどうか |
サービスは「タスクをどのように・どれだけ・いつまで動かすか」を管理するマネージャーであり、サービスを作成しても実際に動くのはタスクとなります。
AWSを触って数週間の頃の私は、サービスとタスクの違いがよくわかっていませんでした。
サービスを作成したのちに、不要となった起動済みタスクを削除しても自動でタスクが起動してくる現象に焦りを覚えました。タスクが起動し続けて多額の請求が来るのではないかと。(インスタンスタイプがt2.microなので実際そこまでお金かからない)
ECSの概念をまとめると、ECSクラスター>ECSサービス>タスク定義という包容関係となっています。
タスクとサービスの使い分け
やりたいこと | タスクだけでOK | サービスが必要 |
---|---|---|
開発環境で一時的に実行 | ○ | |
本番環境で安定稼働させたい | ○ | |
自動でスケールさせたい | ○ | |
外部からALB経由でアクセスさせたい | ○ |
今後、もう少し踏み込んだ内容をアウトプットとして書き起こしていきたいと思います。