ECS

概要

ECS(Amazon Elastic Container Service)は、AWSのコンテナ管理サービス。Dockerコンテナを実行、管理してWEBサービスを提供できる。

Memo

ecsTaskRoleとecsTaskExecutionRole

2つのロールがある。

  • ecsExecutionRoleは、コンテナ起動時に利用するAWSサービスのロール。SSMパラメータや、ECRとの接続などを行う
  • ecsTaskRoleは、コンテナ起動後も利用するAWSサービスのロール。タスクに付与することで利用する。
  • ECS execを実行するとき:
    • あらかじめTaskにecsTaskRoleを指定して起動する
    • ServiceでenableExecuteCommandをオンにして再起動
    • 新しくTaskを作る
    • ECS execを実行する

概念図

独自用語がある。Amazon EC2 Container Service(ECS)の概念整理 - Qiitaが非常にわかりやすい。

Railsの構成の例。

  • Production Cluster
    • main Service … Webサーバ+アプリケーションサーバ
      • Task
        • App Container … Railsを動かす
        • nginx Container
    • worker Service … バッチ処理
      • Task
        • worker Container … sidekiqワーカーを動かす

ServiceはTaskのデプロイ戦略、Task数を管理する。Taskはtask-definitionをもとに作成され、容易にスケールできる。

デプロイ方法

ECSにおけるdeployは、「task-definitionのimageタグを書き換えること」となる。これによって使用イメージを最新のものに切り替えてtask-definitionをpushすることで、新しいTaskは新しいイメージを使用してコンテナを立ち上げる。これによって変更を本番環境に反映できる。

このようにデプロイは本質的にシンプルなので、いくつかの方法がある。

  • AWS公式のGitHub Actions シンプルな機能だけを提供し、使い方がとても簡単。だが、環境やServiceが複数になったときtask-definitionの重複が大きくなり、管理が難しくなる。
  • ecs-cli 細かく設定でき高機能。オーバライドで重複をなくすこともできるが、コマンドが冗長。
  • ecspresso(ecs-cliの管理に特化したラッパーライブラリ) おすすめ。カヤック社が提供するOSS。task-definitionにテンプレートを定義し、実行時に環境変数で埋め込める機能が便利。さらにenvfile指定によって環境変数の組み合わせを環境ごと、Serviceごとに定義でき、メンテナンスしやすくなる。

task-definitionは微妙に異なる内容で環境×Service分必要になるので、DRYにするためには柔軟にオーバーライドできる機能は必須。

Tasks

Reference

Archives