PowerShellを活用してAWS ECRのローカルキャッシュを自動的にクリアし、最新のコンテナイメージを確実に取得する方法について解説します。
AWS Elastic Container Registry(ECR)は、コンテナイメージを保存・管理できるAWSのサービスです。ローカル環境でECRのイメージを頻繁に利用する場合、Dockerは既存のイメージをキャッシュし、無駄なネットワークトラフィックを抑えることができます。しかし、このキャッシュが原因で古いイメージが使われてしまうことがあり、開発や運用において問題が生じることがあります。
この問題を防ぐためには、定期的にローカルキャッシュをクリアし、最新のイメージを取得する必要があります。本記事では、PowerShellを使用してECRのローカルキャッシュを効率的に管理する方法について、次のポイントを中心に解説します。
- ECRの仕組みとローカルキャッシュの役割
- ローカルキャッシュをクリアすべき理由
- PowerShellを用いたキャッシュ管理の実装
- タスクスケジューラを活用した自動化
- トラブルシューティングとベストプラクティス
これにより、ECRのイメージ整合性を維持し、常に最新の環境で開発・運用を行うことが可能になります。それでは、AWS ECRの基本とローカルキャッシュの役割について詳しく見ていきましょう。
AWS ECRの基本とローカルキャッシュの役割
AWS ECRとは?
AWS Elastic Container Registry(ECR)は、AWSが提供するコンテナイメージのホスティングサービスです。Docker Hubと同様に、コンテナイメージをプッシュ(アップロード)し、必要に応じてプル(ダウンロード)することで、開発・運用環境に適したコンテナ管理が可能になります。ECRは、AWS Identity and Access Management(IAM)と統合されており、アクセス制御を細かく管理できるのが特徴です。
ECRの主な機能は以下のとおりです。
- プライベートおよびパブリックリポジトリ:自社専用のリポジトリを作成可能
- イメージのバージョン管理:タグを利用してバージョン管理が容易
- ライフサイクルポリシー:古いイメージの自動削除機能
- AWS CLIやSDKによる操作:スクリプトやCI/CDパイプラインと連携可能
ローカルキャッシュの役割とは?
Dockerは、パフォーマンス向上のために取得したコンテナイメージをローカル環境にキャッシュします。これにより、次回の起動時に同じイメージを取得する場合、ネットワーク通信を行わずにキャッシュから直接利用することができます。
ローカルキャッシュの利点:
- ネットワークトラフィックの削減:ECRからイメージを毎回取得する必要がない
- ビルド時間の短縮:キャッシュを利用することで、起動やビルドが高速化される
- コスト削減:ECRからのデータ転送料金を最小限に抑えられる
ローカルキャッシュの問題点
一方で、ローカルキャッシュを保持し続けると以下の問題が発生する可能性があります。
- 古いイメージが使用される:最新のイメージがECRにプッシュされても、キャッシュが優先されるため、意図せず古いバージョンが使われることがある。
- ディスクスペースの消費:ローカルに大量のイメージが蓄積すると、ディスク容量を圧迫する。
- 整合性の問題:本番環境と開発環境で異なるイメージが動作する可能性がある。
これらの問題を解決するためには、ローカルキャッシュを定期的にクリアし、最新のイメージを確実に取得する仕組みが必要になります。次の章では、ローカルキャッシュをクリアする必要性について詳しく説明します。
なぜローカルキャッシュをクリアする必要があるのか?
ローカルキャッシュによる問題点
Dockerのローカルキャッシュは、開発や運用の効率を向上させる一方で、適切に管理しないと以下のような問題が発生します。
1. 古いイメージが使用されるリスク
Dockerは、docker pull
を実行しない限り、ローカルにキャッシュされたイメージを優先的に使用します。そのため、開発環境やCI/CDパイプラインで常に最新のECRイメージを利用するつもりでも、意図せず古いバージョンのイメージが使用されてしまうことがあります。
例:
docker run my-ecr-repo:latest
上記のコマンドは、ECRにある latest
タグのイメージを取得するのではなく、ローカルキャッシュ内の latest
イメージを実行する可能性があります。これにより、ECRの最新イメージを想定していたのに、実際には古いバージョンが動作してしまうケースが発生します。
2. イメージの整合性が損なわれる
開発環境、ステージング環境、本番環境のすべてで最新のイメージを適用しなければ、環境ごとに動作が異なる問題が発生します。特に、マイクロサービスアーキテクチャでは、サービス間の整合性が重要であり、異なるバージョンのイメージが使われると、予期せぬバグが発生する可能性があります。
例:
- 開発環境では
my-app:latest
の新しい機能が動作する - 本番環境では古い
my-app:latest
がキャッシュされており、新機能が反映されない
このような状況を防ぐためには、ローカルキャッシュをクリアして最新のイメージを常に取得する必要があります。
3. ディスクスペースの消費
ローカル環境で多数のイメージを利用している場合、キャッシュされたイメージが蓄積し、ディスクスペースを圧迫することがあります。特に、ECRのプライベートリポジトリを利用している場合、頻繁なデプロイが発生すると、不要なイメージが大量に残る可能性があります。
確認方法:
docker images
このコマンドで不要なキャッシュが大量に溜まっていないかを確認できます。
ディスク使用量の確認:
docker system df
このコマンドでDockerが使用しているストレージ容量をチェックできます。大量のキャッシュが残っている場合は、適宜削除する必要があります。
4. セキュリティリスク
最新のイメージを取得せずに古いイメージを使い続けると、既知の脆弱性が修正されないまま運用されるリスクが高まります。特に、サードパーティのベースイメージを使用している場合、定期的にアップデートを適用することが推奨されます。
例:
- 古いOSベースのイメージに脆弱性が発見された
- ECRにパッチ適用済みの新しいイメージをプッシュした
- ローカルキャッシュがクリアされないと、修正前の脆弱なイメージが使われ続ける
ローカルキャッシュのクリアが必要な場面
以下のような場面では、ローカルキャッシュをクリアし、最新のイメージを取得することが推奨されます。
状況 | キャッシュクリアが必要か? |
---|---|
新しいバージョンのデプロイ後 | 必須 |
本番環境と開発環境で動作が異なる場合 | 推奨 |
ディスクスペースが圧迫されている場合 | 必須 |
セキュリティアップデート適用後 | 必須 |
まとめ
ローカルキャッシュのクリアは、以下の理由で重要です。
- 常に最新のイメージを取得し、古いバージョンの誤使用を防ぐ
- 環境間のイメージの整合性を保ち、一貫した動作を確保する
- 不要なキャッシュの蓄積を防ぎ、ディスクスペースを有効活用する
- 脆弱性対策として、最新のセキュリティアップデートを適用する
次の章では、PowerShellを使用してECRのイメージ管理を行う基本的な方法を解説します。
PowerShellを使ったECRイメージ管理の概要
PowerShellを利用するメリット
PowerShellはWindows環境で標準的に利用できるスクリプト言語であり、AWS CLIと組み合わせることで、AWS Elastic Container Registry(ECR)の管理を自動化できます。PowerShellを活用することで、以下のような利点があります。
- シンプルなコマンドでAWSリソースを管理
- スクリプト化による運用の自動化が可能
- Windowsタスクスケジューラと連携して定期実行が容易
- PowerShellのオブジェクト指向処理によるデータ操作が柔軟
AWS CLIとの連携
AWS CLIは、AWSの各種サービスをコマンドラインから操作するためのツールです。PowerShellからAWS CLIを呼び出すことで、AWSリソースを簡単に管理できます。ECRのイメージ管理を行う場合、以下のAWS CLIコマンドが主に使用されます。
操作 | AWS CLI コマンド |
---|---|
認証(ログイン) | aws ecr get-login-password |
イメージの一覧表示 | aws ecr list-images |
イメージの取得(pull) | docker pull <イメージURL> |
イメージの削除 | aws ecr batch-delete-image |
PowerShellスクリプト内でこれらのコマンドを組み合わせることで、ECRのキャッシュ管理を効率的に行うことが可能です。
基本的なECR操作コマンド
1. AWS ECR へのログイン
ECRにアクセスするには、事前にAWSにログインし、認証トークンを取得する必要があります。PowerShellを使ってログインするには、以下のコマンドを実行します。
$awsRegion = "us-east-1" # 使用するAWSリージョンを指定
$accountId = (aws sts get-caller-identity --query Account --output text)
# 認証トークンを取得してDockerにログイン
aws ecr get-login-password --region $awsRegion | docker login --username AWS --password-stdin "$accountId.dkr.ecr.$awsRegion.amazonaws.com"
このコマンドを実行すると、ECRへの認証が完了し、イメージの取得や削除が可能になります。
2. ECRのイメージ一覧を取得
リポジトリ内のイメージ一覧を取得するには、以下のコマンドを使用します。
$repositoryName = "my-ecr-repository"
aws ecr list-images --repository-name $repositoryName --query 'imageIds[*].imageTag' --output table
このコマンドを実行すると、指定したリポジトリ内に格納されているイメージタグの一覧が表示されます。
3. 特定のECRイメージを取得(Pull)
最新のイメージを取得する場合、以下のコマンドを使用します。
$repositoryName = "my-ecr-repository"
$latestImageTag = "latest"
$ecrUrl = "$accountId.dkr.ecr.$awsRegion.amazonaws.com/$repositoryName:$latestImageTag"
# イメージを取得
docker pull $ecrUrl
このスクリプトを実行すると、最新のイメージをECRから取得できます。
4. ローカルキャッシュをクリア(イメージ削除)
ローカルにキャッシュされたイメージを削除するには、以下のコマンドを使用します。
docker rmi -f $ecrUrl
これにより、ローカル環境から指定したECRのイメージを削除できます。
まとめ
PowerShellとAWS CLIを組み合わせることで、ECRのイメージ管理を簡単に自動化できます。具体的には、以下の操作をPowerShellスクリプトで実行できます。
- AWS CLIを使用してECRにログイン
- ECR内のイメージ一覧を取得
- 最新のイメージをプル(取得)する
- ローカルキャッシュを削除して最新のイメージを確保
次の章では、AWS CLIとPowerShellのセットアップ方法について詳しく説明します。
AWS CLIとPowerShellのセットアップ方法
PowerShellを使用してAWS Elastic Container Registry(ECR)を管理するためには、事前にAWS CLIのセットアップと認証の設定が必要です。本章では、AWS CLIのインストール方法、PowerShellの環境設定、認証のセットアップ手順について詳しく解説します。
1. AWS CLIのインストール
AWS CLI(コマンドラインインターフェース)は、AWSの各種サービスをPowerShellやターミナルから操作するためのツールです。AWS CLIをインストールすることで、ECRのイメージ管理をスクリプト化することが可能になります。
Windows環境でのAWS CLIインストール
- AWS CLIの公式サイト から Windows用インストーラー をダウンロードします。
- インストーラーを実行し、指示に従ってインストールを完了します。
- インストール完了後、以下のコマンドをPowerShellで実行し、正しくインストールされたことを確認します。
aws --version
出力例:
aws-cli/2.x.x Python/3.x.x Windows/x86_64
もしエラーが出る場合は、インストールが正しく完了しているか確認してください。
2. AWS CLIの認証情報を設定
AWS CLIを使用するためには、AWSの認証情報(アクセスキーとシークレットキー)が必要です。認証情報を設定することで、AWS CLIからECRへアクセスできるようになります。
アクセスキーとシークレットキーの取得
AWSのコンソールにログインし、以下の手順でアクセスキーを取得します。
- AWSマネジメントコンソールを開く
- 画面右上の 「IAM」 をクリック
- 「ユーザー」 から、自分のIAMユーザーを選択
- 「セキュリティ認証情報」 タブを開く
- 「アクセスキーの作成」 をクリックし、新しいキーを発行
発行された アクセスキーID と シークレットアクセスキー をメモしておきます(再取得できないため)。
PowerShellでAWS CLIの認証情報を設定
以下のコマンドを実行し、取得したアクセスキーとシークレットキーを入力します。
aws configure
プロンプトが表示されるので、取得した認証情報を入力します。
AWS Access Key ID [None]: <取得したアクセスキー>
AWS Secret Access Key [None]: <取得したシークレットキー>
Default region name [None]: us-east-1 # 任意のリージョン(例: 東京なら ap-northeast-1)
Default output format [None]: json # デフォルトはjson
認証情報の確認
以下のコマンドを実行し、設定した認証情報が正しく適用されているか確認します。
aws sts get-caller-identity
出力例:
{
"UserId": "AIDXXXXXXXXXXXXXXX",
"Account": "123456789012",
"Arn": "arn:aws:iam::123456789012:user/my-user"
}
このような結果が表示されれば、AWS CLIの認証設定が正常に完了しています。
3. Dockerのインストールと設定
AWS ECRのイメージを管理するには、Dockerのインストールも必要です。Dockerが未インストールの場合、以下の手順でセットアップします。
Windows環境でのDockerインストール
- Docker Desktopの公式サイト から Windows用Docker をダウンロード
- インストーラーを実行し、指示に従ってインストール
- インストール完了後、PowerShellで以下のコマンドを実行し、Dockerが正しく動作しているか確認
docker --version
出力例:
Docker version 20.x.x, build xxxxx
Dockerが正しく動作していない場合は、管理者権限でPowerShellを開き、以下のコマンドでサービスを再起動してください。
Restart-Service docker
4. PowerShellからAWS ECRにログイン
AWS CLIとDockerのセットアップが完了したら、AWS ECRへログインします。以下のコマンドをPowerShellで実行してください。
$awsRegion = "us-east-1" # 使用するリージョン
$accountId = (aws sts get-caller-identity --query Account --output text)
# 認証トークンを取得し、Dockerにログイン
aws ecr get-login-password --region $awsRegion | docker login --username AWS --password-stdin "$accountId.dkr.ecr.$awsRegion.amazonaws.com"
成功時の出力例:
Login Succeeded
このメッセージが表示されれば、AWS ECRへのログインが成功し、イメージをプル/プッシュできる状態になります。
まとめ
AWS CLIとPowerShellを組み合わせることで、ECRの管理をスクリプト化し、自動化することが可能になります。本章では、以下の手順を解説しました。
- AWS CLIのインストールと確認
- AWS CLIの認証情報を設定(アクセスキーの登録)
- Dockerのインストールと動作確認
- PowerShellを使ったECRログイン
次の章では、PowerShellを使ってECRのローカルキャッシュを確認する方法について解説します。
PowerShellでECRのローカルキャッシュを確認する方法
AWS Elastic Container Registry(ECR)を利用する際、ローカル環境には過去に取得したコンテナイメージのキャッシュが保存されます。これにより、再取得の時間を短縮できますが、古いイメージを使用してしまうリスクもあります。
本章では、PowerShellを使用してローカルキャッシュの状態を確認する方法を解説します。
1. ローカルにキャッシュされたDockerイメージの一覧を取得
ローカル環境に保存されているDockerイメージの一覧を確認するには、以下のPowerShellコマンドを実行します。
docker images
出力例:
REPOSITORY TAG IMAGE ID CREATED SIZE
123456789012.dkr.ecr.us-east-1.amazonaws.com/my-ecr-repo latest a1b2c3d4e5f6 2 days ago 300MB
ubuntu 20.04 d1e2f3g4h5i6 1 week ago 100MB
nginx latest a2b3c4d5e6f7 3 weeks ago 50MB
この一覧では、以下の情報を確認できます。
- REPOSITORY(リポジトリ名):ECRやDocker Hubのリポジトリ名
- TAG(タグ):イメージのバージョン
- IMAGE ID(イメージ識別子):イメージの一意な識別ID
- CREATED(作成日時):イメージが作成された日付
- SIZE(サイズ):イメージのディスク使用量
ECRのイメージを管理する場合、リポジトリ名に aws ecr
のURLが含まれているかどうかを確認すると便利です。
2. ECRリポジトリのキャッシュをフィルタリング
ローカルのDockerイメージの中から、ECRのイメージだけを抽出するには、以下のPowerShellコマンドを実行します。
docker images | Where-Object { $_.Repository -match "amazonaws.com" }
または、特定のリポジトリ名を指定してフィルタリングする場合は以下のように記述します。
$repositoryName = "123456789012.dkr.ecr.us-east-1.amazonaws.com/my-ecr-repo"
docker images | Where-Object { $_.Repository -eq $repositoryName }
出力例:
REPOSITORY TAG IMAGE ID CREATED SIZE
123456789012.dkr.ecr.us-east-1.amazonaws.com/my-ecr-repo latest a1b2c3d4e5f6 2 days ago 300MB
この方法を使うと、ECRのキャッシュイメージのみを素早く確認できます。
3. キャッシュされたイメージの詳細情報を確認
特定のイメージの詳細情報を取得する場合は、以下のコマンドを実行します。
docker inspect <IMAGE ID>
例えば、イメージIDが a1b2c3d4e5f6
の場合、以下のように実行します。
docker inspect a1b2c3d4e5f6
このコマンドを実行すると、JSON形式で詳細な情報が表示されます。
確認できる情報:
- イメージの作成日時
- ベースイメージ
- 環境変数
- ボリューム設定
- エントリーポイント(CMDコマンド)
- ネットワーク設定
4. ローカルキャッシュに同じタグの古いイメージがないか確認
同じタグ(例: latest
)のイメージが複数存在していないかを確認するには、以下のコマンドを実行します。
docker images --format "{{.Repository}}:{{.Tag}}" | Sort-Object
もし latest
などのタグが複数表示される場合、古いキャッシュが残っている可能性があります。
5. キャッシュの使用量を確認
ローカルに保存されているDockerキャッシュがどれくらいのディスク容量を使用しているかを確認するには、以下のコマンドを実行します。
docker system df
出力例:
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 15 5 2.4GB 1.2GB (50%)
Containers 5 2 1.1GB 0.5GB (45%)
Local Volumes 3 1 600MB 400MB (67%)
Build Cache 10 2 3.2GB 2.0GB (62%)
この出力を確認することで、どのくらいのストレージがキャッシュされているかを把握し、不要なデータを削除するかどうかを判断できます。
まとめ
PowerShellを使用してAWS ECRのローカルキャッシュを確認する方法を解説しました。
- ローカルに保存されているDockerイメージの一覧を取得
- ECRのイメージのみをフィルタリングして表示
- 特定のイメージの詳細情報を確認
- 同じタグの古いイメージが残っていないかチェック
- キャッシュがどれくらいのディスク容量を使用しているかを確認
次の章では、PowerShellスクリプトを活用してローカルキャッシュをクリアする具体的な方法を解説します。
PowerShellスクリプトを用いたキャッシュクリアの実装
AWS Elastic Container Registry(ECR)のローカルキャッシュを適切に管理することで、常に最新のコンテナイメージを利用できるようになります。本章では、PowerShellスクリプトを使用してECRのローカルキャッシュをクリアする具体的な方法を解説します。
1. ローカルキャッシュを削除する基本コマンド
ローカルにキャッシュされたECRイメージを削除するには、以下のコマンドを使用します。
docker rmi <IMAGE ID>
例えば、ECRのキャッシュされたイメージ a1b2c3d4e5f6
を削除するには以下のように実行します。
docker rmi a1b2c3d4e5f6
すべての未使用イメージを削除する場合
ローカルに保存されているが、現在コンテナで使用されていないイメージをすべて削除するには、以下のコマンドを実行します。
docker image prune -a -f
-a
オプションは、すべての未使用イメージを対象にすることを意味し、-f
オプションは確認プロンプトをスキップします。
2. PowerShellスクリプトでECRキャッシュを自動削除
ローカルにキャッシュされているECRのイメージのみを削除するPowerShellスクリプトを作成します。
# AWSアカウントIDとリージョンを設定
$awsRegion = "us-east-1"
$accountId = (aws sts get-caller-identity --query Account --output text)
# ECRのリポジトリを指定(必要に応じて変更)
$repositoryName = "my-ecr-repo"
# キャッシュされているECRのイメージを取得
$ecrImages = docker images | Where-Object { $_ -match "$accountId.dkr.ecr.$awsRegion.amazonaws.com" }
# 削除するイメージをリストアップ
if ($ecrImages) {
$ecrImages | ForEach-Object {
$imageId = ($_ -split "\s+")[2] # IMAGE IDを取得
Write-Host "Deleting image ID: $imageId"
docker rmi -f $imageId
}
} else {
Write-Host "No ECR images found in cache."
}
このスクリプトは以下の処理を行います。
- AWSアカウントIDとリージョンを取得
- ECRリポジトリのキャッシュされているイメージを一覧表示
- リストアップされたイメージをすべて削除
- キャッシュが存在しない場合はメッセージを表示
このスクリプトを .ps1
ファイルとして保存し、PowerShellで実行することで、自動的にECRのキャッシュを削除できます。
スクリプトの実行方法:
.\clear-ecr-cache.ps1
3. キャッシュクリア後に最新イメージを取得
キャッシュを削除した後に、最新のECRイメージを確実に取得するためのPowerShellスクリプトも用意できます。
# AWSアカウントIDとリージョンを取得
$awsRegion = "us-east-1"
$accountId = (aws sts get-caller-identity --query Account --output text)
$repositoryName = "my-ecr-repo"
$latestImageTag = "latest"
# ECRのURLを生成
$ecrUrl = "$accountId.dkr.ecr.$awsRegion.amazonaws.com/$repositoryName:$latestImageTag"
# キャッシュクリア
Write-Host "Clearing ECR cache..."
docker system prune -a -f
# 最新のイメージを取得
Write-Host "Pulling latest image from ECR..."
docker pull $ecrUrl
Write-Host "ECR image has been updated."
このスクリプトは、キャッシュを削除した後、最新のイメージを確実に取得します。
スクリプトの実行手順:
.ps1
ファイルとして保存(例:update-ecr-image.ps1
)- PowerShellで実行
.\update-ecr-image.ps1
4. 実行スケジュールを設定(自動化)
ローカルキャッシュの削除を定期的に実行するには、Windowsの タスクスケジューラ を利用します。
タスクスケジューラで自動実行する手順
- Windowsキー + R を押し、「
taskschd.msc
」と入力してタスクスケジューラを開く - 基本タスクの作成 を選択
- 名前を入力(例: “ECRキャッシュクリア”)し、「次へ」
- 実行頻度を選択(毎日、毎週、ログオン時 など)
- 「プログラムの開始」を選択
- スクリプトのパスを指定(例:
C:\Scripts\clear-ecr-cache.ps1
) - 「完了」をクリック
PowerShellスクリプトを実行するため、以下のように powershell.exe
を使用することも可能です。
powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\clear-ecr-cache.ps1"
この設定により、スクリプトが定期的に実行され、ECRのキャッシュが自動的に管理されます。
まとめ
PowerShellスクリプトを活用し、ECRのローカルキャッシュをクリアする方法を解説しました。
- 基本的なキャッシュ削除コマンド(
docker rmi
) - PowerShellスクリプトでECRのキャッシュを削除する方法
- キャッシュ削除後に最新イメージを取得する方法
- Windowsタスクスケジューラを使った自動化の手順
次の章では、タスクスケジューラを活用したキャッシュクリアの自動化について、より詳細に解説します。
自動化のためのタスクスケジューラ設定
ECRのローカルキャッシュを手動でクリアするのは効率的ではありません。PowerShellスクリプトを Windowsタスクスケジューラ に登録することで、定期的にキャッシュをクリアし、最新のECRイメージを取得する作業を自動化できます。本章では、タスクスケジューラを使用してPowerShellスクリプトを定期実行する手順を解説します。
1. タスクスケジューラを利用するメリット
タスクスケジューラを使用すると、以下のメリットがあります。
- 定期的にECRのローカルキャッシュをクリアできる(例: 毎日・毎週)
- ログオン時やシステム起動時に自動実行できる
- 手動で実行する手間が省ける
- PowerShellスクリプトの自動化が可能になる
2. PowerShellスクリプトの準備
タスクスケジューラで実行するためのPowerShellスクリプトを C:\Scripts\clear-ecr-cache.ps1
に保存します。
# AWSアカウントIDとリージョンを取得
$awsRegion = "us-east-1"
$accountId = (aws sts get-caller-identity --query Account --output text)
$repositoryName = "my-ecr-repo"
$latestImageTag = "latest"
# ECRのURLを生成
$ecrUrl = "$accountId.dkr.ecr.$awsRegion.amazonaws.com/$repositoryName:$latestImageTag"
# キャッシュクリア
Write-Host "Clearing ECR cache..."
docker system prune -a -f
# 最新のイメージを取得
Write-Host "Pulling latest image from ECR..."
docker pull $ecrUrl
Write-Host "ECR image has been updated."
このスクリプトは キャッシュを削除後に最新のECRイメージを取得 する処理を実行します。
3. タスクスケジューラの設定手順
(1) タスクスケジューラを開く
Win + R
を押し、「taskschd.msc
」と入力し、タスクスケジューラを開く- 画面右側の 「基本タスクの作成」 をクリック
(2) 基本タスクの作成
- 名前を入力(例:
ECRキャッシュクリア
) - 説明を入力(例:
定期的にECRのキャッシュを削除するタスク
) - 「次へ」 をクリック
(3) 実行スケジュールを設定
- 「毎日」「毎週」「ログオン時」などを選択
- 毎日なら 「毎日」 を選択し、時間を設定(例: 毎日 03:00 に実行)
- PC起動時に実行するなら 「ログオン時」 を選択
- 「次へ」 をクリック
(4) プログラムの開始を設定
- 「プログラムの開始」 を選択し、「次へ」
- 「プログラム/スクリプト」欄に
powershell.exe
を入力 - 「引数の追加」欄に以下を入力
-ExecutionPolicy Bypass -File "C:\Scripts\clear-ecr-cache.ps1"
- 「完了」 をクリック
4. タスクの詳細設定(オプション)
作成したタスクをより確実に動作させるため、詳細設定を行います。
(1) タスクのプロパティを変更
- タスクスケジューラのライブラリを開く
- 作成したタスク
ECRキャッシュクリア
を右クリックして 「プロパティ」 を選択
(2) ユーザー権限の設定
- 「全般」タブを開く
- 「最上位の特権で実行する」 にチェックを入れる(管理者権限で実行)
(3) エラー時の再試行設定
- 「設定」タブを開く
- 「タスクが失敗した場合、次を再試行」 を 1分後 に設定し、最大3回まで再試行するように設定
(4) タスクを手動実行してテスト
設定が完了したら、作成したタスクを右クリックし、 「実行」 を選択してテスト実行する。
成功時のログ(PowerShell)
Clearing ECR cache...
Total reclaimed space: 500MB
Pulling latest image from ECR...
latest: Pulling from my-ecr-repo
Digest: sha256:xxxxxxxxxxxxxxxxxxxxxxx
ECR image has been updated.
5. ログの確認
タスクが正常に動作しているか確認するには、ログをチェックします。
(1) タスクスケジューラの履歴を確認
- タスクスケジューラを開く
ECRキャッシュクリア
を右クリックし 「履歴を表示」 をクリック
(2) PowerShellのログを確認
エラーが発生した場合、タスクスケジューラのログにはエラーメッセージが表示されます。さらに詳細なエラーを確認するには、スクリプトの実行結果をログファイルに記録する方法もあります。
スクリプトにログ出力を追加
Start-Transcript -Path "C:\Scripts\clear-ecr-cache.log" -Append
# AWSアカウントIDとリージョンを取得
$awsRegion = "us-east-1"
$accountId = (aws sts get-caller-identity --query Account --output text)
$repositoryName = "my-ecr-repo"
$latestImageTag = "latest"
# ECRのURLを生成
$ecrUrl = "$accountId.dkr.ecr.$awsRegion.amazonaws.com/$repositoryName:$latestImageTag"
# キャッシュクリア
Write-Host "Clearing ECR cache..."
docker system prune -a -f
# 最新のイメージを取得
Write-Host "Pulling latest image from ECR..."
docker pull $ecrUrl
Write-Host "ECR image has been updated."
Stop-Transcript
実行結果をログで確認
Get-Content C:\Scripts\clear-ecr-cache.log
まとめ
PowerShellスクリプトをWindowsタスクスケジューラに登録し、自動的にECRキャッシュをクリアする手順を解説しました。
- PowerShellスクリプトを作成(ECRキャッシュクリア & 最新イメージ取得)
- Windowsタスクスケジューラにスクリプトを登録
- スケジュール実行(毎日・ログオン時・起動時)を設定
- ログ出力を有効化し、タスクの動作を確認
次の章では、トラブルシューティングと、キャッシュ管理のベストプラクティスについて解説します。
トラブルシューティングとベストプラクティス
PowerShellを活用してAWS Elastic Container Registry(ECR)のローカルキャッシュをクリアする際に、いくつかの問題が発生する可能性があります。本章では、よくあるエラーとその解決策、さらにはECRのキャッシュ管理を適切に行うためのベストプラクティスを紹介します。
1. よくあるトラブルと対処法
(1) AWS CLIの認証エラー (Unable to locate credentials
)
エラーメッセージ:
An error occurred (InvalidSignatureException) when calling the GetCallerIdentity operation: The request signature we calculated does not match the signature you provided.
原因:
- AWS CLIの認証情報が設定されていない
- 認証情報(アクセスキー / シークレットキー)が間違っている
対策:
- 認証情報を正しく設定する
aws configure
設定が完了したら、以下のコマンドで認証を確認する。
aws sts get-caller-identity
- 環境変数を設定する(スクリプト内で認証情報を明示的に指定)
$env:AWS_ACCESS_KEY_ID = "YOUR_ACCESS_KEY"
$env:AWS_SECRET_ACCESS_KEY = "YOUR_SECRET_KEY"
$env:AWS_REGION = "us-east-1"
(2) docker: command not found
エラー
エラーメッセージ:
docker : The term 'docker' is not recognized as the name of a cmdlet, function, script file, or operable program.
原因:
- Dockerがインストールされていない
- Docker Desktopが起動していない
- Dockerのパスが環境変数に登録されていない
対策:
- Dockerのインストールを確認
docker --version
正しくインストールされていない場合、Docker公式サイト からインストールする。
- Dockerを手動で起動
Start-Process "C:\Program Files\Docker\Docker\Docker Desktop.exe"
- Dockerのパスを環境変数に追加
$env:Path += ";C:\Program Files\Docker\Docker"
(3) no space left on device
エラー
エラーメッセージ:
write /var/lib/docker/tmp/GetImageBlobXXXX: no space left on device
原因:
- ローカルキャッシュが大量に溜まり、ディスク容量を圧迫
対策:
- キャッシュを強制削除
docker system prune -a -f
- ディスク使用量を確認
docker system df
- 不要なボリュームを削除
docker volume prune -f
2. ベストプラクティス
(1) 定期的なキャッシュクリアを自動化する
キャッシュを削除するタイミングを明確にし、タスクスケジューラを使用して自動化することで、手動実行の手間を省くことができます。
- 毎日実行する場合: タスクスケジューラで1日1回実行
- 開発環境のみ実行する場合: PC起動時にキャッシュを削除
(2) latest
タグを避け、バージョン管理を徹底する
latest
タグはローカルキャッシュの影響を受けやすいため、特定のバージョン番号を使用することが推奨されます。
docker pull 123456789012.dkr.ecr.us-east-1.amazonaws.com/my-ecr-repo:1.0.3
(3) CI/CDパイプラインと組み合わせる
ECRの最新イメージを自動的に取得するために、CI/CDパイプライン(GitHub Actions、AWS CodePipelineなど)と連携し、デプロイ前にキャッシュをクリアするスクリプトを実行するとよいでしょう。
GitHub Actionsでのキャッシュクリア例:
jobs:
clear-cache:
runs-on: ubuntu-latest
steps:
- name: Clear Docker cache
run: docker system prune -a -f
(4) 不要なキャッシュを蓄積しないポリシーを設定する
ローカル環境にキャッシュが増えすぎると、ディスク容量が圧迫されるため、ポリシーを設定して不要なキャッシュを自動削除するとよいでしょう。
docker system prune -a --filter "until=24h"
このコマンドは、24時間以上経過した未使用のイメージのみ削除 します。
まとめ
本章では、AWS ECRのキャッシュ管理において発生しやすい問題とその対処法、さらに効果的なキャッシュ管理のためのベストプラクティスを解説しました。
- よくあるトラブルと対策
- AWS CLIの認証エラー (
aws configure
の確認) - Dockerの認識エラー (
docker --version
の確認) - ディスク容量不足 (
docker system prune -a -f
の実行)
- ベストプラクティス
- タスクスケジューラを活用した定期実行
latest
タグを避けてバージョン管理を徹底- CI/CDパイプラインとの連携
- 古いキャッシュを自動削除するポリシーを設定
次の章では、記事全体のまとめを行い、本記事で紹介したテクニックの振り返りを行います。
まとめ
本記事では、PowerShellを活用してAWS Elastic Container Registry(ECR)のローカルキャッシュを自動クリアし、常に最新のコンテナイメージを取得する方法について解説しました。
本記事のポイント
- AWS ECRの基本とローカルキャッシュの役割
- ECRはAWSのコンテナレジストリであり、ローカル環境ではキャッシュ機能が働く。
- キャッシュは利便性がある一方、古いイメージの使用やディスク容量圧迫の原因になる。
- ローカルキャッシュをクリアすべき理由
- 最新のイメージを確実に取得し、環境の一貫性を保つため。
- ディスク容量の節約やセキュリティ強化のため。
- PowerShellを使用したECRイメージ管理の実装
- AWS CLIをセットアップし、PowerShellでECRの操作を実行する方法を解説。
docker images
でローカルキャッシュの一覧を取得し、docker rmi
で削除する方法を紹介。
- タスクスケジューラを活用した自動化
- Windowsタスクスケジューラを使用し、PowerShellスクリプトを定期実行する設定方法を説明。
- 定期的にキャッシュをクリアし、常に最新のECRイメージを取得する仕組みを作成。
- トラブルシューティングとベストプラクティス
- AWS CLIの認証エラー、Dockerの実行エラー、ディスク容量不足の解決策を解説。
latest
タグを避ける、CI/CDと統合する、ポリシーを適用して不要なキャッシュを削除するなどのベストプラクティスを紹介。
最終的な結論
PowerShellとAWS CLIを活用すれば、ECRのローカルキャッシュを簡単に管理でき、手動での更新作業を減らすことができます。タスクスケジューラと組み合わせることで、定期的にキャッシュをクリアし、ECRの最新イメージを自動的に取得する仕組みを構築 できます。これにより、環境の整合性を保ち、最新のイメージを常に利用できる状態を維持 できます。
開発や運用の効率化を目指すなら、ぜひPowerShellを活用したECRキャッシュ管理を実践してみてください!
コメント