Amazon ECS

2021年12月27日

はじめに

AWS で Docker コンテナを利用する Elastic Container Service (ECS) を使ってみる。

リポジトリの作成

ECS で Docker コンテナを利用するために、Amazon Elastic Container Repository (ECR) でリポジトリを作る。

  1. AWS で ECS のサービスを開く。
  2. 左の Amazon ECR の [リポジトリ] で [リポジトリの作成]。
  3. 「プライベート」のままで、リポジトリ名を設定。
  4. [リポジトリを作成]。

EC2 インスタンスで Docker を利用する

EC2 インスタンス (ここでは Amazon Linux 2) で Docker イメージを用意する。そのために、Docker のセットアップをする。

docker のインストールとサービスの開始。

$ sudo amazon-linux-extras install docker
$ sudo service docker start

sudo を不要になるように設定する。

$ sudo usermod -a -G docker ec2-user

一旦ログアウトして、接続しなおす。確認。

$ docker info

Docker イメージを取得するなり、作成するなりする。

イメージの登録

用意した Docker イメージを ECR のリポジトリに登録する。

ECR でリポジトリを選択して、[プッシュコマンドの表示]。以下のようなコマンドが表示される。

$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin xxxxx.dkr.ecr.ap-northeast-1.amazonaws.com

前段 ("|" まで) は AWS CLI のコマンドなので、AWS CLI の設定を済ませておく必要がある。あるいは、ここでやっていることはパスワードの文字列を取得しているだけなので、CloudShell でやってしまってもよい。たとえば CloudShell で次のようにする。

$ aws ecr get-login-password --region ap-northeast-1

出てきた文字列をコピーする。EC2 インスタンスのほうで、エディタを開き、コピーした文字列を貼り付ける。たとえば "docker_pass" というファイル名で保存する。そして次のようにする。

$ cat docker_pass | docker login --username AWS --password-stdin xxxxx.dkr.ecr.ap-northeast-1.amazonaws.com

これでリポジトリにログインしたことになる。イメージをリポジトリにアップロード (プッシュ) する。まず、タグ付けする。

$ docker tag <イメージ名>:latest xxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/<リポジトリ名>:latest

プッシュする。

$ docker push xxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/<リポジトリ名>:latest

ECR の画面でプッシュしたイメージの情報が出てくるはずである。

クラスターの作成

ECS で「クラスター」を作成する。クラスターは「タスク」の形で Docker コンテナを管理する。

  1. Amazon ECS の [クラスター] の [クラスターの作成]。
  2. 「クラスターテンプレートの選択」で [EC2 Linux + ネットワーキング] を選択。[次のステップ] へ。
  3. 「クラスター名」を入れる。
  4. 「EC2 インスタンスタイプ」を選ぶ。
  5. 「キーペア」を選択しておく。なければ作る。
  6. 「VPC」で既存の VPC を選ぶ。「サブネット」と「セキュリティグループ」を選ぶ。
  7. [作成]。終わるまで待つ。[クラスターの表示]。

タスクの作成

クラスターで Docker コンテナを実行するために、タスクを作成する。

  1. Amazon ECS の [タスク定義] の [新しいタスク定義の作成]。
  2. 「起動タイプの互換性の選択」で [EC2] を選ぶ。[次のステップ]。
  3. 「タスク定義名」を入れる。「タスクロール」は「なし」。
  4. [コンテナ追加]。
    1. 「コンテナ名」を設定。
    2. 別途、リポジトリのイメージで「イメージの URI」をコピーしておいて、「イメージ」に貼り付ける。
    3. 「メモリ制限」は 300 とかにしておく。
    4. 「ポートマッピング」を設定する。
    5. [追加]。
  5. [作成]。

タスクの実行

ECS のクラスターでタスク (Docker コンテナ) を実行する。

  1. Amazon ECS の [クラスター] の画面で [タスク]-[新しいタスクの実行]。
  2. 起動タイプとタスクを選んで [タスクの実行]。

EC2 タイプの場合、キーペアを設定しておけば Docker コンテナを実行しているインスタンスに SSH で入ることができる。タスクの「コンテナインスタンス」を選んで、パブリック DNS を調べればよい。入れたら Docker コンテナが動いているのを確認できる。

$ docker ps -a