ユーザ用ツール

サイト用ツール


aws:ecs:index.html

AWS ECSで、コンテナ起動

ECSとは

Amazon Elastic Container Service
Dockerコンテナを実行および管理

AWS が独自に開発しているコンテナのオーケストレーションサービス
タスク定義とサービス定義で構築します。

タスク定義 kubernetesのPod
サービス定義 そのタスク定義のネットワーク周辺やスケーリングポリシーなどを定義

EC2 起動タイプ(ホストマシン上でコンテナを実行する)と Fargate 起動タイプから自社のワークロードに合ったものをお選びいただくことが出来ます。

EC2 の上で ecs-agent を動かすことで、ECS のクラスタとして認識させることができる
ecs-agent が動いていれば、ECS を通して EC2 の上でコンテナを簡単に動かすことができます。

ECS 向けに awslogs という Docker 用の logging driver を提供していて、CloudWatch Logs との連携も簡単に行えます。


構成要素

クラスター(Cluster)

タスクやサービスの論理的なグループ

クラスターの数の設計

アプリケーションごと、環境ごとに用意します。
例えばHogeというサービスとFugaというサービスがあり、それぞれにstg環境・prd環境があるならば、
clusterはHoge-prd/Hoge-stg/Fuga-prd/Fuga-stgの4つが用意されていると良いです。

タスク定義 (Task Definition)

どういうコンテナを実行するかの情報

  • 使用する Docker イメージ
  • 使用する CPU とメモリの量
複数のコンテナを同じタスク定義に配置するか、複数のコンテナを複数のタスク定義に個別にデプロイするか

https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/application_architecture.html

次の条件が必要な場合は、コンテナを 1 つのタスク定義にデプロイすることをお勧めします。

  • コンテナが同じライフサイクルを共有している (つまり、同時に起動および終了する)。
  • 実行基盤となるホストが同じになるようにコンテナを実行する (つまり、あるコンテナが、localhost ポート上の別のコンテナを参照する) 必要がある。
  • コンテナがリソースを共有する必要がある。
  • コンテナでデータボリュームを共有している。

上記以外の場合は、個別のタスク定義でコンテナを定義することで、コンテナを個別にスケーリング、プロビジョニング、プロビジョニング解除できるようになります。

タスク(Task)

Task Definition情報から起動させたコンテナの実行単位

サービス(Service)

実行されているTaskの数を希望数に保つ
UnhealthyなTaskを自動的に入れ替える


作成手順

クラスターの作成手順

「クラスター」から「クラスターの作成」
「EC2 Linux + ネットワーキング」を選択し「次のステップ」

クラスター名 適当な名前
プロビジョニングモデル オンデマンドインスタンス
EC2 インスタンスタイプ t2.micro
T2 無制限の有効化 チェックしない
インスタンス数 1
EBS ストレージ 22
キーペア SSH接続をするためのキーペア
ネットワーキング デフォルト
コンテナインスタンスの IAM ロール


タスク定義の作成手順

「タスク定義」から「新しいタスク定義の作成」
「EC2」を選択し「次のステップ」

タスク定義
タスク定義名
タスクロール
ネットワークモード
タスク実行ロール
タスクメモリ
タスクCPU
コンテナを定義
コンテナ名 httpd-ecs
イメージ httpd
カスタムイメージ形式
メモリ制限(MB) 300 
指定したメモリを超えようとすると、強制終了
ポートマッピング 80


サービスの作成手順

タスクとクラスターを紐づけ

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

起動タイプ FARGATEかEC2
タスク定義
クラスタ
サービスタイプ REPLICA(タスク数を指定できる)
DEAMON(タスク数を指定できない)
タスク数


参考

aws/ecs/index.html.txt · 最終更新: 2021/07/19 09:17 by kurihara

ページ用ツール