仮想マシン「EC2」で構成したシステムをPaaSで作り替える。コンテナ管理ツール「Fargate」を組み込んだが、基本構成は変わらない。「許容できる時間内に復旧する仕組み」を活用できるのが利点だ。
今回はコンテナを前提としたサーバーレス環境を利用した、障害に負けないシステム構成を実現する手法を整理していきます。
サーバーレス環境とは、サーバー(インフラ)の管理が不要な環境という意味です。AWS(Amazon Web Services)のコンテナ向けサーバーレス環境である「AWS Fargate」を例に、どのようにサーバーレスを実現し、その結果、どのようなシステム構成が可能になるかを解説します。
AWS独自のコンテナ管理ツール
Fargateは、AWSが独自に開発したコンテナオーケストレーションツールです。開発者は開発したアプリケーションをコンテナイメージとしてビルドしコンテナリポジトリーに格納しておきます。
Fargateでは、そのコンテナイメージを取得(プル)して、実行します。この実行単位をタスクと呼びます。Fargateはタスクを実行するデータプレーンと、これを管理するためのコントロールプレーンで構成します。
データプレーンの基盤はAWSの仮想マシンサービス「EC2」です。AWSの各リージョンにはFargate専用のVPC(仮想ネットワーク)がマルチAZ(アベイラビリティーゾーン)構成で構築されています。このVPC内にFargate用のEC2インスタンスがプールされています。このEC2インスタンスには、リソース管理のためにFargateエージェントが、コンテナランタイムとしてcontainerdがインストールされています。
一方のコントロールプレーンは、ユーザーが特定のタスクを起動しようとした際、そのタスクを起動するEC2インスタンスを特定し、Fargateエージェントへコンテナイメージの起動を指示します。Fargateエージェントは、その指示に従いコンテナイメージをプルしてタスクとして起動します。
コントロールプレーンでは、各EC2のクラスターやタスクの稼働状況が監視されており、各EC2インスタンスのキャパシティーが管理されています。それらの情報から、タスクを起動すべきEC2インスタンスをFargateは見つけ出すのです。
このようにFargateでは、プールされているEC2インスタンス上でマルチテナントにコンテナを起動するのが特徴です。あらかじめプールされたインスタンスを利用するため高速な起動と停止が可能です。
一般的なコンテナ技術では、コンテナはホストOS上のプロセスとして起動するため、ホストマシンのリソースを取り合います。FargateではAWSが開発し、OSS(オープンソースソフトウエア)として公開しているFirecrackerと呼ばれるコンテナ用のハイパーバイザーが利用されています。このハイパーバイザーはKVMを利用することでリソース効率性を維持しながら、セキュリティーとワークロードを分離させています。