はじめに
こんにちは。 KDDIアジャイル開発センターの小板橋です。 この記事は、KDDI Engineer&Designer Advent Calendar 2021の2日目の記事となります。
先日、Amazon ECRでpull-through-cache機能が発表されました。
今回は、その機能を実際に試してみるのと、何が嬉しいのかについてまとめていこうと思います。
pull-through-cache機能とは
一言で言うならば、ユーザーのECR(Private Registry)を通して外部のパブリックイメージを透過的にpullできるようになったというものです。
これにより・・・
1 : パブリックイメージのpullにPrivateLinkを使うことができるようになります。
2 : Docker HubやECR(Public Repository)の「Pull Rate Limit」、すなわちスロットリング回避もできます。
図解すると以下のようになります。
-
pull-through-cacheでは、Amazon ECR PublicおよびQuayのpull-through-cacheルールの作成をサポートしています。
-
外部public registryのpull-through-cacheが作成されたら、Amazon ECR private registry URIを使用して外部public registryからイメージをプルするだけで、Amazon ECRがリポジトリを作成し、そのイメージをキャッシュします。
-
また、もう一点便利な機能としては、24時間毎にpublic registryで公式のimageが更新されていないかチェックし、更新されていた時は自動でAmazon ECR private registryのイメージも更新してくれます。
-
そうして、ここでもう一つアップデートがあります。
-
pull-through-cacheでは、Amazon ECR PublicおよびQuayのみをサポートすることになっていますが、実は同じタイミングでDocker Hub の Docker 公式イメージが ECR Public から pull できるようになりました!
今までは・・?
外部public registryのimage pullを直接させたくない場合や、Docker HubやECR(Public Repository)の「Pull Rate Limit」、すなわちスロットリング回避するには、下のような構成で、ユーザが定期的にAmazon ECR private registryに手動で更新する運用にならざるしかなかったのではないでしょうか。
pull-through-cacheの制約
-
pull-through-cacheルールの作成は、次のリージョンではサポートされていない
中国(北京)(cn-north-1)
中国(寧夏)(cn-northwest-1)
AWS GovCloud(米国-東部)(us-gov-east-1)
AWS GovCloud(US-West)(us-gov-west-1) -
Amazon ECR private registryには、最大10個のpull-through-cacheルールの作成しかできない。
-
Amazon ECRは外部リポジトリを24時間に1回までしかチェックしない
実際に試してみた
プルスルーキャッシュ設定
pull-through-cacheから、ルールの作成を選択する。
プルスルーキャッシュルールを作成
ソースより、パブリックレジストリを今回は、「ECR Public」を選択しました。
プルスルーキャッシュ設定の確認
設定が完了すると以下のように表示されます。
これで、設定はできたのであとはプライベートリポジトリからのイメージPullを試してみます。
ちなみに、検証時はプライベートリポジトリには何もないことを確認しています。
なので、imageをPullした際に、「ECR Public」よりimageをpullされ、Amazon ECRがリポジトリを作成し、そのイメージをキャッシュするはずです。
プライベートレジストリへdocker loginする
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin xxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/ecr-public
試しにプライベートレジストリからAWS for Fluent Bit イメージをpullしてみる
docker image pull xxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/ecr-public/aws-observability/aws-for-fluent-bit:latest
latest: Pulling from ecr-public/aws-observability/aws-for-fluent-bit
e11e8d46e102: Pull complete
78ae343d6dcf: Pull complete
f5152049901d: Pull complete
757a28787cbb: Pull complete
38488c29e0d3: Pull complete
fd5c8838b80c: Pull complete
2010684db286: Pull complete
d52f3ff92019: Pull complete
8057cbc0f33a: Pull complete
99ad7aff5b44: Pull complete
e4759977e091: Pull complete
a87998555db4: Pull complete
9ae4d994bf55: Pull complete
dbcbcb0cdb88: Pull complete
1ac29bff7532: Pull complete
22646ab5a77d: Pull complete
a7320d535531: Pull complete
Digest: sha256:c3cf6719f9aad2e2581f0bf1f2ed69d57f25c32d227e0a66fa769271668aea60
Status: Downloaded newer image for xxxxxx.dkr.ecr.us-east-1.amazonaws.com/ecr-public/aws-observability/aws-for-fluent-bit:latest
xxxxx.dkr.ecr.us-east-1.amazonaws.com/ecr-public/aws-observability/aws-for-fluent-bit:latest
プライベートリポジトリの状態を確認
確認してみると、リポジトリecr-public/aws-observability/aws-for-fluent-bitが登録されていますね。
また、プルスルーキャッシュの項目が「アクティブ」になっていると、24時間毎のチェックが行われるようです。
参考文献