スキップしてコンテンツを表示

デプロイ時に Amazon ECS が最新のコンテナインスタンスのイメージダイジェストを使用するようにする方法を教えてください。

所要時間1分
0

Amazon Elastic Container Service (Amazon ECS) サービスを更新して、最新のイメージでタスクを実行しましたが、一部のタスクは新しいイメージを使用しません。Amazon ECS タスクが失敗し、CannotPullContainerError というエラーが発生する場合もあります。

簡単な説明

Amazon ECS でイメージを更新すると、次のエラーメッセージが表示される場合があります。

CannotPullContainerError: イメージ取得マニフェストを 1 回再試行しました: 次の参照を解決できませんでした。ref account-id.dkr.ecr.us-east-1.amazonaws.com/test:latest@sha256:1ed47f24455xxxxxxxxx677: account-id.dkr.ecr.us-east-1.amazonaws.com/test:latest@sha256:1ed47f24455xxxxxxxxx677: not found

イメージの更新時には、サービスも更新する必要があります。デフォルトでは、Amazon ECS はタスク定義で指定されたコンテナイメージタグをコンテナイメージダイジェストに解決します。

単一のタスクを実行して管理するサービスでは、Amazon ECS はそのタスクを使用してタスクコンテナのイメージダイジェストを確立します。複数のタスクを実行して管理するサービスでは、Amazon ECS はデプロイ中にサービススケジューラーが開始した最初のタスクを使用します。タスク定義のイメージタグを更新するときにイメージダイジェストを更新するには、サービスを更新し、[新しいデプロイの強制] 設定を使用します。

イメージの動作に関する詳細については、「コンテナイメージの解決」を参照してください。

解決策

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

サービスで最新のイメージを使用する

サービスで最新のイメージを使用するには、Amazon ECS サービスを更新してから、[新しいデプロイの強制] オプションを使用します。または、次の AWS CLI コマンド update-service を実行します。

aws ecs update-service --cluster clustername --service servicename --force-new-deployment

注: お使いのものでそれぞれ、clustername をクラスター名に、servicename をサービス名に置き換えます。

特定のイメージダイジェストを使用するには、タスク定義を更新してから、[イメージ URI] セクションを変更します。

imageUri@imagedigest

"image": "accountid.dkr.ecr.region-name.amazonaws.com/image:latest@sha256:da04638bxxxxxxxxxx,"

「イメージダイジェストがありません」というエラーを解決する

イメージダイジェストがありませんというエラーが表示された場合は、イメージが削除済みかどうかを確認します。

イメージダイジェストが Amazon Elastic Container Registry (Amazon ECR) リポジトリ内にあるかどうかを確認するには、describe-images コマンドを実行します。

aws ecr describe-images --repository-name repositoryname --region regionname --query 'sort_by(imageDetails,& imagePushedAt)[*]'

注: お使いのものでそれぞれ、repositoryname をリポジトリ名に、regionname AWS リージョンに置き換えます。

コマンドの出力には、リポジトリ内のすべてのイメージが表示されます。イメージダイジェストが存在しない場合は、AWS CloudTrail イベント履歴を参照し、BatchDeleteImage でイメージが削除された原因を判断します。Amazon ECR ライフサイクルポリシーにより、実行中のタスクが使用するイメージが削除される可能性があるかどうかを判断するには、CloudTrail で PolicyExecutionEvent API コールを確認します。

コンテナイメージタグが変更されないようにするには、タグの不変性機能を有効にすることがベストプラクティスです。

注: CODE_DEPLOY または EXTERNAL デプロイコントローラーを使用するサービスでは、コンテナイメージタグは解決されません。

イメージダイジェストを更新するには、「サービスで最新のイメージを使用する」セクションの手順を実行します。

バージョンの一貫性を無効にする

一貫的なイメージではなく、LATEST などの変更可能なコンテナイメージタグを使用する必要がある場合があります。設定を構成するには、コンテナ定義を更新し、versionConsistencydisabled に設定します。デフォルトでは、versionConsistencyenabled に設定されています。値を disabled に変更すると、Amazon ECS はコンテナイメージタグをダイジェストに変換せず、コンテナ定義の元のイメージ URI を使用してデプロイします。

関連情報

Amazon ECS サービス用のソフトウェアバージョンの一貫性に関する発表

AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ