メニュー
Amazon EC2 Container Service
開発者ガイド (API Version 2014-11-13)

Amazon ECS コンテナエージェントのインストール

コンテナインスタンスが Amazon ECS コンテナエージェントを含む AMI から起動されていない場合は、次の手順でインストールできます。

注記

Amazon ECS コンテナエージェントは Amazon ECS 対応 AMI に含まれており、インストールする必要はありません。

Amazon Linux EC2 インスタンスに Amazon ECS コンテナエージェントをインストールするには

  1. Amazon ECS へのアクセスを許可する IAM ロールを使用して Amazon Linux インスタンスを起動します。詳細については、「Amazon ECS コンテナインスタンスの IAM ロール」を参照してください。

  2. インスタンスに接続します。

  3. ecs-init パッケージをインストールします。ecs-init の詳細については、GitHub でソースコードを参照してください。

    Copy
    [ec2-user ~]$ sudo yum install -y ecs-init
  4. Docker デーモンを開始します。

    Copy
    [ec2-user ~]$ sudo service docker start

    出力:

    Starting cgconfig service:                                 [  OK  ]
    Starting docker:	                                   [  OK  ]
  5. ecs-init アップスタートジョブを開始します。

    Copy
    [ec2-user ~]$ sudo start ecs

    出力:

    ecs start/running, process 2804
  6. (オプション) エージェント詳細分析 API を使用して、エージェントが実行されていることを確認し、新しいコンテナインスタンスの情報の一部を表示できます。詳細については、「Amazon ECS コンテナエージェントの詳細分析」を参照してください。

    Copy
    [ec2-user ~]$ curl http://localhost:51678/v1/metadata

    出力:

    {
      "Cluster": "default",
      "ContainerInstanceArn": "<container_instance_ARN>",
      "Version": "Amazon ECS Agent - v1.14.3 (15de319)"
    }

Amazon Linux ではない EC2 インスタンスに Amazon ECS コンテナエージェントをインストールするには

  1. Amazon ECS へのアクセスを許可する IAM ロールを使用して EC2 インスタンスを起動します。詳細については、「Amazon ECS コンテナインスタンスの IAM ロール」を参照してください。

  2. インスタンスに接続します。

  3. インスタンスに Docker をインストールします。Amazon ECS では最小 Docker バージョンの 1.5.0 (バージョン 17.03.1-ce を推奨) が必要であり、yumapt-get など、多くのシステムパッケージマネージャーのデフォルトの Docker バージョンは、この最小要件を満たしません。特定の Linux ディストリビューションで最新の Docker バージョンをインストールする方法については、https://docs.docker.com/engine/installation/ を参照してください。

    注記

    Amazon Linux AMI には、Amazon ECS で使用するための Docker の推奨バージョンが常に含まれています。sudo yum install docker -y コマンドを使用して、Docker を Amazon Linux にインストールできます。

  4. Docker のバージョンをチェックして、システムがバージョンの最小用件を満たしていることを確認します。

    Copy
    ubuntu:~$ sudo docker version

    出力:

    Client version: 1.4.1
    Client API version: 1.16
    Go version (client): go1.3.3
    Git commit (client): 5bc2ff8
    OS/Arch (client): linux/amd64
    Server version: 1.4.1
    Server API version: 1.16
    Go version (server): go1.3.3
    Git commit (server): 5bc2ff8

    この例では、Docker のバージョンは 1.5.0 の最小バージョンより低い 1.4.1 です。続行する前に、このインスタンスで Docker のバージョンをアップグレードする必要があります。特定の Linux ディストリビューションで最新の Docker バージョンをインストールする方法については、https://docs.docker.com/engine/installation/ を参照してください。

  5. コンテナインスタンスで以下のコマンドを実行すると、ポートプロキシがループバックアドレスを使用してトラフィックをルーティングできるようになります。

    Copy
    ubuntu:~$ sudo sh -c "echo 'net.ipv4.conf.all.route_localnet = 1' >> /etc/sysctl.conf" ubuntu:~$ sudo sysctl -p /etc/sysctl.conf
  6. コンテナインスタンスで以下のコマンドを実行して、タスク用の IAM ロールを有効にします。詳細については、「タスク用の IAM ロール」を参照してください。

    Copy
    ubuntu:~$ iptables -t nat -A PREROUTING -p tcp -d 169.254.170.2 --dport 80 -j DNAT --to-destination 127.0.0.1:51679 ubuntu:~$ iptables -t nat -A OUTPUT -d 169.254.170.2 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 51679
  7. オペレーティングシステム固有の場所に新しい iptables 設定を書き込みます。

    • Debian/Ubuntu の場合:

      Copy
      sudo sh -c 'iptables-save > /etc/iptables/rules.v4'
    • CentOS/RHEL の場合:

      Copy
      sudo sh -c 'iptables-save > /etc/sysconfig/iptables'
  8. /etc/ecs ディレクトリを作成し、Amazon ECS コンテナエージェント設定ファイルを作成します。

    Copy
    ubuntu:~$ sudo mkdir -p /etc/ecs && sudo touch /etc/ecs/ecs.config
  9. /etc/ecs/ecs.config ファイルを編集し、以下の内容を追加します。コンテナインスタンスをデフォルトのクラスターに登録しない場合は、クラスター名を ECS_CLUSTER の値として指定します。

    Copy
    ECS_DATADIR=/data ECS_ENABLE_TASK_IAM_ROLE=true ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true ECS_LOGFILE=/log/ecs-agent.log ECS_AVAILABLE_LOGGING_DRIVERS=["json-file","awslogs"] ECS_LOGLEVEL=info ECS_CLUSTER=default

    これらや他のエージェントランタイムオプションの詳細については、「Amazon ECS コンテナエージェントの設定」を参照してください。

    注記

    オプションで、エージェント環境変数を Amazon S3 に保存できます (これらの環境変数は、Amazon EC2 ユーザーデータを使用して、起動時にコンテナインスタンスにダウンロードできます)。これは、プライベートリポジトリの認証情報のような機密情報の場合に推奨されます。詳細については、「Amazon S3 にコンテナインスタンスの構成を保存する」および「プライベートレジストリの認証」を参照してください。

  10. コンテナインスタンスで最新の Amazon ECS コンテナエージェントを取得し、実行します。

    注記

    Docker 再起動ポリシーまたはプロセスマネージャー (upstart または systemd など) を使用してコンテナエージェントをサービスまたはデーモンとして扱い、終了した場合は確実に再起動されるようにします。詳細については、Docker ドキュメントの Automatically start containers および Restart policies を参照してください。Amazon ECS 対応 AMI はこのために ecs-init RPM を使用します。この RPM のソースコードは、GitHub で参照できます。たとえば、Ubuntu 16.04 と CentOS 7 の systemd ユニットファイルについては、「コンテナインスタンスのユーザーデータ設定スクリプトの例」を参照してください。

    次のエージェント実行コマンドの例は、各オプションを示すために複数の行に分けられています。これらや他のエージェントランタイムオプションの詳細については、「Amazon ECS コンテナエージェントの設定」を参照してください。

    重要

    SELinux 対応オペレーティングシステムでは、docker run コマンドに --privileged オプションが必要です。さらに、SELinux 対応コンテナインスタンスの場合は、/log および /data ボリュームマウントに :Z オプションを追加することをお勧めします。ただし、コマンドを実行する前に、これらのボリュームのホストマウントが存在する必要があります。存在しないと、no such file or directory エラーが発生します。SELinux 対応コンテナインスタンスで Amazon ECS エージェントの実行に問題が発生する場合は、次のアクションを実行します。

    • コンテナインスタンスにホストボリュームマウントポイントを作成します。

      Copy
      ubuntu:~$ sudo mkdir -p /var/log/ecs /var/lib/ecs/data
    • --privileged オプションを次の docker run コマンドに追加します。

    • 以下の docker run コマンドで、/log および /data コンテナボリュームマウントに :Z オプションを追加します (--volume=/var/log/ecs/:/log:Z など)。

    Copy
    ubuntu:~$ sudo docker run --name ecs-agent \ --detach=true \ --restart=on-failure:10 \ --volume=/var/run:/var/run \ --volume=/var/log/ecs/:/log \ --volume=/var/lib/ecs/data:/data \ --volume=/etc/ecs:/etc/ecs \ --net=host \ --env-file=/etc/ecs/ecs.config \ amazon/amazon-ecs-agent:latest

    注記

    Error response from daemon: Cannot start container メッセージが表示された場合は、sudo docker rm ecs-agent コマンドを使用して障害のあるコンテナを削除し、再度エージェントの実行を試みることができます。