はじめに
インフラ系エンジニア5年目です。
携わった開発の中でECS on Fargateの構成でバッチ系の処理を動かしたことがありますが、新たにオンライン処理をECS on Fargateで動かしてみようと考えており、改めてAWSのWorkshopを参考に理解を深めようと下記のシリーズ建てでまとめていこうと思います。(あくまで参考です!)
◆投稿予定(適宜変更します)◆
- #1 Introduction ★本投稿
- #2 コンテナのデプロイ
- #3 コンテナのモニタリング
- #4 コンテナのスケーリング
- #5 コンテナのB/Gリリース
参考ページリンク:https://ecsworkshop.com/
Introduction
本投稿はまずIntroductionを整理します。
コンテナって何?何がいいの?というビギナーレベルの方向けの情報になっているため、不要な人は読み飛ばし、#2 コンテナのデプロイ編をご覧ください。
中身は下記公式ページの意訳+個人の所感になっています。
https://ecsworkshop.com/introduction/
コンテナとは?
コンテナイメージはアプリケーションのコード、Configなどをパッケージ化されたイメージとなります。
上記のイメージをOS上でリソースが分離されたプロセスとして、実行させることが可能なため、実行環境に依存せず、迅速で信頼性/一貫性の高い、デプロイが可能となる点がコンテナの強みです。
Dockerとは?
コンテナ技術に触れる上でDockerは避けては通れません。
Dockerは前述したイメージのパッケージ化やそのイメージをデプロイするなど、コンテナ技術に関するプラットフォームになっています。
Dockerエンジンがインストールされていれば、Linux/Windows/macOSなどOSに依存することなく、イメージにパッケージされたアプリケーションの動作が保証されます。
ECS概要
コンテナが一般的に利用されるにつれて、コンテナのバージョニング管理やコンテナスケーリングのスケジュールといった新たな課題が発生してきました。
これらを解決するツールがコンテナオーケストレーションサービスと呼ばれる分野でKubernatesなどが代表的なサービスです。
ECSはAWSが提供するスケーラビリティが高いコンテナオーケストレーションサービスです。
以下にECSを構成するコンポーネントに関する概要を説明します。
Cluster
Clusterはタスクまたはサービスと呼ばれるコンテナで実行されるAP群の論理グループとなります。
タスクまたはサービスを実行する際に、EC2起動タイプを選択した場合、クラスターはコンテナ実行するEC2のインスタンスのグループと同義になります。
Capacity providers起動タイプを選択するCapacitiy providers(=EC2のAutoScalingGroupと紐づけ可能)の論理グループ名になります。
Clusterはアカウント内に複数作成することでAP機能群ごとにリソースを分離することが可能です。(分離することでリソース使用の最適化は困難となるためコストとのトレードオフです。)
Task Definitions
タスク定義(=Task Definitions)はJSON形式のコンテナ起動に関する定義です。
下記のようなパラメータについて定義します。
- 起動するコンテナイメージ(1つ以上最大10個まで定義可能)
- 起動タイプ(EC2/Fargateなど)
- 利用するポート
- コンテナが使用するボリューム
詳細は下記を参照してください。
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html
Tasks and Scheduling
タスクとはタスク定義のインスタンス化したものです。
タスク定義と同義である認識で問題ないと思います。
実際にはタスク実行時には、どのタスク定義を何個起動する(サブネットやSecurityGroupの指定も可能)のかなどを指定します。
起動するコンテナの数はECSタスクスケジューラで高度に管理できます。
維持するタスク数や新たにコンテナ起動する際の間隔などを定義しておくことで、スケールアウト時の挙動をコントロールできます。
AutoScalingGroupのスケジュール定義を触ったことある方は理解しやすいと思います。
Services
Servicesを利用することでタスクの同時起動や起動数の維持を定義することが可能です。
何かしらの理由でタスク起動に失敗、もしくは停止してしまった場合、スケジューラ定義に応じて、Servicesで定義されたタスクの必要数を維持します。
Serviceのスケジュール戦略として2種類が準備されている。
- レプリカタイプ
クラスターに必要な数のタスクを配置、維持します。通常の業務機能はこちらのタイプを選択すればよいかと思います - デーモンタイプ
コンテナがデプロイされるEC2インスタンス1つにつき、1タスクが起動されます。ロギング、モニタリング、またはアプリケーションコードを実行するタスクのバックアップのような共通サポート機能を付与するために利用される。Fargateでは利用できないことに注意してください。
Fargate
Fargateはコンテナ実行環境のフルマネージドサービスです。
利用することでEC2やクラスターの管理から解放されます。
Service Discovery
コンテナはイミュータブルなものであり、機能追加/改修時には新しいバージョンのコンテナで置き換えることが基本となります。
そのため、古いバージョンで起動しているコンテナの検出する技術が必要となります。
AWSではCloud MapというサービスがECSに統合されて提供されています。