はじめに
過去にECS環境を作成するためのCFnテンプレートを公開しました。
しかし、当時公開していたテンプレートではオンデマンドインスタンスのみを実行する設定になっていたため、ECSのメリットであるスポットインスタンスの活用のしやすさが活かせていません。
↓過去記事はこちら
今回はECSでスポットインスタンス混在のクラスターを作成するCFnテンプレートを作成したので記事にしました。
テンプレート置き場
https://github.com/noname-work/aws-cloudformation/tree/master/ecs/ecs-on-ec2
AutoScalingの起動設定ではスポット混在できない
過去に作成したオンデマンドインスタンスのみを実行するテンプレートの場合は、[AWS::AutoScaling::LaunchConfiguration]を指定してAutoScalingの起動設定を作成しています。
オンデマンドインスタンスやリザーブドインスタンス(or SavingPlan)のみを使う場合はこれで良いのですが、スポットインスタンスを混在させたい場合はAutoScaling起動設定の利用ができません。
EC2起動テンプレートを作成
AutoScalingグループからスポットインスタンス混在でインスタンスを起動したい場合には、AutoScaling起動設定ではなくEC2の起動テンプレート[AWS::EC2::LaunchTemplate]を定義します。
ちなみにインスタンスタイプを2種類設定できるようにしている理由は、1つのインスタンスタイプのみしか設定できない場合に、そのインスタンスタイプのスポットインスタンスが枯渇していると目標のインスタンス台数が確保できなくなってしまうためです。
EC2の起動テンプレート内ではInstanceType1しか指定していませんが、AutoScalingグループ内できちんと上書きしていますのでご安心を。
パラメータ
ClusterName | 作成予定のECSクラスター名を入力します。 |
InstanceType1 | 優先的に実行するインスタンスタイプを選択します。 |
InstanceType2 | 予備のインスタンスタイプを選択。 |
ECSSubnetIDs | ECSインスタンスを立てるサブネットを選択します。 |
KeyName | ECSインスタンスに接続するためのキーペアを選択します。 |
ImageId | ECSに最適化されたAMIのIDを入力します。 |
ECSSecurityGroups | ECSインスタンスにアタッチするセキュリティグループを選択します。 |
OnDemandInstancePercentage | オンデマンドインスタンスの割合を設定します。 |
ScalingDesiredCapacity | ECSインスタンスの希望数です。 |
ScalingMaxSize | ECSインスタンスの最大数です。 |
ScalingMinSize | ECSインスタンスの最小数です。 |
おわりに
スポットインスタンス混在のECSクラスターを作成するテンプレートを公開しました。
スポットインスタンスはコンテナオーケストレーションと非常に相性が良いため、活用することでコストを大きく下げることができます。
ホストインスタンス全体のキャパシティが余っていれば、万が一いくつかのスポットインスタンスが停止してしまう場合でもドレイニングによって必要なコンテナを別のホストインスタンスに避難させることができるため、必要なコンテナ数を担保することが可能です。
また、AutoScalingにより停止したスポットインスタンスの数だけ新しいインスタンスが補充されますので、きちんと設計されたECSクラスターであればスポットインスタンスの比率を高く採用していてもサービスダウンにつながりにくいです。
是非ともコストカットのための参考になれば幸いです。
コメントを残す