LoginSignup
132

More than 1 year has passed since last update.

Amazon ECS

Last updated at Posted at 2018-12-13

◼︎Amazon ECSとは

Dockerコンテナサービスです。
※コンテナについての理解は、 ⬇︎の記事で。

様々なシステムやサービスの配置/設定/管理を自動化してくれる、要するにオーケストレーションです。

簡単に言うと・・・

アプリケーションの開発に専念したい!インフラ基盤を一から構成するのは面倒!
だから予め設定を保存して必要な時に呼び出してすぐアプリ開発ができるようにしちゃえ!
という考え方です。

(例)
1日のうちサーバの台数を
昼に10台
夜に10台
で計20台必要な異なるアプリケーションを運用していた場合

今までは、アプリケーションの実行環境毎にサーバを用意する必要がありました。
Dockerを使うと、昼に必要なリソースと夜に必要なリソースを同じ10台の中で管理をすることでサーバのコストを約半分に出来ます。
今までのDockerはこのサーバリソースが足りなくなった場合などの時はユーザー側でリソースの拡張を行なっていましたが、ECSなら、このサーバのリソースの拡張を自動で行なってくれるので、ユーザーがリソースの心配をすること無くDockerを利用することができる。

◼︎構成要素

スクリーンショット 2018-11-30 19.48.26.png

項目 説明
Cluster タスクやサービスを使う論理的なグループです。
Amazon ECS クラスター
Task Definition どうコンテナを実行するかの情報であり、その定義が書かれたものです。
Amazon ECS タスク定義
Task Task Definitionの情報から起動させたコンテナの実行単位です。
Service 実行されているTaskの数を希望数に保つ機能です。

ここでは、この用語について覚えておけばOK。
次から実際に触れて覚えていきましょう。

1.クラスターの作成

クラスターについて・・・
簡単にいうと、Dockerコンテナを動かすEC2インスタンスの集合体です。

と言ってもわからないですよねw

なので、とりあえずはクラスターを作成していきましょう。

「クラスター」から「クラスターの作成」
image.png

クラスターテンプレートの選択
「EC2 Linux + ネットワーキング」を選択し「次のステップ」
image.png

クラスターの設定
ここでは、Dockerを動かすEC2のスペックやVPC、セキュリティグループなどネットワーク周りの設定をしていきます。(EC2インスタンスを立てるのと同じ感覚です。)
今回は↓のような感じで「作成」

項目 入力
クラスター名 適当な名前
プロビジョニングモデル オンデマンドインスタンス
EC2 インスタンスタイプ t2.micro
T2 無制限の有効化 チェックしない
Amazon ECS コンソールに EC2 T2 無制限インスタンスのサポートを追加
インスタンス数 1
EBS ストレージ 22
キーペア SSH接続をするためのキーペアです。
ネットワーキング デフォルト
異なるAZ2つのサブネットと、ポート80でインターネットに開かれているセキュリティグループが設定されます。
コンテナインスタンスの IAM ロール ecsInstanceRole
適切な IAM アクセス許可を使用してコンテナインスタンスを起動しないと、Amazon ECS エージェントはクラスターに接続されません。
Amazon ECS コンテナインスタンス IAM ロール

image.png

無事完了しました。
image.png

「ECSインスタンス」を見ると、はい出来上がっている。
なお、本手順では実行しませんが、「ECSインスタンスのスケール」でスケールアップ/ダウンを設定していくことができます。
スクリーンショット 2019-02-08 22.29.05.png

2.タスク定義の作成

タスクを起動するためのTask Definitionを作成します。
どうコンテナを実行するかの情報が書かれた定義書見たいなものでしたね。

では、これも実際に触って感じて見ましょう。

「タスク定義」から「新しいタスク定義の作成」
image.png

起動タイプの互換性の選択
「EC2」を選択し「次のステップ」
image.png

タスクとコンテナの定義の設定
[タスク定義名]に適当な名前を入力し、「コンテナの追加」
以下はオプションです、今回は設定しません。
・(オプション)タスクロール
・(オプション)ネットワークモード
・(オプション)タスク実行ロール
・(省略可能)タスクメモリ、タスクCPU
image.png
image.png

コンテナを定義していきます。
これは docker run(コンテナ作成)するとフォアグラウンド(アクティブな状態となっているタスク)で httpd を実行する Dockerイメージです。
以下のとおり入力できたら、「追加」。

項目 入力
コンテナ名 適当な名前
イメージ httpd
メモリ制限(MB) ハード制限 300 
コンテナは、ここで指定したメモリを超えようとすると、強制終了されます。
ポートマッピング 80

image.png

コンテナ定義が出来上がったら、「作成」
image.png

3.サービスの作成

サービスでは、タスクとクラスターを紐づけます。

サービスによって、タスク定義のコピーがクラスターに起動され、維持されます。
例えば、あるアプリケーションをサービスとして実行し、停止したタスクがある場合、停止したタスクは Amazon ECS によって自動的に回復され、指定した数のコピーが維持されます。

「サービス」タブから「作成」
image.png

サービスの設定
[サービス名]に適当な名前、タスクの数「1」を入力し、「次のステップ」
image.png

ちなみにサービスタイプって?
・レプリカ:指定したタスク定義のインスタンスをクラスターに配置し、維持する。→タスクの数を指定できる。
・デーモン:各コンテナインスタンスにタスクの1つのコピーを配置し、維持する。→タスクの数は自動となる。

ネットワーク構成
Auto Scaling (オプション)
上記2つのステップは今回なにもせずに「次のステップ」

サービスの確認
「サービスの作成」で完了する。

◼︎ECS コンテナエージェント

ECSコンテナインスタンスにはコンテナエージェントが常駐しており、パラメータを変更することでECSの動作を調整できる。設定ファイルの場所は /etc/ecs/ecs.config。
使用できるパラメータ

◼︎コンテナ実行

タスクの配置(EC2のみ)

1.タスク定義で要求される要件を満たすインスタンスを識別
2.タスク定義の制約事項を満たすインスタンスを識別
3.タスク配置戦略を満たすインスタンスを識別
4.タスクを配置するインスタンスを選択

タスク配置中に考慮されるルール

  • タスク配置中に考慮されるルールで、AZやインスタンスタイプに基づいて制約をかけられる

タスクの配置戦略

  • タスク配置もしくは終了時にどのインスタンスを配置、終了するかを選択するアルゴリズム
戦略タイプ 説明
binpack CPU またはメモリの最小利用可能量に基づいてタスクを配置。使用するインスタンス数を最小限に抑えます。
random デフォルト:全てのEC2インスタンスの中からランダムに配置される
spread 指定された条件でバランス良く配置する

サービススケジューラ戦略(EC2のみ)

  • サービスをスケジューリングする際の戦略
REPLICA DAEMON
クラスター全体で必要なタスクの実行数を指定する。クラスター全体に対して何個のタスクを実行するか。 ホストの増減に合わせて、タスクの実行数を制御する。EC2のコンテナ1つに対して1つのコンテナ。

Amazon ECS キャパシティープロバイダー

  • タスク配置先の柔軟なコントロールが可能。例えば60%はオンデマンドで残りはスポットインスタンスにするようにする等。
    • EC2:EC2 ASG にキャパシティープロバイダー を紐付ける.
    • Fargate:キャパシティープロバイダーは⾃動的に⽤意される。

◼︎リンク

Amazon ECS サービス作成に失敗する
Amazon ECS の DAEMONタイプ
Amazon ECS - EC2クラスターの作成(AWS CLI)
Amazon ECS-Blue / GreenデプロイでALBのターゲットグループを変更
Amazon ECS 細かい箇所を整理してみた
Amazon ECSネットワークモードを検証してみる
Amazon ECS の Volumes と Bind Mount の仕組み
Amazon ECS 一通の動作
ECS Exec

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
132