Amazon ECS コンテナエージェントのプライベートリポジトリの認証情報を更新する方法を教えてください。

最終更新日: 2020 年 9 月 24 日

環境変数または AWS Secrets Manager を介して提供される、Amazon Elastic Container Service (Amazon ECS) コンテナエージェントのプライベートリポジトリ認証情報を更新したいと考えています。

簡単な説明

Amazon ECS コンテナエージェントにプライベートリポジトリの認証情報を提供するには、Amazon ECS タスク定義の環境変数または Secrets Manager のいずれかを使用します。以下のいずれかのオプションを選択してください。

  • インスタンスユーザーデータと環境変数を使用してプライベートリポジトリの認証情報を提供する場合は、環境変数を使用してプライベートリポジトリ認証情報を更新するのセクションの手順に従います。
  • Secrets Manager を使用してプライベートリポジトリの認証情報を提供する場合は、AWS Secrets Manager でプライベートリポジトリの認証情報を更新するのセクションの手順に従います。

解決方法

環境変数を使ってプライベートリポジトリの認証情報を更新する

1.    コンテナインスタンスに接続します

2.    Amazon ECS コンテナエージェントに Docker の認証情報をどのように提供しているかを調べるには、次のコマンドを実行します。

$ cat /etc/ecs/ecs.config

このコマンドは /etc/ecs/ecs.config ファイルの内容を返します。

ECS_ENGINE_AUTH_TYPE 変数の値が docker に設定されている場合は、Docker 認証情報をプレーンテキストで直接 Amazon ECS コンテナエージェントに渡しています。続行するには、認証情報をプレーンテキストで設定するのセクションにある手順に従います。

変数が dockercfg に設定されている場合は、Docker ログインコマンドが生成した Docker 生成の認証値によって Docker の認証情報を渡しています。続行するには、新しい Docker 認証値を取得するにある手順に従います。

プレーンテキストで認証情報を設定する

1.    ECS_ENGINE_AUTH_DATA 変数を更新するには、次のコマンドを実行します。

$ sudo vi /etc/ecs/ecs.config

2.    vi エディターで、テキスト内の ECS_ENGINE_AUTH_DATA に対応する Docker ユーザー名、パスワード、E メールアドレスを更新します。以下はその例です。

ECS_CLUSTER=TestECSCluster
ECS_ENGINE_AUTH_TYPE=docker
ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"username":"user","password":"Password","email":"awsSampleEmail@amazon.com"}}

続行するには、ECS コンテナエージェントを再起動するのセクションの手順に従います。

新しい Docker 認証値を入手する

1.    Docker にローカルでログインするには、次のコマンドを実行してから新しい認証情報を入力します。

$ docker login

2.    config.json ファイルを連結するには、次のコマンドを実行してから Docker が生成した認証キー値をコピーします。

$ cat ~/.docker/config.json

3.    ECS_ENGINE_AUTH_DATA 変数を更新するには、次のコマンドを実行します。

$ sudo vi /etc/ecs/ecs.config

4.    vi エディターで、ECS_ENGINE_AUTH_DATA 変数の値を手順 2 の Docker が認証したキー値に更新します。以下はその例です。

ECS_CLUSTER=TestECSCluster
ECS_ENGINE_AUTH_TYPE=dockercfg
ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"auth","a2vpdGhhd3M6UGFzc3dvcmQ="}}

続行するには、ECS コンテナエージェントを再起動するのセクションの手順に従います。

ECS コンテナエージェントを再起動する

1.    Amazon ECS コンテナエージェントを再起動するには、コンテナインスタンスが実行中の Amazon Machine Images (AMI) に基づいて、次のいずれかのコマンドを実行します。

Amazon Linux ECS に最適化されたAMI:

$ sudo stop ecs && sudo start ecs

Amazon Linux 2 ECS に最適化された AMI:

$ sudo systemctl restart ecs

注意: ECS クラスター内の他のコンテナインスタンスにある /etc/ecs/ecs.config ファイルを更新するには、環境変数を使用してプライベートリポジトリの認証情報を更新するのセクションに戻ります。次に、各コンテナインスタンスの更新プロセスに従います。

続行するには、更新されたプライベートリポジトリ認証情報をテストするのセクションの手順に従います。

AWS Secrets Manager でプライベートリポジトリの認証情報を更新する

1.    Secrets Manager コンソールを開きます。

2.    シークレットを選択してから、[Retrieve secret value★] を選択します。

3.    [Edit★] を選択します。

4.    プライベートレジストリ用に保存されている認証情報を更新し、[Save★] を選択します。

続行するには、更新されたプライベートリポジトリ認証情報をテストするのセクションの手順に従います。

更新したプライベートリポジトリの認証情報をテストする

次の手順では、クラスター全体に更新した画像をデプロイしていると仮定しています。

1.    Amazon ECS コンソールを開きます。

2.    ナビゲーションペインで [Clusters★] を選択してから、クラスターを選択します。

3.    サービスを選択してから [Update★] を選択します。

4.    [Force new deployment★] チェックボックスをオンにします。

5.    [Minimum healthy percent★] に 50 と入力します。

6.    セットアップウィザードの残りの手順を完了してから、[Update Service★] を選択します。

7.    [View Service★] を選択します。

8.    [Deployments★] タブで新しいデプロイを表示します。Amazon ECS は以前のデプロイの下でタスクを徐々に停止してから、新しい画像の取得を試みながら新しいデプロイの下でタスクを再開します。

注: 手順 8 では、クラスターにローリングアップデートデプロイタイプを正常に実行するための十分なリソースがあることを前提としています

9.    [Tasks★] タブを選択し、個々のタスクとそのステータスを確認します。

タスクのステータスが [Running] (実行中) に設定されている場合、サービスはエラーなしでこのタスクを正常に更新しました。

タスクのステータスが [Running (CannotPullContainerError)] (実行中) に設定されている場合、サービスはこのタスクを更新しましたがエラーが発生しました。Amazon ECS コンテナエージェントは新しいコンテナイメージを取得できず、古いキャッシュイメージを使用しています。認証情報が更新されていることを確認し、別のサービスのデプロイ更新を実行します。

注意: タスクの詳細をすべて表示し「プルアクセスが拒否されました」というエラーを表示するには、個々のタスクのステータスに対応するドロップダウンの矢印を選択します。以下はその例です。

CannotPullContainerError: Error response from daemon: pull access denied for user/reponame, repository does not exist or may require 'docker login'

この記事はお役に立ちましたか?


請求に関するサポートまたは技術的なサポートが必要ですか?