クラウド環境を最大限に活用してアプリケーションを開発・運用するクラウドネイティブという概念が広まるにつれ、従来の「一枚岩」のような巨大で複雑なアプリケーション構造から、より柔軟で拡張性の高いアーキテクチャへの移行が求められるようになりました。コンテナ技術は、クラウドネイティブな開発・運用を実現するための理想的な手法として注目されています。
今回はサーバーレスな環境でコンテナを実行することができるAWSのサービス、AWS Fargateをご紹介します。AWSのコンテナサービスの説明から、Fargateの特徴やEC2との違い、料金体系まで詳しく解説していきます。この記事を読めば、非エンジニアの方でもAWSコンテナサービス全体の概要はイメージしていただけるのではないかと思います。ぜひご参考ください!
目次
1. そもそもコンテナってなに?
クラウドネイティブを実現する基盤技術、コンテナ
AWS Fargateを含むAWSのコンテナサービスの説明をする前に、前提の知識として知っておきたいコンテナ技術の仕組みについて解説します。
そもそも現代のソフトウェア開発において、クラウドネイティブという概念を積極的に取り入れていこうという大きな流れがあります。クラウドネイティブとは何かというと、クラウド環境の利点を最大限に活用し、リソースを必要な時に必要な分だけ柔軟に利用できるようにしようという考え方です。
▼クラウドネイティブをもっと詳しく知りたい方はこちら
クラウドネイティブとは?ビジネスの成長を加速させる技術を徹底解説! | in-Pocket インポケット
この概念が生まれた経緯として、従来の開発・運用方法においていくつかの課題が存在していたというのがあります。その課題とは、ざっくり言うと以下のようなものです。
- 開発が大規模になればなるほど、アプリケーション構造が複雑化し、機能追加やリリースが困難になる
- 需要の変動に応じて、迅速かつ柔軟にリソースを拡張・縮小することが難しい
- サーバー管理が複雑で対応に時間がかかる
結果として、開発スピードが遅くなり、変化の激しいビジネスニーズに対応できない、ビジネスの成長速度にシステムが対応できないなどの深刻な問題に発展していました。このような問題の解決策の1つとして登場したのが、コンテナという技術になります。コンテナはクラウドネイティブアプリケーションの中核を成す技術で、アプリケーションとその要素を軽量なパッケージにまとめることで、クラウド環境での展開を容易にします。
コンテナとは一体どんな技術なのか、詳しく解説していきます。
仮想化技術の一つ、コンテナとは?
AWS Fargateはコンテナを実行するためのサービスですが、コンテナとは何かを知るためには、まず仮想化技術を理解する必要があります。難しい用語がたくさん出てきて混乱してしまいますが、一つずつ見ていきましょう。
従来は1台の物理サーバーで1つのOSやアプリケーションを実行していましたが、仮想化技術によって1台の物理サーバー上で複数の仮想環境を稼働させることができるようになりました。仮想化技術により、物理ハードウェアの性能を最大限活用出来るようになり、リソースの効率化やコスト削減など多くのメリットが生まれました。仮想化技術はクラウドサービスの基盤となる技術で、仮想化技術で開発環境を構築する方法は主に3つあります。
- ホストOS型
普段使っているパソコン(ホストOS)に特別なソフトウェアをインストールして、その中に別のコンピューター環境(ゲストOS)を作る方法。例えば、Windowsパソコンの中にMacの環境を作ることができます。
特徴:手軽に仮想環境を構築できる反面、ゲストOSを動かすにはホストOSも動かさなければいけないため、処理速度が遅くなる点がデメリットです。
- ハイパーバイザー型
専用のコンピューターにハイパーバイザーと呼ばれる特殊なソフトウェアを直接インストールし、その上で複数の仮想的なコンピューター環境を動かす方法。セキュリティが強固なため、大規模なシステムや企業で使われることが多いです。
特徴:ホストOS型と違い、ホストOS自体が不要なため処理速度が向上しますが、セットアップにはより専門的な知識が必要になります。
- コンテナ型
コンピューター上に軽量なコンテナと呼ばれる箱を作り、その中でアプリケーションを動かす方法です。コンテナは、アプリケーションを実行するために必要なすべての要素(アプリケーション本体、ライブラリ、設定ファイルなど)がひとまとめになったパッケージです。コンテナの中身は必要最小限のものだけなので、とても軽快に動作します。
特徴:ホストOS型やハイパーバイザー型で必要だったソフトウェアのインストールが不要で、ホストOS上でコンテナだけを分離して動かすことができます。そのため動作が軽量で、移動もしやすいですが、ホストOSに依存するためOSの選択肢が限られるというデメリットもあります。
このように仮想化技術の最新の発展型の一つがコンテナ型であり、開発サイクルの短縮と柔軟性向上を目指すクラウドネイティブとの親和性が高いのが特徴です。ただし、特定のニーズや使用例に対して最適化された技術であるため、全てのユースケースに適している訳ではなく、ホストOS型やハイパーバイザー型の方が適している場合があることには注意が必要です。
2. AWSのコンテナサービス
AWSは複数のコンテナ関連サービスを提供してますが、今回はAWS Fargateと組み合わせて使用されるAmazon Elastic Container Service(ECS)、Amazon Elastic Kubernetes Service(EKS)、そして汎用的な仮想サーバーサービスであり、コンテナを実行するための基盤としてよくFargateと比較される、Amazon Elastic Compute Cloud(EC2)についてそれぞれの特徴を解説していきます。
コントロールプレーンとデータプレーン
上記のサービスは機能や役割によってコントロールプレーンとデータプレーンに分けることができます。それぞれの役割と当てはまるサービスは以下の通りです。
- コントロールプレーン:コンテナの管理・調整を行う(司令塔)
Amazon ECS、Amazon EKS
- データプレーン:コンテナを実行する(現場)
AWS Fargate、Amazon EC2
コントロールプレーンが全体の指示や管理を行い、データプレーンがその指示に基づいて実際の作業を行います。この2つが協力することで、大規模なシステムを効率的に運用することができます。以下の図のように、ECSはそれぞれEC2、Fargateと組み合わせることができ、EKSもEC2、Fargateと組み合わせることが可能です。
引用:サービス別資料 | AWS クラウドサービス活用資料集([AWS Black Belt Online Seminar] ECSでのFaragte入門 の資料より抜粋)
まずはコントロールプレーンの2つのサービスから見ていきましょう。
Amazon ECSとAmazon EKSの違い
ECSとEKSはどちらもコンテナオーケストレーションサービスであり、コンテナの実行のタイミングを管理したり、最適なリソースを割り当てたりして、アプリケーション全体が滞りなく機能するように調整する役割があります。
両者の違いは使われているオーケストレーションシステムにあります。ECSはAWSが独自に開発したコンテナ管理システムを使用しており、一方EKSはオープンソースのKubernetes(クバネティスまたはクーベネティス、ギリシャ語で操舵手やパイロットを意味する)を使用しています。KubernetesはもともとGoogleが開発したサービスでしたが、現在ではオープンソース化され、AWSやMicrosoft Azureとも連携することができます。あらゆるプラットフォームで動かすことができる柔軟性が特徴となっています。
Kubernetesを使いこなすにはある程度知識が必要なため、これまでKubernetesを使ってきた、もしくは使いたい理由があるという状況でない限りは、ECSを選択するのがおすすめです。ECSは、AWS環境限定で動かすことができ、基本的な機能が含まれているため、シンプルな構成に向いている点が特徴です。また、EKSはバージョン管理が必要で、定期的なアップデートが求められますが、ECSはメンテナンスを比較的容易に行うことができます。
要するに、ECSはAWS環境でシンプルに使いたい場合に適しており、EKSはより高度な機能や柔軟性が必要な場合に選択されます。
▼Amazon ECSをもっと詳しく知りたい方はこちら
アプリ制作のオーケストラの指揮者?Amazon Elastic Container Service (Amazon ECS) のメリットとデメリットとは? | in-Pocket インポケット
3. AWS Fargateの特徴
AWS Fargateはサーバーレスでコンテナ実行環境を実現できる点が大きな特徴です。サーバーレスとは簡単に言うと、開発者がサーバーの管理や運用を意識せずにアプリケーションを開発・実行できる手法のことです。これにより、通常必要になる仮想サーバーの選択・管理、OSのインストールや設定、セキュリティ・ネットワーク設定、ストレージ管理、リソースのモニタリングなどのさまざまなインフラ管理が不要になります。開発者の代わりにAWSがインフラの管理をするAWSマネージドなサービスです。
また、従量課金制であるため使用したリソース(CPU、メモリ)の分だけ支払いが発生するため、稼働していない間のアイドル状態のリソースに対する課金は発生しません。料金体系については後ほど詳しく説明します。
AWS FargateとAmazon EC2の違い
同じくデータプレーンのAmazon EC2はAWSが提供する仮想サーバーサービスです。EC2では、ユーザーのニーズに合わせて様々な仮想サーバーの構成を選択でき、LinuxやWindowsなど異なるOSを実行することが可能です。柔軟性の高さが特徴です。
FargateとEC2を比較するとこのようにまとめることができます。「Fargateは細かい設定や管理が不要な分コストが割高。EC2は細かい設定や管理ができるため、リソースを最適化することができ、コストが抑えられる。」
FargateはEC2と比べてコストが高くなる傾向がありますが、運用の手間がかからないため、アプリ開発に集中できるというメリットがあります。Fargateはコンテナ化されたアプリケーションの簡易な運用や、短期的なタスク実行に向いています。
一方でEC2の利用が向いているシーンとしては、OSレベルでの詳細な設定や最適化が必要な場合や常時稼働するアプリケーションの場合、複雑なネットワーク構成が必要な場合などが挙げられます。ただし、運用には知識が必要になりますので、Fargateよりは難易度の高い選択と言えます。
4. AWS Fargateの料金体系
最後に簡単にAWS Fargateの料金体系をまとめます。あくまで簡単なまとめなので、詳細を知りたい方は公式サイトをご確認いただくことをおすすめします。
従量課金制
- 使用したリソースに対してのみ課金されます。
- 使用していない時間帯の料金は発生しません。
課金対象リソース
- vCPU (仮想CPU)
- メモリ
- ストレージ
※vCPUとは?
CPUとはコンピューターの中核となる部品で、CPUのスペックによりコンピューターの処理能力が決まります。vCPUは仮想CPUとも呼ばれ、物理的なCPUの処理能力を仮想化して分割したものです。仮想マシンのCPUリソースを表すのに使用されます。
料金計算方法
- コンテナが実行された時間(秒単位)に基づいて計算されます。
- vCPUとメモリの使用量に応じて料金が決まります。
最小課金単位
- 最小1分間の課金があります。
- その後は1秒単位で課金されます。
OSによる違い
- LinuxとWindowsでは料金が異なります。
- 一般的にWindowsの方が高額です。WindowsはLinuxよりも多くのシステムリソース(メモリ、CPU)を必要とする点やWindowsはライセンスコストが発生することなどが影響しています。
リージョン(地域)による違い
- AWSのリージョンによって料金が異なる場合があります。
※Fargateが使用できるリージョンはこちらをご確認ください。
コスト最適化オプション
- Savings Plansを利用することで、最大50%の割引が可能です。
- 1年間または3年間の利用を約束することで割引が適用されます。
※Savings Plansの詳細はこちらをご確認ください。
追加料金
- データ転送やその他のAWSサービスの使用に対しては別途料金が発生する場合があります。
ちなみに少し古い記事にはなりますが、AWS公式がECSでFargateとEC2それぞれのデータプレーンを使用した際の理論的なコスト最適化手法を紹介しておりますので、こちらも参考にしてみてください。
Amazon ECS Fargate/EC2 起動タイプでの理論的なコスト最適化手法
5. さいごに
いかがでしたでしょうか?今回はクラウドネイティブな開発を実現するサーバーレスコンテナサービス、AWS Fargateをご紹介しました。インフラ管理の負担を軽減して、アプリケーション開発に集中したい場合には最適なサービスとなっています。コンテナサービスの利用を検討されている方は、Amazon ECS、Amazon EKSとあわせて利用を検討してみてください。
アイスリーデザインではソフトウェア開発におけるツールの導入支援をおこなっております。豊富な経験と専門知識を活かし、お客様のニーズに最適なツール選定から導入、運用までをトータルでサポートいたします。さらに、効率的な開発体制の構築と、チームの生産性の向上を実現します。AWS Fargateの導入支援サービスについて詳しく知りたい方は、こちらをご覧ください。