はじめに
Amazon ECS(Elastic Container Service)を使うとき、多くの場合はECSクラスターを作成すると同時に、バックエンドでEC2インスタンス(=コンテナインスタンス)が自動的に起動します。
これらのインスタンスはECSクラスターに紐づいており、クラスターを削除すれば自動的に消えます。
しかし、
「毎回クラスターを作り直すのは面倒」
「インスタンスを一時的に停止したい」
といったケースもあると思います。
そこで今回は、既存のECSクラスターを残したまま、コンテナインスタンスを自由に起動・停止できる方法を紹介します。
背景:ECSクラスターとEC2の関係
ECSクラスターを「EC2起動タイプ」で作成した場合、クラスターには自動的にAuto Scaling グループが作成されます。
このASGが、EC2インスタンス(コンテナインスタンス)の起動・削除を管理しています。
つまり、
- コンテナインスタンスを増やす・減らす
- 一時的にすべて停止する
といった操作は、Auto Scaling グループの設定を変更するだけで実現できる、という仕組みです。
手順:ECSクラスターを再作成せずにコンテナインスタンスを操作する
1. ECSクラスターを作成
まずは通常通り、ECSクラスターを「EC2起動タイプ」で作成します。
2. EC2コンソールを開く
AWSマネジメントコンソールで「EC2」を開きます。
3. Auto Scaling グループを開く
左のメニューから「Auto Scaling グループ」をクリックします。
4. ECS用のAuto Scaling グループを選択
クラスター作成時に自動生成されたAuto Scaling グループを探してクリックします。
名前は次のようになっているはずです:
Infra-ECS-Cluster-<ECSクラスター名>-ECSAutoScalingGroup-xxxxxxxxxx
5. キャパシティ設定を編集
「キャパシティの概要」セクションにある「編集」をクリックします。
6. インスタンスを停止(削除)する設定
次のように設定して「更新」をクリックします:
- 希望するキャパシティ:
0 - スケーリング制限の最小希望容量:
0
設定後しばらく待つと、EC2インスタンスが自動的に終了します。
ECSコンソールに戻ると、「コンテナインスタンス」が0 EC2と表示されていれば成功です。
7. 再度インスタンスを起動したい場合
停止後に再起動したくなった場合は、同じ手順でAuto Scaling グループを編集し、以下のように設定を戻します:
- 希望するキャパシティ:
1 - スケーリング制限の最小希望容量:
1
数分待てば、新しいEC2インスタンスが起動し、ECSクラスターに自動的に登録されます。
このとき、ECSクラスターの再作成は不要です。
まとめ
| 操作 | 設定値 | 結果 |
|---|---|---|
| コンテナインスタンスを停止 | 希望するキャパシティ:0 / 最小希望容量:0 | EC2インスタンスが削除される |
| コンテナインスタンスを再起動 | 希望するキャパシティ:1 / 最小希望容量:1 | 新しいEC2インスタンスが起動する |
おわりに
もし AWS Fargate を使っている場合は、このようなインスタンス管理は不要です。
しかし、GPUインスタンスなどFargateが対応していない環境では、今回の方法が非常に便利です。
ECSクラスターを使い回しながら、必要なタイミングでコンテナインスタンスを起動・停止できるようになると、コスト削減や管理の手間の軽減にもつながります。ぜひ試してみてください。