maco's life

最近は技術以外のことを主に記載しています。

ECSでSpotFleetを使う

ECSでは状態を持たないdockerコンテナを起動させたりするので、同じく状態を持ちにくく低価格で扱えるスポットインスタンスと相性がいいです。

今回はEC2::SpotFleetをECSで使う方法の備忘録です。

ほぼ公式ドキュメントのまんまですが。

1. AWSコンソールのEC2のスポットリクエストを選択

ここから選択

2. スポットインスタンスをリクエストする

f:id:Maco_Tasu:20170216201656p:plain

3. リクエストタイプを設定する

f:id:Maco_Tasu:20170216201823p:plain

ここで注意しないといけないのはAMIが各リージョン毎にECSに最適化AMIがあるのでそちらを選ぶことです。最適化インスタンスは先程の公式ドキュメントにありますが、tokyo regionだとami-c393d6a4の模様。

4. ストレージの設定

f:id:Maco_Tasu:20170216202734p:plain

ここは特にハマるところないですが、EBS最適化インスタンスを起動するは必要であればチェックしましょう。

5. インスタンスの詳細

f:id:Maco_Tasu:20170216202844p:plain

ここでユーザデータに下記の設定をいれるとECSのインスタンスとして使えるようになります。your_cluster_nameは登録したいクラスターの名前に書き換えてください。

#!/bin/bash
echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.config

6. キーペアおよびロールの設定

f:id:Maco_Tasu:20170216203101p:plain

IAMインスタンスプロフィールにはAmazonEC2ContainerServiceforEC2Roleがついているものを選びましょう。この権限がないとECSへのインスタンス追加・削除等の権限ないためエラーになりそうです。 またIAMフリートロールはsws-ec2-spot-fleet-roleのままで大丈夫です。

7. ファイアウォールの設定

f:id:Maco_Tasu:20170216203728p:plain セキュリティグループですが、ALBにぶら下げて動的ポートマッピングをする場合は 32768 - 65535のポートは空けたものにします。

※2017年2月20日追記

0 - 65535と記述していましたが、ecsのエフェメラルポートレンジは 32768 - 65535とご指摘いただいたので修正致しました。 ref. http://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/task_definition_parameters.html

8. リクエスト有効時間の設定

f:id:Maco_Tasu:20170216204015p:plain ここはご都合に合わせた設定で

これでいけるかと思います。あとはSpotInstanceの入札が完了してインスタンスが起動したらECSに追加されるはずです。

おわり!