3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Amazon ECS Workshop #1 ~Introduction~

Last updated at Posted at 2020-08-21

はじめに

インフラ系エンジニア5年目です。
携わった開発の中でECS on Fargateの構成でバッチ系の処理を動かしたことがありますが、新たにオンライン処理をECS on Fargateで動かしてみようと考えており、改めてAWSのWorkshopを参考に理解を深めようと下記のシリーズ建てでまとめていこうと思います。(あくまで参考です!)

◆投稿予定(適宜変更します)◆

参考ページリンク: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に統合されて提供されています。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?