AWS Fargateを利用したコンテナ活用
目次
コンテナとは?
コンテナとは、仮想化技術のひとつで、アプリケーションの動作に必要なライブラリ、設定ファイルなどをひとつの環境として扱い利用する技術です。通常のサーバーを運用している環境やこれまでの仮想化技術では、稼働のためのライブラリやミドルウェア等がそれぞれ異なっています。
場合によっては本番環境と開発環境においてライブラリ等の差分があり、開発環境で動作したアプリケーションが本番環境では動かない、といった現象も少なからず発生します。コンテナ技術を使うと、コンテナはその特性上プログラムの動作に影響するライブラリ等がまとまっているため、どのような環境でも簡単に稼働することができます。
このように、コンテナのメリットの1つとして高い可搬性が挙げられます。また、コンテナのプログラム自体はOS等と比べて圧倒的に少ない容量になるため、起動が高速であり、本番サービスの負荷が高まった際のスケーリングも容易に実行することができます。コンテナを稼働させるためのミドルウェアで現在デファクトスタンダードとなっているサービスが『Docker』であり、コンテナの運用管理を行うためのツールとしてデファクトスタンダードなものとしては、『Kubernetes』が存在します。
AWSにおけるコンテナサービス
AWS(Amazon Web Services)において、コンテナを利用するための環境・サービスとしては、ECS(Elastic Container Service)とEKS(Elastic Kubernetes Service)が存在します。
ECSとは
AWS上でコンテナを利用できるサービスで、コンテナの管理(オーケストレーション)を行う機能を提供します。具体的には、コンテナを『タスク』という単位で定義することで、自動的なスケーリングや起動時のコマンドの設定、コンテナの起動の元となるコンテナイメージを格納しておくリポジトリを指定する、などの機能が備わっています。
ECSには、EC2ベース(つまり仮想サーバーベース)の環境と、サーバーレスのコンテナ実行環境(Fargateといいます)が用意されています。
EKSとは
Amazon ECS同様、AWS上でコンテナを利用できるサービスですが、コンテナのオーケストレーション機能は、オープンソースのKubernetesをベースにしています。したがって、Kubernetesに知見があるエンジニアがいる場合や、他のクラウドでもKubernetes環境を利用している場合は互換性があり、AWSでも同じ環境を再現・管理しやすくなります。
AWS上でコンテナを活用できるスタイルズのAWSコンテナ構築、運用サービスはこちら→
ECS、EKSとFargateの関係
AWSにおけるコンテナ関連のサービスについて、それぞれの関係性を簡単に記載していきます。
それぞれのサービスの違い
まず、ECSとFargateの違いについてです。ECSは先述の通り、AWSにおけるコンテナオーケストレーション機能を提供するサービスであり、その中で実行環境としての一つの選択肢がFargateです。
コンテナの管理を行う機能があるサーバーをコントロールプレーン、コンテナの実行が行われるサーバーをデータプレーンと言いますが、ECSはコントロールプレーンであり、Fargateはデータプレーンである、と言えば違いが分かりやすいでしょう。また、ECSとEKSについてですが、こちらは双方ともにコンテナオーケストレーション機能を提供します。
したがって、双方ともコントロールプレーンであると言えます。ECSはAmazonで独自開発されたツールがベースになっていますが、EKSはオープンソースのKubernetesがベースとなって提供されている、という違いがあります。
ECSとEKSはどちらを使うべき?
コンテナの数が少なく、シンプルにシステムを構築できるならAmazon ECSを使うといいでしょう。また、Kubernetesに関する知見がない場合でも、ECSを利用するべきです。すでにオンプレミス環境にEKSが存在する場合や、大規模なコンテナ環境を利用している場合、コンテナ間でも通信したいなど複雑な構成を目指す場合は、Amazon EKSを選択するといいでしょう。
Kubernetesベースであるため、コンテナを管理するためのすべての機能が備わっていると考えて差し支えありません。
データプレーンとしてのFargateのメリット
AWS Fargateのメリットは、サーバーレスの実行環境である、という点が挙げられます。サーバーレスは責任共有モデルにおいて大半の部分をAWSが運用管理するため、利用者側の運用負担が大幅に減る、といったメリットがあります。具体的には下記のような運用が減ります。
- サーバーリソースのプロビジョニング…コンテナ数を増やしても、コントロールプレーンのOSリソース(CPUやメモリなど)を再度キャパシティプランニングやプロビジョニングするコストが削減できる
- サーバーリソースの管理…インスタンスに関するスケーリングやパッチ適用などのセキュリティ対応など
- コスト管理…Fargateの場合はコンテナ起動時間の秒単位で計算されるため、EC2ベースのECSよりも低価格になる場合が多い
このように、ユーザーの運用負荷を大幅に削減できることが可能となるため、積極的に利用していくといいでしょう。
どんなときにFargateを使うべき?
EC2ベースのECSではなく、Fargateを利用したほうがいいと考えられるケースは下記の通りです
インフラエンジニアが少ない場合
AWS Fargateは、コンテナなどコンピューティング・インフラストラクチャを所有し管理するといった手間をなくすことができるため、専任のインフラエンジニアを用意できない段階のスタートアップや、Webサイト開発企業においては積極的に利用していくといいでしょう。サーバー・OS関連の管理に必要な人的リソースをサービス自体の開発や改善に集中することができ、競争力の強化に貢献します。
スケーリングするシステム・アプリケーション
オンラインゲームや会員サイトなど、利用者の増大が見込まれるようなサービスにおいては、基盤としてFargateを利用するといいでしょう。
サーバーやOSの増強の際にはシステム停止や再起動が必要なケースが数多く存在するため、スケールアウトするシステムにおいては前もってサーバーレスの環境を選択しておくことが非常に重要です。
CI/CDを手軽に実施したい場合
アプリケーションリリースの自動化や、高速なアプリケーションのリリースを目指す場合は、コンテナの高速な構築と、そのまま他のコンテナ環境に移行できる可搬性を活用することが大切です。したがって、Fargateであればこれらの要件を満たすことができるため、選択肢の一つとして考えられます。
機械学習を用いたアプリケーションの構築
AWSの機会学習サービスであるAmazon SageMakerでは、コンテナをデプロイしてそのまま学習等の実行を行うことができます。したがって、Fargateベースの環境を用意しておくことで、機械学習に必要なモデリングが高速に実施できます。
加えて、機械学習に適したコンテナとしてDeep Learning Containers Imagesが提供されており、環境の準備を容易に実行できます。
AWS上でコンテナを活用できるスタイルズのAWSコンテナ構築、運用サービスはこちら→
まとめ
パブリッククラウドを利用した環境においては、コンテナサービスをうまく使うことで運用負荷を大幅に下げたり、人的リソースの最適な配置につながったりと、大きなメリットを得ることができます。AWSでは、ECS、EKSといったコンテナオーケストレーションサービスが提供されており、特にECSのFargateを利用すると、運用負荷の軽減を実現することができます。どのサービスを選択してコンテナの運用を最適に行うかについては、専業のベンダーにもぜひ相談してみてください。