AWS Fargateの特長と始め方
AWS Fargateとは
Amazon ECSとAmazon EKSの両方で動作する、コンテナ向けサーバーレスコンピューティングエンジンです。AWS Fargateは、コンテナの実行に必要なリソース分の料金を支払うだけで、「ホストマシンの管理・運用が不要」となる起動タイプのうちの1つです。
AWS Fargateの利点
繰り返しになりますが、AWS Fargateの最大の特長は「ホストマシンの管理・運用が不要」という点です。このAWS Fargateの特長から得られるメリットや、その他のメリットについて、以下に示します。
アプリケーションをデプロイおよび管理
Amazon EC2等の仮想マシンでクラスタを構築し運用する際には、例えば以下のことが必要となります。
- 全体でどの程度のリソースが必要かを見積もった上で、インスタンスの選定と必要な総台数の計算
- リソースのモニタリング(見積もりと実際の利用状況が乖離する可能性があるため)
<AWS Fargateの強み>
コンテナ実行時に必要なCPU、メモリの組み合わせの選択すると、その他の要求される操作はコンテナのみであるため、Amazon ECSまたはAmazon EKSで実行するアプリケーションの構築および運用に集中することができます。
適切なサイズのリソース
コンテナを管理するクラスタ上で稼働している場合、クラスタのキャパシティに気を配る必要があります。これは、コンテナをスケールする際に、実行に必要なリソースが無ければコンテナを新規に実行することができないためです。クラスタ全体のキャパシティ状況を常にモニタリングしてコンテナと合わせてスケールする必要があり、そのための戦略としては以下の内容が挙げられますが、一方でその戦略には課題もあります。
1. 常に余裕をもってクラスタのキャパシティをコントロールする
こちらの戦略には、以下の課題があります。
- 常に余分にホストマシンを稼働する必要があるため、サーバーコストも余分にかかる
2. コンテナが新規に起動・配置できない状況をフックしてホストマシンを追加する
こちらの戦略には、以下の課題があります。
- コンテナの起動時間にホストマシン起動のオーバーヘッドも含まれるため、コンテナのアジリティが低下する
実際には、自社のワークロードに応じて上記の2つの戦略のバランスを取ることになります。そのため、下記のように高度かつ戦略的な運用が求められます。
- どの程度のバッファを見積もって、キャパシティをコントロールするのか
- 突発的なスケールアウトをどのように対処するのか
その他に、ホストマシンの停止時にも注意が必要です。例えば、実行しているコンテナの数が減少し、ホストマシンを集約し残りを停止する場合に、実行中のコンテナをサービスに影響のないように稼働させる必要があります。
<AWS Fargateの強み>
AWS Fargateを利用すると、上記のような事を考慮する必要がありません。コンテナに対して指定したリソース要件に一致するよう、コンピューティングを起動およびスケーリングします。
セキュリティレベルを容易に向上
コンテナワークロードに限らず、通常Amazon EC2等の仮想マシンを運用する際には次のことが必要になります。
- OSやミドルウェアのバージョンアップ
- セキュリティパッチの適用
<AWS Fargateの強み>
OSやDocker Engine、ecs-agent等のバージョンアップやセキュリティパッチの適用も、AWSにて行われるAWS Fargateプラットフォームの管理運用の対象に含まれます。
この強みは、例えば
『リソースが限られているため、事業の差別化やエンドユーザーへの価値提供に直接つながる機能開発を優先し、セキュリティが後回しになってしまったスタートアップが簡単にセキュリティレベルを向上させたい場合』
において大きなメリットとなります。
こういった状況でAWS Fargateを利用すると、差別化に繋がらない重労働から解放され、アプリケーションの構築と運用に注力することができます。
上記の他に、AWS Fargateには以下の点で利点があります。
柔軟な料金オプション
AWS Fargateでは、オーバープロビジョニングおよび追加サーバーの料金は発生しません。AWS Fargateは、Spot Savings PlanおよびCompute Savings Planの料金オプションをサポートしています。これらの料金オプションは、以下のように条件を満たすものに対して割引が適用されます。
- AWS Fargate Spot:オンデマンド料金と比較して、中断耐性の高いアプリケーションに対し最大70%割引
- Compute Savings Plan:永続的なワークロードに対する確定済みのコストを最大50%割引
設計段階からの安全な分離
各Amazon ECSタスクまたは各Amazon EKSは、専用のカーネルのランタイム環境でそれぞれ実行されます。CPU、メモリ、ストレージ、ネットワークのリソースが他のタスクやポッドと共有されることはありません。これにより、各タスクまたは各ポッドでワークロードの分離とセキュリティの向上が実現します。
充実したアプリケーションの可観測性
他のAWSサービスとの組み込み統合によって、すぐに利用できる可観測性を得ることができます。AWS Fargateでは、オープンなインターフェイスを有する幅広いサードパーティー製ツールを介してメトリクスおよびログを収集し、アプリケーションをモニタリングすることができます。
AWS FargateとEC2の比較
Amazon ECSでコンテナを実行する際の起動タイプは2種類あります。一つは、本記事のメインとなるAmazon Fargateです。もう一方は、Amazon EC2です。
方式上の違い
Amazon EC2:仮想マシンを提供
AWS Fargate:コンテナを提供
料金モデルの違い
Amazon EC2
アプリケーションの保存や実行のために作成したAWSリソースに対してのみ、料金が発生します。最低料金や、初期費用、追加料金は不要です。
AWS Fargate
コンテナ化されたアプリケーションに必要なvCPUとメモリリソースに対する料金が発生します。vCPUとメモリリソースは、コンテナイメージを取得した時点からAmazon ECSタスクが終了するまでを対象として計算され、最も近い秒に切り上げられます。1分の最低料金が適用されます。
短所における違い
Amazon EC2
- 固定サイズのEC2インスタンスにコンテナを常時詰め込むのは困難で、リソースを浪費する可能性があります。
- コンテナとコンテナの実行環境となるホストマシンの両方を管理・運用する必要があります。
AWS Fargate
- コンテナに割り当てるメモリとCPUの組み合わせが限られています。
- GPUのサポートはされていません。
AWS Fargateの欠点に示したGPUの利用不可について、こちらは機械学習ワークロードでの利用をする場合、Amazon SageMakerを代表とするAI/MLサービスがあるため、マネージドサービスを活用することで対処することができます。
AWS Fargateの始め方
AWS Fargateの始め方には、以下に示す3つのアプローチがあります。
1. マネジメントコンソールからチュートリアルを進めていく
こちらが最も簡単な方法です。
2. ecs-cli composeを利用する
docker-compose.ymlを元にAWS Fargate上でコンテナを動かすことができます。ecs-cliとは、AWSが提供するコマンドラインツールです。このコマンドラインツールでは、docker-composeのように、サブコマンドのecs-cli composeによってAmazon ECS上でサービスを実行することができます。
このアプローチでは、以下の点に注意が必要です。
- Amazon ECS用の設定をecs-params.ymlに書く必要がある
- docker-composeと一部仕様が異なる
3. AWS CLIを利用する
AWS CLIに慣れ親しんだ方には、AWS CLIからAWS Fargateを利用することができるため、こちらがおすすめです。
ただし、このアプローチでは、パラメーターの引き渡しにjsonファイルの記述が必要です。
AWS Fargateの利用例(国内)
メルカリ株式会社
ここでは、メルカリ株式会社の進めるシステム開発とその仕組み、AWS Fargateを利用した理由などについて解説します。
同社はAML/CFT(アンチマネーロンダリング/テロ資金対策システム)に関して、以下のシステム開発を進めていました。
- メルペイアカウントを作っても問題ない人なのかを事前にチェックするためのユーザースクリーニング
- トランザクション履歴に不正な動きがあればアラートを発砲し、場合によってはアカウントの停止や送金のキャンセルなどを実施するトランザクションモニタリング
これらの処理を実現するためには、お金の流れやトランザクション情報などを全て収集する必要があります。
導入した仕組み
メルカリやメルペイでは、システムのDocker化が進んでおり、かつビジネスロジックが細分化によるマイクロサービスになっている状態です。マイクロサービスごとに様々なプラットフォームを使っており、トランザクションデータの収集経路(Pub/SubやWeb API経由)やデータフォーマット(gRPCやCSV)、様々なResult setと多種多様な形式となっています。これらの収集からの流れを以下に示します。
- 多様なフォーマットのデータを収集する
- AWS Fargate上に構築されたBridge Serviceに投入してデータを変換する
- 変換したデータをAmazon Kinesisに投げる
- 分散型データベースのSplunkに格納する
- Splunkの定期バッチ機能を用いて、一定のルールに基づいて怪しいトランザクションを検知し、アラートを飛ばす
仕組みを導入した経緯
- メルカリの古い機能に関してはマイクロサービス化されていなかった
- データをAML基盤で利用することは想定していなかった
- インターフェースの統一よりも金融機関として担保すべきセキュリティを最優先したかった
上記の経緯から、各サービスがトランザクションデータを送付可能な仕組みを早急に作ることを最優先として、前述の仕組みによるデータ収集を行う方針が執られました。
<AWS Fargateの魅力(メルカリ株式会社の場合)>
同社は、AML基盤のBridge ServiceにAWS Fargate起動タイプのAmazon ECSを活用しています。その理由は、以下のAWS Fargateの特徴と同社の求める要件が合致したためです。
- 特徴1:手軽に利用できる
- 特徴2:SSHによる接続が前提となっていない
特徴1について、現代の開発においては、開発段階から標準的にDockerを使う企業が多く、デプロイ先としてもコンテナを使う必要があるため、手軽に利用できることをAWS Fargateの魅力として挙げられています。
特徴2について、多くのセンシティブなデータを扱うAML基盤には、高いセキュリティ要件が必要で、保守・運用において、各サーバーにSSHでアクセスして作業することを最小限にすることが同社の要件でした。
上記の他にAWS Fargateの利用料金が大幅に値下げされ、利用しやすくなったことも活用するに至った理由として挙げられています。
株式会社エウレカ
株式会社エウレカは日本、台湾、韓国で恋愛・婚活マッチングアプリ「Pairs(ペアーズ)」を展開しています。同社は以下に示す背景や課題の解決、要望のためにAmazon ECSとAWS Fargateを活用することを選択しました。
- ユーザー数が増加する
- 広告や露出の増加に伴い、トラフィックの増減が予測困難となる
- 新たな機能の追加や機能のリッチ化が要求される
- 開発やデプロイの時間が増えることで、機能の試行回数が減少する
- サービスが成長する中でも開発速度を維持することを望む
AWS Fargateは、「コンテナ化によって機能別に小さく作ることが可能」です。そのため、同社はビルドやデプロイを迅速に行うことができ、開発効率が上がりました。
AWS Fargateの利用例(海外)
VERITONE
主にクラウド・ベースで、人工知能プラットフォームの開発・構築に従事する米国のソフトウェア企業です。同社は、AWS Fargateを使ってリアルタイムAIを構築しました。AWS Fargateを使用したことで得られたメリットを以下に示します。
- Dockerベースのエンジンに関するゼロから任意の数への素早いスケーリング
- オンデマンドでエンジンコンテナーを迅速に開始するためのバックエンドと、常に実行する必要があるサービスのオーケストレーションへの使用による、一貫した起動時間でリアルタイムワークロードの突然のバーストの処理
- インフラストラクチャの管理やダウンタイムへの対処が不要で、開発者がデプロイメントについて瞬時のフィードバックを取得
SAMSUNG
学生向けのAPIガイドを提供するために構築されたSAMSUNGのオンラインポータル(SAMSUNG開発者ポータル)は、3つの異なるポータルで構成されています。
- IoT開発者にサービスを提供するSmartThingsポータル
- Bixbyカプセル開発者にサービスを提供するBixbyポータル
- モバイルメッセージの新しい標準を提供するリッチコミュニケーションサービス(RCS)
同社は、上記のすべてのポータルが、次に示す要件に対応させることを目的として、AWS Fargateを使用しています。
- セキュリティ:すべてのセキュリティ要素を制御する機能をサービスオペレーションに付与する
- スケーラビリティ:トラフィックの急増に対応できるサービスを提供する
- 容易な導入:テクニカルライターが簡単にテクニカルドキュメントを編集できる
- 制御性:ポートマッピングやメモリサイズなどのコンテナーオプションを制御できるサービスである
SAMSUNGは、AWS Fargateによって安全な開発者ポータルを構築しました。
CORTEVA agriscience
世界中の農業生産性の向上を目的として、研究ステーションのネットワークをサポートしています。同社は、これまで手動で行われてきた植物の分析や評価の把握を、機械学習により自動化することを試みました。この新しいプロジェクトにAWS Fargateが使用されました。ここでのメリットは主に2つです。
- EC2インスタンスの管理に関連する複雑な作業が不要なり、ソリューションの構築に集中できる
- サポートオーバーヘッドの少ない大規模なアプリケーションの実行開始が可能となり、スタッフが減り、コストが削減され、納期が短縮できる
まとめ
本記事では、AWS Fargateの利点や、Amazon EC2との違い、AWS Fargateの始め方、実際の企業での利用例について解説しました。以前は価格の高さからAmazon EC2を使用する方が多かったですが、AWS Fargateの利用料金は2019年1月7日より値下げされたことで利用しやすくなっています。そのため、AWS Fargateはホストマシンの管理が不要で、アプリケーションの構築に集中することができる利用しやすいサービスとなっています。