AWS CLI を使って AWS ECS でタスクを実行するために必要なコマンドをまとめます。
この記事を読むためには AWS EC2、AWS S3 および docker に対する基本的な知識が必要です。
サービス、メトリクス、タスクのスケジューリングについては記載しません。
前記事:AWS CLI で AWS batch にジョブを送信する (全3回)とリンクしていますが、未読でも問題なく読めるように記載したつもりです。
参考:EC2 タスクを使用した AWS CLI のウォークスルー
目次
全4回です。
- はじめに ← イマココ
- タスクを実行してみる
- 一連の流れをスクリプト化する
- 汎用 docker イメージを使用する
Amazon Elastic Container Service (Amazon ECS) とは
正確な情報はAmazon 公式ドキュメントを参照してください。
Amazon Elastic Container Service (Amazon ECS) は、Docker コンテナの定義、実行、停止を管理するためのサービスです。
AWS Batch がジョブの実行に特化しているのに比べて Amazon ECS はコンテナ管理に特化していると言えます。
この記事で実現しようとしていること
以下のようなバッチジョブ実行システムを作ろうとしています。
- 元画像(入力データ)は複数あり、AWS S3 に置いてあります。
- 入力データをいろいろな種類の画像処理システムで加工して AWS S3 に出力します。
- 処理システムは EC2 インスタンス上の docker コンテナを想定しています。
バッチジョブ実行システムについて、こちらに記載しました。バッチジョブ実行システム
また、今回は1つのタスク(オレンジの線1本分)に対して、インスタンスを1つ作成します。
あらかじめ大きなインスタンスを作成しておいて、複数のタスクを投入することも考えられますが、ここでは必要なスペックのインスタンスをタスクごとに用意してタスクが終了したらさっさと削除する仕様にします。
Amazon ECS の構成要素
Amazon ECS は以下3つの要素から構成されます。簡単に説明します。
- タスク ... 実際の作業単位。タスク定義に基づいて作成され、クラスターに投入される。
- タスク定義 ... タスクの実行環境を定義したもの。例えば、docker イメージや実行に必要な vcpus, memory を定義する。
- クラスター ... タスクを実行するために1つ以上作成する EC2 インスタンスの定義。
AWS batch でなく Amazon ECS を使用する意味
※ 2018 年 3 月時点の情報です。最新版では更新されている可能性があります。
記事の最初でも書きましたが、AWS の構想としてはタスク(ジョブ)の実行には AWS Batch が向いていそうです。
私があえて Amazon ECS を使おうと思った理由は以下2点です。
Amazon ECS ではできるけれど、AWS Batch ではできないこととも言えます。
- 大きなファイルサイズのデータを扱うため、docker コンテナのストレージを増やしたい
- EC2 インスタンスの起動終了のタイミングを自分で指定したい
実際の AWS CLI コマンドは次回、タスクを実行してみる で解説します。