Amazon ECR Pull Through CacheでDocker Hub/Azure Container Registry/GitHub Container Registryがサポートされました

2023.11.20

こんにちは。CX事業本部Delivery部のakkyです。

Amazon ECRには、パブリックなコンテナレジストリのプロキシ・キャッシュをしてくれるプルスルーキャッシュという機能がありますが、今までは上流リポジトリとしてAmazon ECR Public、Quay、Kubernetesのみがサポートされていましたが、11月17日に対象が拡大され、Docker Hub、Azure Container Registry、GitHub Container Registryがサポートされました!

今回はこのうち、Github Container Registryで動作を確認してみましたのでご紹介します。

Pull Through Cacheの設定

マネジメントコンソールからAmazon Elastic Container Registryを開き、Private registry→Pull through cacheを開きます。「ルールを追加」をクリックすると、以下の画面が開きます。

たしかに画面が新しくなって、対象サービスが増えていますね!

Github Container Registryを選択して次をクリックすると、認証キーを設定する画面となります。

キーはSecrets Managerで管理されます。

シークレットネームは任意(今回はghcr-io)とし、ユーザー名にはGithubのユーザー名、アクセストークンにはpersonal access token (classic)を入力します。

認証キーについては、Githubのドキュメントをご覧ください。

今回はread:packages権限のみ付けたキーを作成し、設定しました。

最後に、リポジトリの名前空間を指定します。

設定の確認を行えば、プルスルーキャッシュが使用できるようになります。

Pullしてみる

今回はDocker CLIがインストールされているLinux(WSL2)でコンテナをプルできるか実験してみました。

「プルコマンドを表示」で指定されてるコマンドを参考に、まず認証情報を設定します。(AWS CLIのインストールと認証情報の設定を済ませておく必要があります)

aws ecr get-login-password --region ap-northeast-1 | sudo docker login --username AWS --password-stdin XXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com

次にコンテナをPullしてみます。今回は、Github自身が提供しているsuper-linterのコンテナを使ってみましょう。

コンテナはghcr.io/github/super-linter:latestですので、ghcr.ioの部分をECRレジストリ名+プルスルーキャッシュ名前空間のXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/github/に置き換え、以下のように指定します。(今回はgithubが名前空間なので分かりづらいですが、前のgithubはプルスルーキャッシュの名前空間、後ろがコンテナの名前です。)

sudo docker pull XXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/github/github/super-linter:latest

このコマンドでコンテナをプルできました。また、ECRにもキャッシュされていることが確認できました!

以上