コンテナサービス(Amazon ECS / ECR / EKS)

Dockerコンテナの基本概念と、AWSのコンテナオーケストレーションサービスであるECS/ECR/EKSの特徴、起動タイプの選び方を整理します。

学習順Step 88 / 89サービス自動化試験ドメイン弾力性

コンテナとDockerの基本

コンテナは、仮想化サーバーを構成するための方式の1つです。従来のEC2インスタンスのような仮想化では、物理マシン上にHypervisorなどの仮想化ソフトウェアを配置し、その上で個別のゲストOSを起動します。一方、コンテナはホストマシンのOSカーネルを共有し、プロセスやユーザーなどをOSレベルで隔離することで、ゲストOSを持たない軽量な実行環境を実現します。

Dockerは、このコンテナ方式による仮想環境の作成・配布・実行を行うためのプラットフォームです。Dockerを使うことで、アプリケーションの実行環境(ミドルウェアのインストールや設定)をコードとして管理できるようになり、次のような利点が生まれます。

  • コード化されたファイルを共有するだけで、誰でも同じ環境を再現できる
  • 作成したコンテナイメージの配布・共有が容易
  • 環境の構築・削除が数秒単位で完了するため、CI/CDのような高速な開発サイクルに向いている

Amazonのコンテナサービスの全体像

AWSのコンテナサービスは、次の3つの役割に分けて理解すると整理しやすくなります。

役割 説明 対応するサービス
レジストリ コンテナイメージを保管する場所 Amazon ECR
コントロールプレーン コンテナを管理・スケジューリングするサービス Amazon ECS, Amazon EKS
データプレーン コンテナが実際に実行される環境 AWS Fargate, Amazon EC2

Amazon ECS(Elastic Container Service)

ECSは、Dockerコンテナをサポートする、拡張性とパフォーマンスに優れたコンテナオーケストレーションサービスです。ECSを使うことで、コンテナ化されたアプリケーションをAWS上で簡単に実行・スケールできます。

ECSの主な特徴は次の通りです。

  • コンテナの起動と停止をAWS側で制御し、数十から数万個のコンテナでも数秒で起動できる
  • ELB、VPC、IAM、ECR、CloudWatch、CloudFormation、CloudTrailなど、多くのAWSサービスと統合できる
  • VPCネットワークモードでは、タスクごとにENI(ネットワークインターフェース)を自動割り当てし、セキュリティグループをタスク単位で設定できる。これにより、VPC内の他のリソースへプライベートIPで直接通信できる

タスク定義とタスク

ECSでDockerコンテナを実行する際は、まず「タスク定義」を作成します。タスク定義は、実行するコンテナのリソース使用量(CPU・メモリ)や、使用するコンテナイメージなどの情報を決める設計図です。ECSはこのタスク定義に基づいて「タスク」を起動し、実際にコンテナを実行します。

ECSにおけるタスク実行の流れ

タスクの実行に必要な権限は、IAMロールによってタスクごとに個別に割り当てる必要があります。これにより、同じECSクラスター内のタスクであっても、それぞれ異なるリソースへのアクセス権限を持たせることができます。

起動タイプ:EC2 と Fargate

ECS(およびEKS)でコンテナを実行する際は、コンテナが動作する基盤となるコンピューティングエンジンを選択します。

  • EC2起動タイプ:自分でEC2インスタンスのクラスターを起動し、管理します。サーバーレベルでの詳細なコントロールが可能で、インスタンスタイプの選択やクラスター構成を柔軟にカスタマイズできます。料金は、利用したEC2インスタンスやEBSボリュームに対してのみ発生します。
  • Fargate起動タイプ:ECSとEKSの両方で利用できるサーバーレスなコンピューティングエンジンです。インスタンスタイプの選択やクラスタースケジューリングの管理、最適化を自動化してくれるため、サーバー管理そのものが不要になります。CPUとメモリなどのアプリケーション要件を定義するだけで、必要なスケーリングやインフラの管理はFargateが行います。料金は、コンテナイメージを取得した時点からタスクが終了するまでの、vCPUとメモリリソースの利用量に対して発生します。

運用の柔軟性を重視するならEC2起動タイプ、インフラ管理そのものから解放されたいならFargate起動タイプを選びます。

Amazon ECR(Elastic Container Registry)

ECRは、フルマネージド型のコンテナイメージレジストリサービスです。Dockerコンテナイメージの保存・管理・デプロイを行います。

  • IAMによる認証管理が組み込まれており、誰がイメージを取得・登録できるかを制御できる
  • Amazon ECR publicを使うと、イメージをパブリックに共有することもできる
  • ECSやDocker CLIと統合されており、開発から本稼働までのワークフローを簡素化する
  • ライフサイクルポリシーを設定することで、古くなったイメージを自動的にクリーンアップできる
  • VPCネットワークモードでタスクごとにENIを自動割り当てすることで、セキュリティグループをタスク単位で設定できる

Amazon EKS(Elastic Kubernetes Service)

EKSは、オープンソースのコンテナオーケストレーションツールであるKubernetesを使って、コンテナ化されたアプリケーションのデプロイ・管理・スケーリングを行うマネージド型サービスです。

Kubernetesは、自動デプロイ・スケーリング・アプリケーションやコンテナの運用自動化を目的として設計されたオープンソースのプラットフォームで、豊富なコミュニティ製プラグインやツールを活用できるのが強みです。EKSはマネージド型サービスであるため、コントロールプレーン自体の管理は不要です。また、ワーカーノードとマネージドコントロールプレーンの間には、暗号化された安全な通信チャネルが自動的にセットアップされます。

既存のKubernetes環境で運用しているアプリケーションとの互換性が求められる場合や、Kubernetesの豊富なエコシステムを活用したい場合はEKSを、AWS独自のシンプルなコンテナオーケストレーションで十分な場合はECSを選択するのが基本的な考え方です。

ALBとの連携

ECSでコンテナ化されたアプリケーションを外部に公開する際は、Application Load Balancer(ALB)と組み合わせるのが一般的です。ALBとECSを連携させる方法には、次の2つがあります。

  • パスベースルーティング:ALBのパスベースルーティング機能を利用し、URLのパスに応じて異なるターゲットグループへリクエストを振り分けます。ECS側でもコンテナを指定してパスルーティングを実装できます。
  • 動的ポートマッピング:ECSで起動したコンテナをターゲットグループに登録する際、タスク定義側で動的にポート番号を割り当て、そのポート番号に応じてALBがトラフィックを振り分けます。この構成を使う場合、セキュリティグループでは複数のポート番号へのアクセスを許可する設定が必要になります。

重要ポイント

  • コンテナはホストOSのカーネルを共有し、OSレベルで仮想化する軽量な実行環境
  • レジストリ(ECR)/コントロールプレーン(ECS・EKS)/データプレーン(EC2・Fargate)という3層構造で理解する
  • EC2起動タイプはサーバー管理が必要、Fargate起動タイプはサーバーレスで管理不要
  • タスク定義がコンテナの実行内容・リソース使用量を決める
  • タスクへのアクセス権限はIAMロールで個別に割り当てる

このトピックの学習を完了しますか?

完了状態はいつでも切り替えられます

同じサービスの関連トピック

IaC / 環境自動化 / コンテナ に関連するトピックを続けて確認できます。