Amazon ECS コンテナエージェントの手動更新(Amazon ECS 最適化以外の AMI の場合)
場合によっては、バグの修正や新機能を取得するために Amazon ECS コンテナエージェントを更新する必要があります。Amazon ECS コンテナエージェントの更新によって、コンテナインスタンスで実行中のタスクやサービスが中断されることはありません。
注記
エージェント更新は Windows コンテナインスタンスに適用されません。Windows クラスター内のエージェントバージョンを更新するには、新しいコンテナインスタンスを起動することをお勧めします。
-
SSH 経由でコンテナインスタンスにログインします。
-
エージェントが
ECS_DATADIR
環境変数を使用して状態を保存しているかどうかを確認します。ubuntu:~$
docker inspect ecs-agent | grep ECS_DATADIR
出力:
"ECS_DATADIR=/data",
重要
前のコマンドで
ECS_DATADIR
環境変数が返されない場合は、エージェントを更新する前に、このコンテナインスタンスで実行されているタスクをすべて停止する必要があります。より新しいエージェントはECS_DATADIR
環境変数を使用して状態を保存するため、タスクが実行中でも問題なく更新できます。 -
Amazon ECS コンテナエージェントを停止します。
ubuntu:~$
docker stop ecs-agent
-
エージェントコンテナを削除します。
ubuntu:~$
docker rm ecs-agent
-
/etc/ecs
ディレクトリと Amazon ECS コンテナエージェント設定ファイルが/etc/ecs/ecs.config
に存在することを確認します。ubuntu:~$
sudo mkdir -p /etc/ecs && sudo touch /etc/ecs/ecs.config
-
/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 に Amazon ECS コンテナインスタンスの設定を保存するおよびAmazon ECS での AWS 以外のコンテナイメージの使用を参照してください。
-
Amazon Elastic Container Registry Public から最新の Amazon ECS コンテナエージェントイメージを取得します。
ubuntu:~$
docker pull public.ecr.aws/ecs/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
-
コンテナインスタンスで最新の Amazon ECS コンテナエージェントを実行します。
注記
Docker 再起動ポリシーまたはプロセスマネージャー (upstart または systemd など) を使用してコンテナエージェントをサービスまたはデーモンとして扱い、終了後に確実に再起動されるようにします。Amazon ECS に最適化された AMI はこのために
ecs-init
RPM を使用します。この[RPM のソースコード]は、GitHub で参照できます。 次のエージェント実行コマンドの例は、各オプションを示すために複数の行に分けられています。これらや他のエージェントランタイムオプションの詳細については、「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 \ --volume=/etc/ecs:/etc/ecs/pki \ --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 コマンドを使用して障害のあるコンテナを削除し、再度エージェントの実行を試みることができます。 -