こんにちは。命とかいてmikotoです。

今回のエントリーでは、Amazon EC2 Container Service(以下、ECS) の利用方法について解説します。

ECSの設定

クラスタの作成

まず、クラスタを作成します。
名前くらいしか設定することもないので楽チンです。

タスクの定義

実行する処理内容を定義します。
今回はnginxを動かしてみます。

33ac9bc9-4008-c7e9-3fe0-a87400a9c903

Task Definitionのページから、上記のようなタスクを定義しましょう。
下記の2つだけ抑えておけばOKです。

  • Image: nginx
  • Port Mappings: Host=80 → Guest=80

Imageは特に指定がない場合は、Docker Hubからダウンロードされます。
Privateな(個人用の)Docker Registryを利用する場合は、REGISTRY_HOST:PORT/IMAGEのように、Registryを指定することになります。

タスク or サービス?

ECSには、実行するタスクをタイプにより以下の2種類に分類されています。

  • タスク: 単純にタスクと言った場合は、こちらのショットで終わるプロセスのこと(一時的な処理)
  • サービス: 継続して実行し続けるタスク(Webサーバーなど)

今回は、上記でnginxのタスクを定義しましたので、サービスの場合を説明します。

サービスの作成

最初に作成したクラスタの詳細画面から、サービスを作成できます。
サービスで設定することは、大まかに以下の3つになります。

  • どのタスクを実行するか
  • インスタンスを幾つ起動するか
  • ロードバランサーを利用するか

今回は、上記で作成したタスク定義を選択し、インスタンス起動数=1、ロードバランサーを非利用としましょう。

ちなみに、ロードバランサーを利用する場合は、IAM Roleの設定が必要になりますが、作成ウィザードが出て来るので問題ないでしょう。

インスタンスの作成

ECSでは、タスクを割り当てられるインスタンスを起動し、クラスタに登録する必要があります。
インスタンスの起動方法には以下の2つがあります。

  1. EC2インスタンスを直接起動する
  2. Auto Scaling Groupを利用してインスタンスを起動する

今回は1.の直接インスタンスを起動する方法を紹介します。
Auto Scaling Groupを利用する際も、スケールの設定を除いたインスタンスに関する設定の範囲において、下記のECSを利用する場合のポイントを抑えておけば問題ないでしょう。

また、この章はLaunching an Amazon ECS Container Instance - Amazon EC2 Container Serviceを参考に作業を進めます。
Regionは東京( ap-northeast-1 )を想定しています。

1. AMIの選択

EC2のインスタンスの起動設定における最初のプロセスで、AMIの選択を行わなければなりません。
執筆時点では、ECSに対応した特定のAMIを選択する必要があります。

  1. 左メニューの 「コミュニティ AMI」から
  2. AMI ID = ami-fa12b7fa のAMIを選択して下さい

2

2. IAM Roleの設定

クラスタに登録するインスタンスには、適切なIAM Roleを設定しなければなりません。
ECS Agentと呼ばれるECSの構成管理プログラムがインストールされているのですが、Roleを付与することで、インスタンスのロードバランサーへの登録などの操作権限を付与する必要があります。

Roleの中身については、Amazon ECS Container Instance IAM Roleに言及されていますが、 AmazonEC2ContainerServiceforEC2Role がプリセットで用意されており、こちらをアタッチしたRoleを用意します。
こちらのRoleですが、ECSの 初回利用時に作成されます
誤って削除してしまった場合は、IAM Roleの管理コンソールから作成しましょう。

3

インスタンスへのIAM Roleの設定は、画像の枠線で囲った箇所で設定します。

3. 自動割り当てパブリックIPをEnableにする

同画面で、 自動割り当てパブリックIP有効 にすることで、インターネットからアクセスできるようになります。
(執筆時点では、無効の状態だとクラスタにうまく登録されませんでした。)

4. ユーザーデータの設定

ECSのクラスタに、インスタンスを所属させるには、 /etc/ecs/ecs.config ファイルにクラスタ名を設定しておく必要があります。
幾つか方法がありますが、今回はユーザーデータを利用する方法を紹介します。

4

インスタンスの設定画面の最下部の 高度な詳細 をクリックすると、ユーザーデータの入力欄が現われるので、ここに下記を入力します。
your_cluster_name は、上で設定したクラスタ名に置き換えて下さい。

#!/bin/bash
echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.config

その他の設定については、普段通りに設定し、インスタンスを起動しましょう。
しばらくすると、対応するクラスタの登録インスタンス一覧画面に、先程起動したインスタンスが表示されるはずです。

4. アクセスしてみよう

作成したクラスタに、サービスが起動していれば、自動的にインスタンスにタスクが割り当てられます。

タスクが割り当てられたことを確認できたら、http://インスタンスのIP にアクセスしてみましょう。
nginxが動作していることを確認できます。

5

最後に

いかがだったでしょうか?簡単ではありますが、EC2でnginxを立ててみるところまで行ってみました。参考になれば幸いです。