まずはじめに
普段はJavaをメインにバックエンドの開発をしていますが、最近になってインフラ(AWS)を触る機会がとても多くなっており、頭の整理がてらアウトプットさせていただきます。
インフラ第一回目はコンテナについてです。
ECSってなにもの?
まずはじめにECSについて簡単に説明すると、ECSとはDockerコンテナを実行、停止、管理するためのフルマネージドなコンテナオーケストレーションサービスであり、 コンテナ化されたアプリケーションのスケーリング、ロードバランシング、ネットワーキング、および監視を簡素化してくれるサービスのこと。
簡単にいうと、とてもいい感じにコンテナの管理をしてくれるサービスです。
フルマネージド、オーケストレーションとは?
コンテナクラスタの管理、スケーリング、パッチ適用などのインフラ管理をAWSが担当してくれること。
オーケストレーション:管理
Dockerとは?
1台のサーバー上で様々なアプリケーションを手軽に仮想化・実行できるようにするためのプラットフォームのこと。
Dockerコンテナと呼ばれるアプリケーションの実行環境を、1台のサーバー上に作成することができる。
Dockerコンテナを作成するための設計図であるDockerイメージを共有することで、他ユーザーでも簡単に同じ開発環境のDockerコンテナを使ってアプリケーションを実行できる。
Dockerfile:Dockerイメージを作成するためのテキストデータ。OSの設定、言語のインストール、依存関係のインストールなどを記載する実行環境構築の手順書のようなもの。
Dockerイメージ:Dockerfileに記述された手順に従ってビルドされた、アプリケーションとその実行環境をパッケージとしてまとめたもの。ソースコード+実行環境
Dockerコンテナ:実行環境や依存関係をパッケージ化された仮想空間のようなもので、他のシステムに影響を与えない、与えられないように隔離されている。
ECSの構成要素
・クラスター
→ サービスやタスクを実行する実行基盤
・タスク定義
→ ECSがどのようにコンテナを実行すべきかを記述した設計図。アプリケーションを構成する1つまたは複数のコンテナ、それらのコンテナが使用するリソース、ネットワーク設定、ログ設定などを定義します。
・サービス
→ ECSにおいてタスクの実行と管理を維持し、指定されたdesired count(希望する実行数)を維持するもの。長時間稼働するWebサーバーやAPIなどのアプリケーションで使用される。
・タスク
→ タスク定義に基づいてECSクラスター上で実際に実行されているコンテナのインスタンス、実際に動いているアプリケーションのまとまり
EKS ECRとは何が違うの?
ESK(Elastic Kubernetes Service)
ESKはkubernetesのマネージドサービスで、オープンソースのkubernetesをAWS上で利用しているもの。(逆にECSはAWSが独自に開発したサービス)
ECSとESKはどちらもコンテナオーケストレーションサービスですが、採用している技術と、運用における特徴が異なっている。
ECR(Elastic Container Registry)
ECRとはDockerコンテナのイメージを保存するためのサービス
ECRはDockerfileやdocker-compose.ymlではなく、ビルドされたDockerイメージを保存する
ECSはコンテナを実際に実行する役割をもち、ECRはDockerイメージを保管する役割を持っている。
まとめ
ECSはコンテナ運用の強力な味方。
最後にECS運用のメリットをまとめて終わります。
1. 運用負荷からの解放:インフラ管理の心配なし
ECSを使う最大のメリットの一つは、コンテナインフラの管理から解放されることです。特にAWS Fargateを選択すれば、EC2インスタンスのOSパッチ適用、スケーリング、高可用性の維持といった面倒な作業はすべてAWSが引き受けてくれます。私たちはアプリケーションコードとコンテナイメージの作成に集中できるため、開発の生産性が大幅に向上します。
2. 高いスケーラビリティと可用性:急なアクセス増も怖くない
ECSのサービス機能とAuto Scalingの組み合わせにより、アプリケーションは必要な時に必要なだけスケールできます。トラフィックの急増にも柔軟に対応し、負荷分散機能と連携することで、ユーザーに途切れないサービスを提供できます。万が一、タスクが停止しても、ECSが自動的に新しいタスクを起動してくれるため、アプリケーションの可用性が高く保たれます。
3. 効率的なリソース利用とコスト最適化:使った分だけ賢く支払う
タスク定義でコンテナごとにCPUとメモリを細かく指定できるため、リソースを無駄なく利用できます。特にFargateの場合、コンテナが実際に利用したリソースに対してのみ課金されるため、アイドル状態のリソースに対する無駄なコストが発生しにくくなります。これにより、運用コストを最適化しやすくなります。
4. 開発とデプロイの高速化:モダンなCI/CDパイプラインの実現
ECRでコンテナイメージを一元管理し、ECSと連携させることで、継続的インテグレーション/継続的デリバリー(CI/CD)パイプラインを簡単に構築できます。新しいコードをデプロイする際も、ECSのサービスデプロイ機能を使えば、ダウンタイムを最小限に抑えながら安全にリリースを行うことが可能です。