Amazon Elastic Container Service
開発者ガイド (API バージョン 2014-11-13)

Amazon ECS コンテナエージェントの手動更新 (Amazon ECS-Optimized AMI 以外の場合)

Amazon ECS コンテナエージェントを手動更新するには (Amazon ECS-optimized AMI 以外の場合)

注記

エージェント更新は Windows コンテナインスタンスに適用されません。Windows クラスター内のエージェントバージョンを更新するには、新しいコンテナインスタンスを起動することをお勧めします。

  1. SSH 経由でコンテナインスタンスにログインします。

  2. エージェントが ECS_DATADIR 環境変数を使用して状態を保存しているかどうかを確認します。

    ubuntu:~$ docker inspect ecs-agent | grep ECS_DATADIR

    出力:

    "ECS_DATADIR=/data",

    重要

    前のコマンドで ECS_DATADIR 環境変数が返されない場合は、エージェントを更新する前に、このコンテナインスタンスで実行されているタスクをすべて停止する必要があります。より新しいエージェントは ECS_DATADIR 環境変数を使用して状態を保存するため、タスクが実行中でも問題なく更新できます。

  3. Amazon ECS コンテナエージェントを停止します。

    ubuntu:~$ docker stop ecs-agent
  4. エージェントコンテナを削除します。

    ubuntu:~$ docker rm ecs-agent
  5. /etc/ecs ディレクトリと Amazon ECS コンテナエージェント設定ファイルが /etc/ecs/ecs.config に存在することを確認します。

    ubuntu:~$ sudo mkdir -p /etc/ecs && sudo touch /etc/ecs/ecs.config
  6. /etc/ecs/ecs.config ファイルを編集して、少なくとも以下の変数宣言が必ず含まれるようにします。コンテナインスタンスをデフォルトのクラスターに登録しない場合は、クラスター名を ECS_CLUSTER の値として指定します。

    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 にコンテナインスタンスの構成を保存する」および「タスクのプライベートレジストリの認証」を参照してください。

  7. 最新の Amazon ECS コンテナエージェントイメージを Docker Hub から取得します。

    ubuntu:~$ docker pull amazon/amazon-ecs-agent:latest

    出力:

    Pulling repository amazon/amazon-ecs-agent a5a56a5e13dc: Download complete 511136ea3c5a: Download complete 9950b5d678a1: Download complete c48ddcf21b63: Download complete Status: Image is up to date for amazon/amazon-ecs-agent:latest
  8. コンテナインスタンスで最新の Amazon ECS コンテナエージェントを実行します。

    注記

    Docker 再起動ポリシーまたはプロセスマネージャー (upstart または systemd など) を使用してコンテナエージェントをサービスまたはデーモンとして扱い、終了後に確実に再起動されるようにします。詳細については、Docker ドキュメントの Automatically start containers および Restart policies を参照してください。Amazon ECS-optimized 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 エージェントの実行に問題が発生する場合は、次のアクションを実行します。

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

      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 など)。

    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 コマンドを使用して障害のあるコンテナを削除し、再度エージェントの実行を試みることができます。