AWS Fargateとは?サーバレスで実行できるコンテナ向けサービスを解説
Amazonが提供するクラウドサービス「AWS」は、多くの企業がシステム構築などで利用しています。AWSには200以上のサービスがあり、それらを組み合わせて使うことも可能です。
ここではAWSのサービスの一つであるAWS Fargateの特徴やメリット・デメリット、利用シーンなどを幅広く解説していきます。
INDEX[非表示]
- 1.AWS Fargateとは?
- 2.AWS Fargateの関連用語
- 3.AWS Fargateの特徴
- 3.1.AWS Fargateのメリット
- 3.2.AWS Fargateのデメリット
- 4.データプレーンとコントロールプレーン
- 4.1.データプレーン
- 4.1.1.Amazon EC2
- 4.1.2.AWS FargateとAmazon EC2の違い
- 4.2.コントロールプレーン
- 4.2.1.Amazon ECS
- 4.2.2.Amazon EKS
- 4.2.3.Amazon ECSとAmazon EKSの違い
- 5.AWS Fargateの利用シーン
- 6.AWS Fargateの料金体系
- 7.まとめ
>> 「AWS Fargate」に関するお悩み・ご相談はこちら
AWS Fargateとは?
AWS Fargateは、AWS上のコンテナに対し、サーバレスで実行できる機能を提供してくれるサービスです。AWS Fargateを使用すると、サーバの管理やスケーリングに煩わされることがなく、アプリケーションの開発にリソースを集中できます。
AWS Fargateは、Amazonの提供するECSやEKSなど、コントロールプレーン(コンテナを管理するためのサービス)と組み合わせて利用することが一般的です。AWS Fargateを使うことで、コンテナと実行環境を一体として管理できます。
AWSについてもっと広義的に知りたい方はこちらの記事もご参照ください。
あわせて読む>> AWSとは?できることや構築手順をわかりやすく解説
AWS Fargateの関連用語
AWS Fargateを利用するにはコンテナなどの関連する用語の理解が不可欠です。この項ではこれらの用語を中心に、AWS Fargateを使用する際の関連知識を整理します。
コンテナ
クラウドサービスの利用が一般的となった近年で重要性を高めている技術がコンテナです。
コンテナとはさまざまな道具を入れる容器のことで、ITの現場では「サービスに必要なアプリケーションやミドルウェアをまとめて詰め込んだ容器」にたとえられます。AWS公式サイトでは「アプリケーションのコード、ライブラリ、およびクラウドで実行するのに必要なその他の依存関係を含むソフトウェアコードパッケージです」と説明されています。
アプリケーションのソースコードを動かすためには、ランタイムと呼ばれる実行プログラムや、よく使われる処理のプログラムをひとまとめにした「ライブラリ」などが必要です。開発フェーズでは、それぞれのバージョンによってはうまく動作しなかったり、テスト環境では動いても本番環境では動かなかったりすることも起こり得ます。
コンテナはこうした不具合を解消したツールです。一つの容器の中に、必要なコードやランタイム、ライブラリなどがまとめてあり、環境によって動作が変わることはありません。
仮想サーバと似た考え方ですが、仮想化用のソフトウェアをインストールしてゲストOSを用意するなどの手順が不要で、起動時間も短いという特徴があります。コンテナを使えば、開発環境からテスト環境、本番環境など、他の環境への移動も容易です。
コンテナの仕組みについては以下の記事でも詳しく説明しています。
あわせて読む>> Amazon ECSとはどんなサービス?できることや使い方をわかりやすく解説!
Docker
コンテナを実行できる環境として、よく使われているのがDocker(ドッカ―)社の「Docker」です。Dockerは2013年にリリースされました。
Dockerはどのようなアプリケーションでも、OSがWindowsでもLinuxでも、仮想環境でもクラウド環境でも、プログラムの実行が可能です。
Dockerはミドルウェアのインストールなど、環境設定をコード化して管理します。これにより環境に依存する問題を削減できるメリットがあります。コード化したファイルを共有するため、同じ環境を手軽に構築可能です。Windows上で開発し、Linux上でテストするなどの場合も問題が起こりにくいと期待できます。
コード化したファイルの共有により、エンジニア同士の環境のズレを防止できるのもDockerの利点です。リモートワークで複数のエンジニアが参加するような開発では、同じ条件が揃った開発環境を素早く準備できるため、作業が効率的に進みます。
一方で、Dockerは複数のコンテナを組み合わせたり、一元的に管理したりはできません。コンテナの利用が広がり、複数のコンテナを使った開発が多くなってきたことにより、コンテナを効率よく管理したいニーズが高まりました。そこで登場したのがコンテナオーケストレーションの技術です。
コンテナオーケストレーションは、さまざまな楽器が同時に音を出していてもきれいなハーモニーを奏でられるオーケストラのように、コンテナの管理をおこないます。コンテナオーケストレーションを利用することによって、サーバ上へのファイルの展開、スケーリング、ネットワーク管理などの自動化が可能です。
コンテナオーケストレーションとしてよく使われているのが、「Kubernetes(クーバネティス)」というオープンソースのシステムです。複数のホストでDocker上のコンテナを運用する場合、Kubernetesを使ってストレージやネットワークを一括して管理できます。
AWS Fargateの特徴
AWS上のコンテナをサーバレスで実行できるAWS Fargateは、運用管理の手間が少なく、セキュリティパッチを当てるなどの作業も必要ない点が特徴です。
一方で、利用できない機能も一部あるなど、注意点もあります。この項ではAWS Fargateのメリットとデメリットをそれぞれ解説していきます。
AWS Fargateのメリット
AWS Fargateのおもなメリットは、以下のとおりです。
- コンテナ実行環境のホストマシンOSやミドルウェアの管理が不要
- インスタンスタイプの管理が不要
- オートスケーリング
AWS Fargateのメリットとして大きなものは、コンテナ実行環境のホストマシンのOSや、ミドルウェアの管理が不要になる点です。OSのセキュリティ対策、OSの更新、サーバ内のユーザー管理やパスワード管理などの煩雑な作業から解放されます。そのため、インフラを担当するエンジニアが専任でいなくても環境の構築やインフラの管理が可能になります。
AWS Fargateを使えば、インスタンスタイプの管理も不要です。
インスタンスタイプとは、AWS上で稼働する仮想サーバ(インスタンス)で、利用シーンごとに組み合わせるCPUやメモリなどの選択を意味します。アマゾンのEC2インスタンスは、さまざまな利用シーンに対応できるよう、200を超えるインスタンスタイプが用意されています。これらの管理が、AWS Fargateでは必要ありません。
オートスケーリングも、AWS Fargateのメリットです。オートスケーリングとは、システムにかかる負荷に自動的に対応して、クラウドサーバの容量やスペックを拡大したり縮小したりしてくれる機能です。自社でサーバを保有し、設置や運用をおこなうオンプレミスの場合、スケーリングにはインフラの稼働状況やリソースの整合性のチェックなど慎重な対応が必要で、時間と手間がかかります。AWS Fargateを利用していれば、こうした手間からも解放されます。
AWS Fargateのデメリット
いいことずくめのようにも見えるAWS Fargateですが、デメリットもあるため、採用にあたってはあらかじめ認識しておく必要があります。デメリットとしてよく取りあげられるのは、sshやdocker execが利用できない点です。
sshとはSecure Shellの略で、データ通信を暗号化してネットワークを介したデータのやり取りを安全におこなうためのプロトコルの一種です。sshは、パスワードを含むすべての通信を暗号化するため、高い安全性があります。仮にネットワークを介してデータが盗まれても、暗号化されているため、内容が読み取られることはありません。sshは広く使われており、AWSのEC2インスタンスへのログインにも通常はsshが使われます。
docker execは、稼働中のコンテナ内で新たなコマンドを実行したいときに使用できるコマンドです。トラブル時などに稼働中のコンテナに入り、動作確認などをおこないたい場合に活用します。
どちらもAmazon EC2でのデバッグ時の対応としては定番ですが、AWS Fargateでは使用できないため、不具合が発生した場合の調査が難しい点はデメリットによく挙げられていました。
しかしながら、このデメリットに対しては、2021年に「ECS Exec」という機能が新たにリリースされています。
ECS Exec は、AWS Systems Managerの「セッションマネージャー」という仕組みを使っており、SSMエージェント経由でコンテナへのアクセスを実現しています。これにより、Fargateで実行しているコンテナにも現在は直接アクセスが可能になりました。
ただし、ECS Execの利用にはいくつかの前提条件や設定が必要なため、使用する際は事前に確認と準備が必要です。
参考:AWS「ECS Exec を使用して Amazon ECS コンテナをモニタリングする」
そのほか、AWS Fargateで使用できない機能にはパブリックIPの固定割り当てがあります。
自社以外のエンジニアが開発に参加する際には、外部からのアクセスにパブリックIPの固定割り当てができると効率的です。AWS Fargateを利用すると、Amazon EC2インスタンスへのIP割り当ては自動で実行されてしまうため、固定で割り当てることはできません。固定割り当てが必要な場合は、同じサブネット内にNetwork Load Balancer(NLB)を配置し、NLBにIPを割り当てて対応する方法があります。
参考:AWS re:Post「Fargate の Amazon ECS タスクに対する静的 IP アドレスまたは Elastic IP アドレスの使用」
これらのデメリットは、サーバの管理を意識しなくてもよいAWS Fargateのメリットと表裏一体の関係です。AWS Fargateを便利に利用するうえでは、容認しなくてはならない不便さとも考えられます。
データプレーンとコントロールプレーン
AWSのコンテナサービスは「データプレーン」と「コントロールプレーン」の2つで構成されます。データプレーンはコンテナの実行環境、コントロールプレーンはコンテナが稼働する環境を指します。コントロールプレーンがコンテナの動作に指示を出し、データプレーンのうえでコンテナが動くと言い換えてもよいでしょう。
AWS Fargateを理解するうえで欠かせない概念のため、それぞれに該当するサービスについても詳しく解説していきます。
データプレーン
AWSでデータプレーンに該当するのは従来AWS FargateとAmazon EC2の2つでしたが、2021年にはオンプレミス環境でも動作するECS AnywhereとEKS Anywhereがリリースされ、選択肢が広がりました。
今回はAWS Fargate と同じくAWS上でのみ動作するAmazon EC2を取り上げ、それぞれの違いなどを詳しく説明します。
Amazon EC2
Amazon EC2(Amazon Elastic Compute Cloud)は、AWS上に構築できる仮想サーバの一種で、利便性の高さから世界中のWebサービスや企業サイトなどで使われています。サーバ構築にかかる時間を削減できる点が大きな特徴で、利用者はほんの数分でインスタンスを立ちあげられます。
オンプレミスの場合、立ちあげに時間がかかるほか、サーバや周辺のインフラの保守に人手が必要です。Amazon EC2を利用すれば、保守や運用にかかる人的リソースの負荷を下げられます。
利用状況にあわせてCPUやメモリ容量などを簡単に変更できるのも利点です。サーバ上のアプリケーションで負荷が高まり、処理速度が遅くなったような場合には、インスタンスタイプの変更によりCPUやメモリを増強できます。一般に、サーバを運用しているとデータ量は増え続けます。Amazon EC2はストレージの拡張も即時に可能です。
料金体系は従量課金制で、サーバが起動している時間だけ料金が発生します。使用しない時間はサーバを起動させなければ、費用を節約できます。CPUやメモリに多くのリソースを必要としないサービスの場合は、インスタンスタイプを低スペックに変更することでも費用の節約が可能です。Amazon EC2は柔軟なインスタンスタイプの変更が可能ですが、サーバ停止中もストレージの役割を持つAmazon EBS(Amazon Elastic Block Store)には料金が発生します。その点には注意してください。
商用利用されるサーバは、システムトラブルなど万一の事態があっても停止しないよう、冗長化構成をとるのが一般的です。オンプレミスでの冗長化は、サーバを複数構成にするだけでなく、ネットワーク機器などの冗長化も求められます。費用がかかるほか、設計などに時間もかかりますが、Amazon EC2では仮想でネットワークを冗長化できるサービスが用意されており、短時間で対応可能です。
AWS FargateとAmazon EC2の違い
AWSで同じデータプレーンに該当するAWS FargateとAmazon EC2には、どのような違いがあるでしょうか。
大きな違いとしては、AWS Fargateでは細かな設定や管理を考える必要がないのに対し、Amazon EC2の場合はインスタンスタイプの選択など設定を考える必要がある点が挙げられます。
AWS Fargateではオートスケーリングが適用されますが、Amazon EC2ではインスタンス数に応じて個別にスケーリングが必要です。AWS FargateはAWS側でOSやミドルウェアのバージョンなどを管理してくれるため、操作が容易で便利な反面、自由度は低くなります。Amazon EC2は多少の手間は求められる一方で、OSやソフトウェアなどの自由度が高いのは利点です。
コスト面で見るとAWS Fargateのほうがランニングコストは高くなるものの、インスタンス管理の運用コストは発生しません。Amazon EC2は逆に、ランニングコストは安いですがインスタンス管理の運用コストがかかります。
AWS Fargateの特徴は、細かい設定や管理を気にせずに利用でき、インフラの保守や運用を担当する人的リソースがなくても開発が始められる点です。AWS Fargateであれば、「コンテナ環境での開発を、試しにやってみよう」といったニーズにもこたえられます。
AWS FargateとAmazon EC2のどちらを選ぶとよいかは、開発にあたっての優先事項をベースに決めるのがおすすめです。以下の比較表も参考にしてください。
データプレーン |
AWS Fargate |
Amazon EC2 |
OSなどの自由度 |
低い |
高い |
スケーリング |
オートスケーリング |
インスタンス数に応じて必要 |
sshでのログイン |
できない |
できる |
ランニングコスト |
高い |
安い |
インスタンス管理の運用コスト |
発生しない |
発生する |
コントロールプレーン
AWSにおいてコンテナの動作環境であるデータプレーンと組み合わせ、コンテナに動作の指示を出す機能のコントロールプレーンには、Amazon ECSとAmazon EKSの2つがあります。
それぞれの詳細を説明します。
Amazon ECS
Amazon ECS(Amazon Elastic Container Service)は、AWS上でDockerコンテナを動かし、Webサービスとして運用するためのサービスです。コンテナの実行、停止、管理ができます。コンテナオーケストレーションの機能も持っており、コンテナを実行するためのクラスタのインストールや運用の自動化、Webサービスの負荷が高くなった場合はオートスケーリングをおこなうなどが可能です。
Amazon ECSは、アプリケーションの負荷を自動的に分散させるロードバランサ―など、AWSの他サービスとも組み合わせて使うことができ、あらゆるアプリケーションを簡単にコンテナ化できる点が特徴です。小さなプログラムを複数組み合わせたマイクロサービスはもとより、AI(人工知能)サービスの基礎となる機械学習のアプリケーションでも、コンテナ化されたアプリケーションを簡単に作成できます。
アプリケーションごとに効率的なリソース配分をおこない、費用対効果の高い開発につなげやすいのもメリットです。安全性の面では、ほかの利用者とリソースを共有しないため、セキュアな開発環境が担保されます。
料金体系はデータプレーンにAWS FargateとAmazon EC2のどちらを選ぶかによって異なります。コンテナの稼働時間が限定的な場合はAWS Fargateを、常時稼働が必要なアプリケーションではAmazon EC2を選択すると、費用の適正化が図れるでしょう。
Amazon ECSについては以下の記事で詳細に説明しています。
あわせて読む>> Amazon ECSとはどんなサービス?できることや使い方をわかりやすく解説!
Amazon EKS
Amazon EKS(Amazon Elastic Kubernetes Service)は、コンテナオーケストレーションのソフトウェアであるKubernetesを、AWS上で使えるサービスです。オープンソースで提供されるKubernetesは、コンテナオーケストレーションの事実上の標準ともなっているソフトウェアです。
Amazon EKSには、以下のような特徴があります。
- 高度なコンテナ運用ができる
- セキュリティを強化できる
- ほかのAWSサービスと統合できる
Amazon ECSにもコンテナオーケストレーションの機能はありますが、Amazon EKSのコンテナオーケストレーションにはKubernetesが採用されており、コンテナ間での通信など高度な運用をおこなうにはAmazon EKSの利用がおすすめです。オンプレミスの環境でKubernetesを使っていたエンジニアであれば、クラウド環境で同一のコンテナオーケストレーションを使える利点があります。また、Amazon ECSにはないコンテナのスケーリングや、障害時の自己修復機能なども利用可能です。
Amazon EKSは、最新のセキュリティパッチを当てる機能を持っています。AWS Fargateとの組み合わせで使えば、アプリケーションごとにリソースの配置を変えられるため、設計時点でアプリケーションを分離でき、セキュリティの強化が可能です。
Amazon EKSは、負荷分散のためのロードバランサ―やVPS(仮想プライベートサーバ)など、他のAWSサービスと統合できる仕様になっています。
Amazon EKSのデメリットとしては、Kubernetesのアップデートが3ヵ月に1回程度と、頻繁なことが指摘されています。さらに運用についてマスターしておくべきことが多く、専門的な知識や慣れが必要です。
Amazon ECSとAmazon EKSの違い
Amazon ECSとAmazon EKSは、どちらもコントロールプレーンとしてコンテナを動かし、コンテナオーケストレーションの機能を持ちます。大きな違いは、Kubernetesベースのコンテナオーケストレーションを利用できるかどうかにあります。
Amazon EKSは、オンプレミスで構築したKubernetesの環境をクラウドに移行したいなどの場合には、有効で便利です。AWS上でコンテナを動かしたいがKubernetesは使っていない、などのニーズであれば、Amazon ECSを選択するのが一般的です。Amazon ECSはKubernetesの知識がなくても、コンテナオーケストレーションの機能を使えます。
一方でマルチプラットフォームでの運用など、高度な要求がある場合はAmazon EKSでの対応が向いています。
AWS Fargateの利用シーン
AWS Fargateはどのようなシーンやサービスに適しているでしょうか。AWS Fargateが向いていると想定される利用シーンの例をいくつかご紹介します。
インフラ担当者不在でのスタートアップ
AWS Fargateのメリットとして、ホストマシンのOSやミドルウェアの保守などの管理が不要になるため、インフラの専任担当者がいなくてもWebサービスの開発が可能です。オンプレミスの場合は、物理サーバの選定やネットワークの構築から始めなくてはなりませんが、AWS Fargateを利用すればそういった手間は発生しません。エンジニアはアプリケーションの開発に専念できる利点があります。
オンラインゲームなどのスケーリングするサービス
AWS Fargateは人的リソースの少ないスタートアップ企業ばかりでなく、大規模なオンラインゲームのプラットフォームとしても使われています。AWS Fargateはスケーリングが容易である特徴を持つため、将来的な利用者の増加を見据えたWebサービスの展開には好適です。
AIと機械学習を用いたアプリケーション
AWS Fargateは、AWSの他サービスと容易に連携できるメリットもあります。たとえば、AI(人工知能)開発に不可欠な機械学習を実施するための一連のプロセスをまとめたAmazon SageMakerなどとの連携により、機械学習におけるデータの収集や学習モデルの構築、展開も可能です。
AWS Fargateの料金体系
AWS Fargateの料金体系は、使った分だけを支払う従量課金制です。初期費用はありません。Amazon ECSやAmazon EKSのうえで動作する、コンテナ化されたアプリケーションが消費するvCPU(仮想的に割り当てられるCPU)やメモリなどの量に応じて費用は変わります。
料金の詳細は地域などによって異なります。最新の情報は公式サイトで確認してください。
参考:AWS「AWS Fargateの料金」
まとめ
AWS上でコンテナを使ってアプリケーション開発をおこないたい場合、AWS Fargateは有力な選択肢の一つです。コンテナの運用環境の管理などに煩わされず、インフラ専任の担当者がいないスタートアップ企業などでも素早く開発が進められます。
本記事では、 AWS Fargateのメリットやデメリット、関連する用語の解説から主な利用シーンなどまで、幅広くまとめました。開発環境の検討などの際には、ご参考にしてください。