高際 隼 / Shun Takagiwa

職種
エンジニア
事業部
SaaS

自己紹介

現在、SaaS事業部にてAI-OCRチームのManagerを担当。サーバーサイドJava→Node.js→Goと経験し、Goも結構好きになってきました。AWSもよくいじります。LayerXは技術や事業だけでなく、組織やカルチャーなどどんなトピックでも深いディスカッションができ、学びの多い環境でありがたいです。

Meetyで話してみる

採用受けるつもりない方でも歓迎します!
転職を考えてる方はもちろん、将来の候補を探してる方もぜひ!

コンテンツ

Amazon ECS と AWS Fargate で動作する「LayerX インボイス」のコスト最適化手法 - LayerX エンジニアブログ
こんにちは!LayerXの高際 (@ ) です!過去にはOCR関連の記事を書きました! LayerX インボイスのアプリケーション・サーバーはAmazon ECS と AWS Fargateで動作しています。今回の記事ではそのコスト最適化手法について解説したいと思います。よろしくお願いします! サマリーとしては、LayerX インボイスではオーソドックスに 費用の削減と タスク数の最適化 という2つの方法でコスト最適化を行っています。 Savings PlansとFargate Spotを活用した費用の削減 Auto ScalingとScheduled scalingによるタスク数の最適化 早速次節から解説していきます! Fargateは使った分だけ料金が請求されます(vCPU数×メモリサイズ×起動時間)。この料金体系はクラウドの最も優れた特性の一つで、事業がうまくいくかどうか分からなかったり、その負荷の量が読めないときには非常にありがたいです。 しかし、一定の顧客を獲得することに成功し事業が安定してきたならば、1年または3年契約の1時間あたりの利用金額をコミットする Savings Plans を活用することで、さらなる費用の削減を実現できます。 東京リージョンでの削減額は 1年全額前払いで22%削減、3年全額前払いで47%削減です(2021年7月18日時点)。また、削減額は減りますが毎月払いも可能です。すごい! 参考: Savings Plans 料金 1時間あたりの利用金額での契約なので、定常的に利用する分の利用料に合わせて契約するのが良いようです。LayerX インボイスでは多くの企業が休日となる土日など、タスク数が少ない時間の利用料に合わせて契約しています。 どのくらい契約すればいいのか分からない場合、AWSのマネジメントコンソール内の Cost Explorer を見るとちょうどいい購入金額を教えてくれるので、そちらも参考に決定しましょう。 LayerX インボイスでは後述するAuto Scalingによるタスク数の最適化を行っていますが、Fargate Spotを活用することでさらなる費用の削減を実現できます。 EC2のスポットインスタンスを活用したことある方ならピンと来たと思いますが、Fargate SpotはAWSの余剰キャパシティを活用してタスクを実行することで、 最大70%の割引を受けられます。 参考: AWS Fargate 料金 Fargate Spotは余剰キャパシティで稼働しているため、AWSにキャパシティが必要になるとデフォルトで30秒、最大で2分前に警告が送信され、実行中のタスクにSIGTERMシグナルが送信され、アプリケーションが終了します。参考: Fargate Spot 終了通知の処理 LayerX インボイスのアプリケーション・サーバーではREST APIに を、ジョブワーカーに go machinery (v1) を利用して実装していますが、それぞれSIGTERMシグナル受信時のGraceful Shutdownに対応しているので、Fargate Spotの終了が通知されても安全にアプリケーションを終了できます。 ただし、すべてのタスクが終了されるとさすがに困るので、 一部のタスクは通常のFargateで、残りはFargate Spotで稼働 するような構成にしています。 このような設定はECSサービスのキャパシティプロバイダ戦略設定によって調整できます。 以下はECSサービス設定の画面ですが、例えばこの画面のような設定をすることで、5タスクは通常のFargateで起動し、残り全てがFargate Spotで起動するような構成を実現できます。 ベースやウェイトの詳しい意味は Amazon ECSのドキュメント をご参照ください。 Auto Scalingは多くのサービスで利用されていると思うので詳細は省略しますが、サービスの負荷に応じてタスク数を自動的に増減することで負荷分散をコントロールするとともに、コスト最適化を実現するものです。 参考: ECSサービスのAuto Scaling LayerX インボイスでは、より自動的にタスク数が調整されるターゲット追跡スケーリングポリシーによるAuto Scalingを行っています。 加えて、予測可能な負荷の増減に対応するための Scheduled scaling という仕組みも併用しています。LayerX インボイスでは平日の日中にアクセスが増加することが分かっており、Scheduled scalingにより最小タスク数を増加させるようにしています。 最小タスク数を増やすとコストも増えますが、お客様にご不便をおかけしないよう可用性を高めるために実施しています。これまでコスト削減ではなくコスト最適化という言葉を使ってきたのにはこういう理由もあるのです。 本記事では、Savings PlansとFargate Spotを活用した費用の削減、Auto ScalingとScheduled scalingによるタスク数の最適化を組み合わせたコスト最適化手法について解説しました。 コストをうまくコントロールすることは、利益率を高め、ひいてはサービス再投資による顧客の満足につながるものです。基本的な取り組みではありますが、こういったことこそ大切にしていかねばなと思います。 基本に忠実に、製品を磨き、顧客に向き合う。そんな仲間を募集しています。