AWSにおけるコンテナサービスECS
目次
コンテナってなに?なぜ注目されている?
コンテナとは、サーバー仮想化技術の1つです。従来の仮想化技術同様、物理サーバーのリソースを効率よく利用するための技術の一つですが、使い方によっては、開発工数や運用工数の削減に大きく貢献することができます。従来の仮想化技術との違いや、注目される理由について、具体的に見ていきましょう。
従来の仮想化技術との違い
従来の仮想化技術は、物理サーバーにインストールされたハイパーバイザーと呼ばれる仮想化ソフトウェアの上にサーバーそのものが構築されました。したがって、ITシステム開発時には、サーバーを構築したあと、サーバー内でOSやミドルウェアの設定を行い、アプリケーションを構築していく、といったことを行っていました。
一方で、コンテナは単一のホストOS上で動作するコンテナエンジン上にプロセスとして存在し、そのエンジンが管理するシステムリソースの範囲内で、複数のコンテナを同時に動作させることができます。。
つまり、従来の仮想化技術は
物理サーバー → ハイパーバイザー → ゲストOS → アプリケーション
であったのに対し、コンテナは、
物理サーバー → コンテナエンジン→コンテナ(軽量のOS、アプリ―ケーション、ランタイムを含む)
という構成で稼働していきます。
なぜ注目されるのか
注目される理由は、『再利用が非常に容易』であることと、『高速開発に向く』ということが挙げられます。一般的なアプリケーション開発では、OSの設定やライブラリの差分が原因で、とあるサーバーでは問題なく稼働していたアプリケーションがほかのサーバーではうまく動かない、といったことは大いにあり得ます。
しかしながら、コンテナではOS,アプリケーションがセットで構成されているため、ライブラリや設定の差分が原因で他のサーバーで稼働しない、といったことは起こりにくくなります。したがって、再利用が非常に容易です。また、リリースの際にも開発環境でのリリース手順を本番でも同じように行う、といった手順を踏むことなく、開発環境で稼働したコンテナをそのまま本番環境に移すだけでリリースが可能であるため、高速開発に向きます。
AWS上でコンテナを活用できるスタイルズのAWSコンテナ構築、運用サービスはこちら→
「Docker」と「Kubernetes」
Dockerは、コンテナが稼働するための環境を提供するソフトウェアです。コンテナを活用する際には、アプリケーションとその実行に必要なライブラリや設定情報を合わせた「コンテナイメージ」が必要になります。このイメージをコンテナに変えて実行するソフトウェアがDockerで、コンテナ技術のデファクトスタンダードとなっています。
Kubernetesとは、Google社が開発したコンテナの運用・管理自動化を行うツール(コントロールプレーンと呼ばれます)です。コンテナは従来のサーバーと違うため、従来のサーバーのように運用を行うことができません。また、本番環境では複数のコンテナについて、正常に稼働しているかどうかをトレースしたり、各コンテナを安全にリリース・更新したりといった運用が必要になります。
性能、拡張性、セキュリティを考慮したコンテナ運用を行うためには、Kubernetesが必要となります。
AWSのコンテナ関連サービス
AWSのコンテナ関連サービスは、大きく分けて以下のようなものが存在しています。
- Amazon Elastic Container Service(Amazon ECS)…AWS独自のコンテナ管理プラットフォーム
- Amazon Elastic Kubernetes Service(Amazon EKS)…Kubernetesベースのコンテナ管理プラットフォーム
- Amazon Elastic Container Repository(Amazon ECR)…コンテナのイメージを保存しておくリポジトリ
- AWS Fargate…サーバーレスのコンテナサービス
- App Runner…数クリックでコンテナをデプロイできるマネージド環境の提供
特に、Amazon ECSとAmazon EKSはコンテナ管理プラットフォームという点では利用目的は同じですが、ユースケースによって使い分けを行う必要があります。それぞれどのような違いがあるのかを、具体的に見ていきましょう。
Amazon Elastic Container Service(Amazon ECS)とは?
ECSは、AWSが開発したコンテナ管理プラットフォームです。したがって、CloudWatchやElastic Load BalancerといったAWS上の各サービスと連携しやすい、といった特徴を持ちます。ECSの最小実行単位はTaskと呼ばれ、コンテナをどのように動かすか、といった設定(タスク定義の設定)を行い、Taskの中でコンテナが起動します。
Amazon Elastic Kubernetes Service(Amazon EKS)とは?
EKSはKubernetesベースのコンテナ管理プラットフォームです。オープンソースのKubernetesをほとんどそのままAWS上で利用することができます。また、コンテナの最小単位も通常のKubernetesと同様にPodと呼ばれる単位で管理します。また、Kubernetesは通常Ingressと呼ばれる設定でKubernetes外部からの通信を制御しますが、Ingressに設定を行うことで外部のAWSリソースと連携することが可能です。
AWS Fargateとは?
Fargateとは、サーバーレスのコンテナ実行環境のことです。コンテナ管理プラットフォームのことを、一般的にはコントロールプレーンと呼びますが、コンテナ実行環境(実際のコンテナが稼働する場所)のことをデータプレーンと呼びます。AWS上でデータプレーンはEC2とFargateが選択可能で、Fargateはサーバーレスに稼働することができます。
AWS上でコンテナを活用できるスタイルズのAWSコンテナ構築、運用サービスはこちら→
ECS/EKSはなにが違う?
ECSとEKSの大きな違いは、ECSはAWSオリジナルのソフトウェアをベースに構築されている一方で、EKSはKubernetesをベースに構築されている、Kubernetesはオープンソースで世界中の開発者が開発を進めているという関係上、非常に機能が豊富で、アップデートも3か月に1回のペースで実施されています。
機能が豊富である分、EKSは非常に学習コストがかかってしまいます。一方でECSはKubernetesと違って機能が少ない分、学習コストが大幅に低い、という特徴があります。また、Kubernetesが頻繁にアップデートがされていくため、それに追随してEKSも都度バージョンアップを行う必要があるなど、運用もECSと比較して大変になってきます。ECSとEKSの違いは料金面にもあります。EKSはコントロールプレーンとして起動している時間に応じて課金が発生します。
一方で、ECSはEC2を利用して構築する場合はEC2の利用料金分だけしかかからず、Fargateを利用する場合もFargateの起動時間分の料金のみが課金されるため、EKSと比較して安価に運用することができます。
どれを使うべき?
EKSとECSについてどちらを選択するか迷ったときは、構築するITシステムの複雑さ・担当者のスキルレベルを選定基準として考慮するといいでしょう。EKSでは、コンテナ(Pod)同士の通信および外部からの通信を、それぞれKubernetesの設定ファイル内で記述できます。
したがって、複雑なインフラでも設定ファイル内に記述することができ、統合的なインフラ管理が可能です。ECSで、これと同様の機能を実現するためには、手動やCloudFromation等で別途インフラを構築する必要があります。したがって、複雑なシステムであればEKS、シンプルなシステムであればECSを選択するといいでしょう。
また、担当者のスキルレベルについてですが、先述の通り、EKSはECSと比較して、学習コストが非常に高いです。担当者がKubernetesに関する十分な知識を持っていない場合は運用フェーズにおいて苦労することになります。したがって、担当者の技術レベルに不安感がある場合や、コンテナに慣れていない場合はECSを選択するといいでしょう。
一般的に、普通のサーバーからコンテナに移行するには、それなりの学習コストがかかってしまいます。コンテナの利用をスタートするにあたり、不安がある場合には、ノウハウを豊富に持ったベンダーに相談してみるといいでしょう。