メニュー
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.1 (467c3d7)" }

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

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

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

  3. インスタンスに Docker をインストールします。Amazon ECS では最小 Docker バージョンの 1.5.0 (バージョン 1.12.6 を推奨) が必要であり、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. コンテナインスタンスで以下のコマンドを実行して、タスク用の IAM ロールを有効にします。詳細については、「タスク用の IAM ロール」を参照してください。

    Copy
    sysctl -w net.ipv4.conf.all.route_localnet=1 iptables -t nat -A PREROUTING -p tcp -d 169.254.170.2 --dport 80 -j DNAT --to-destination 127.0.0.1:51679 iptables -t nat -A OUTPUT -d 169.254.170.2 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 51679

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

    注記

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

    次のエージェント実行コマンドの例は、各オプションを示すために複数の行に分けられています。
    • --env=ECS_CLUSTER=cluster_name オプションは、デフォルトクラスターに登録する場合は不要です。

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

    • タスク定義が特定のログドライバーのログ設定オプションを指定している場合、コンテナインスタンスで実行されている Amazon ECS コンテナエージェントで指定されたログドライバーを ECS_AVAILABLE_LOGGING_DRIVERS 環境変数に登録する必要があります。たとえば、json-file および awslogs ロギングドライバーを使用するコンテナインスタンスを登録する場合は、--env=ECS_AVAILABLE_LOGGING_DRIVERS='["json-file","awslogs"]' オプションを次の docker run コマンドに追加します。詳細については、「Amazon ECS コンテナエージェントの設定」を参照してください。

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

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

        Copy
        $ sudo mkdir -p /var/log/ecs $ sudo mkdir -p /var/lib/ecs/data

      • --privileged オプションを次の docker run コマンドに追加します。

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

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

    Copy
    ubuntu:~$ sudo docker run --name ecs-agent \ --detach=true \ --restart=on-failure:10 \ --volume=/var/run/docker.sock:/var/run/docker.sock \ --volume=/var/log/ecs/:/log \ --volume=/var/lib/ecs/data:/data \ --net=host \ --env=ECS_LOGFILE=/log/ecs-agent.log \ --env=ECS_LOGLEVEL=info \ --env=ECS_DATADIR=/data \ --env=ECS_CLUSTER=cluster_name \ --env=ECS_ENABLE_TASK_IAM_ROLE=true \ --env=ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true \ amazon/amazon-ecs-agent:latest

    注記

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