[新機能] AWS FargateにSpotキャパシティプロバイダが追加されたので試してみた #reinvent

AWS FargateがSpot(EC2のスポットインスタンスみたいなもの)に対応しました!Spotを使用することで、最大70%割り引きでFargateを利用できます。また、Spotキャパシティプロバイダは全リージョンで対応しています!東京リージョンでも今日から使い始められます!
2019.12.04

こんにちは。サービスグループの武田です。

AWS FargateがAmazon EKSに対応してコンテナ界隈が盛り上がっていますね。

[速報] Fargete for EKSがGAされました!!! #reinvent

その裏ではFargateがSpot(EC2のスポットインスタンスみたいなもの)に対応しました!Spotを使用することで、最大70%割り引きでFargateを利用できます。また、Spotキャパシティプロバイダは全リージョンで対応しています!東京リージョンでも今日から使い始められます!

AWS Fargate Spot Now Generally Available | AWS News Blog

さっそく試してみましたので、その様子をお届けします。

なお、タスク定義の手順は本質ではないため、補足として後半に回しました。同じように試してみたいという方はそちらも参考にしてください。

Spotキャパシティプロバイダを使ってみた

まずはクラスターを作成します。Amazon ECSのページにアクセスし、左ペインから「クラスター」を選択し、[クラスターの作成]ボタンを押下します。

デフォルトの「ネットワーキングのみ」のまま、[次のステップ]ボタンを押下します。

クラスター名は任意の名前をつけましょう。またパブリックアクセス可能なサブネットが今回は必要だった *1ため、オプションでVPCも作成しています。

他はデフォルトのまま、ページ下部の[作成]ボタンを押下します。

作成されました。そのままクラスターのページに遷移しましょう。

クラスターのページに[Capacity Providers]というタブがありますのでクリックします。

作成済みのプロバイダが確認できます。 FARGATE_SPOT があることに注目です!

実はこのままではSpotは使えません。クラスターの設定を変更してSpotを使うように設定します。右上にある[Update Cluster]ボタンを押下します。

Default capacity provider strategyの[Add provider]をクリックします。

プルダウンが現れるので、FARGATE_SPOTを選択します。選択できたら[更新]ボタンを押下します。

更新されました。

これで準備は完了です。クラスターページの[タスク]タブを選択し、続いて[新しいタスクの実行]ボタンを押下します。

タスク定義に起動するタスク、タスクの数は2としてみました。

次のVPCなどのネットワーク定義に進みます。ここで注意が必要なんですが、パブリック IP の自動割り当てがなぜか「DISABLED」しか選択できませんでした。今回はタスク定義の都合上パブリックIPが必要なので有効化する必要がありました。

おそらくすぐに修正されるはずですが、現時点でのワークアラウンドを紹介します。

まずページ上部に戻って、「Switch to launch type」のリンクをクリックします。

表示が切り替わるので、起動タイプでFARGATEを選択し、次に「Switch to capacity provider strategy」のリンクをクリックします。

この作業をしてページ下部にスクロールすると、自動割り当ての「ENABLED」が選択できます。

これらの設定ができたらタスクを起動しましょう。クラスターページのタスクタブを見てみると、タスクが2つ起動されていることが確認できます。

いずれかのタスク詳細を開くと、Capacity providerの項目がFARGATE_SPOTになっています!

まとめ

FargateのSpotキャパシティプロバイダがサポートされたことで、より安価にFargateが利用できます。素敵ですね。ただEC2のスポットインスタンスと同じように、利用する上での考慮事項はもちろんあります。これらをしっかりと検討したうえで、便利に使っていきましょう!

Using AWS Fargate Capacity Providers - Amazon Elastic Container Service

補足情報:タスク定義

今回の検証で使用したタスク定義の作り方を掲載しておきます。同じように試してみたいという方は、参考に作ってみてください。

ECSのページにアクセスし、左ペインからタスク定義を選択し、[新しいタスク定義]ボタンを押下します。

起動タイプはFARGATEで[次のステップ]ボタンを押下します。

適当に名前を付けましょう。

タスク実行ロールはすでにあるものを使ってもいいですし、新しく作っても大丈夫です。今回はあるものを指定しています。またメモリとvCPUは一番小さいものを指定しました。

次にコンテナの定義を追加します。[コンテナの追加]ボタンを押下します。

コンテナ名は適当に。イメージはamazonlinux:2を指定しました。

確認用のコマンドとして/bin/sh,-c,while :; do date; sleep 5; doneを指定しました。

そのほかはデフォルトのまま[追加]ボタンを押下します。

コンテナが追加されました。

他はデフォルトのまま、ページ下部の[作成]ボタンを押下します。

無事にタスク定義が作成できました。

脚注

  1. Docker Hubからイメージをpullするため