電通総研 テックブログ

電通総研が運営する技術ブログ

Fargate Spotを開発系の環境で使用する

ISID X(クロス)イノベーション本部 の三浦です。
筆者の関わっている案件では、コンテナ利用、AWS Fargate利用を進めております。

今日は、AWS Fargateのコストを下げるための取り組み例についてご紹介します。

目次

AWS Fargate Spotとは?

Fargate Spotは、EC2スポットインスタンスと同じように、AWS内で未使用のクラウドリソースを活用することでオンデマンド料金と比べて最大70%の割引価格で一時的に利用できるインスタンスです。
Fargate Spotが空きキャパシティを確保できるかぎり、ユーザーは指定したタスクを起動できます。AWSにキャパシティが必要になったとき、Fargate Spotで稼働するタスクは2分前の通知とともに中断されます。
そのため、本番で使おうとすると様々な検討が必要ですが、中断しても問題にならないような小規模の開発環境、技術検証環境ならデメリットを最小化して使うことができます。

AWS Fargate の料金

Amazon ECS 向け Fargate Spot の料金

AWS Fargate の料金 より

terraformのコードでAWS Fargate Spot対応

terraformでecs serviceを定義している場合、resource "aws_ecs_service"に下記の赤枠のコードを追加するだけで、Fargate Spot対応が完了します。本案件では、複数コンテナを使用しておらず1コンテナを立ち上げる仕様です。
中断が問題にならないフェイズ(インフラ担当者が構築中、極一部の開発者のみが使用する段階)ではFargate Spotで起動し、本稼働のフェイズではFargateに切り替えるといったことをしています。

なお、Fargate Spotの仕様としては、weightにて通常のFargateとFargate Spotの比率をコントロールできます。例えば、7割をfargateにし3割をspotにするとspotが落ちるような状況下でも影響を限定できます。
また1コンテナしか存在しないような場合でも、weightを1:0 ⇒0:1のように切り替えることにより、非常に小さな修正でFargate SpotとFargate を切り替えられます。

(青枠の部分はキャパシティープロバイダーの設定とコンフリクトするため、削除が必要です)

稼働率の例

このようにコストの削減に効果的で、かつ、対応も簡単なFargate Spotですが、あまり頻繁に立ち上がらないとつらいものがあります。

ということで、Fargate Spotが実際に、どのくらいの頻度で稼働し続けるのか、再起動はどれくらい発生するかという実例をご紹介いたします。

下記は日本リージョンで小さいコンテナを20コンテナ、1週間起動したときのコストです。

コストエクスプローラーでみると、ほぼ全ての時間で安定して起動しており、特定の曜日、時間帯に大規模に中断しつづけるということはありませんでした(アベイラビリティーゾーン IDはapne1-az4を使用しました)。

一方、ある程度の頻度でタスクの終了は発生しており、ログを確認したところ、20コンテナで48hで42回再起動していました。1コンテナ当たり、1日一回程度の頻度になります。なお、再起動は特定の時間帯に明らかに偏っているということはありませんでした。

ということで、ある程度の再起動とは引き換えになりますが、大幅なコスト削減が可能となります。

まとめ

ということで、本格的なSpotの利用となると採用が難しいところもあるとは思いますが、まず、構築時、技術検証時、プライベート環境等からFargate Spotを使ってみるというのはいかがでしょうか?
使ってみると、意外と中断は気にならずいいかんじでコストが抑制できるかもしれません。

私たちは同じチームで働いてくれる仲間を探しています。クラウドアーキテクトの業務に興味がある方のご応募をお待ちしています。

クラウドアーキテクト

執筆:@miura.toshihiko、レビュー:@yamashita.tsuyoshi
Shodoで執筆されました