3
3

More than 1 year has passed since last update.

[深層] AWS CodeBuildにおけるDocker Hubのレートリミット問題を解決する2つの方法

Last updated at Posted at 2023-08-01

c04.png

DockerHubのレートリミット1は、CI/CD環境で頻繁にDockerイメージを取得する必要がある場合、予期しない問題を引き起こすことがあります。イメージのビルドが失敗したり、これにより開発プロセスに遅れが生じるのは避けたいところです。

Step 1/2 : FROM php:7.4.0-apache
7.4.0-apache: Pulling from library/php
toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit

そして、ここに至って課題は二つに分かれます。一つはセキュリティ上のリスク、もう一つは管理コストです。DockerHubへの認証情報をbuildspec.ymlに記述することは、セキュリティ上好ましくありません。また、使用するイメージをECRに保存管理することは、管理コストが増えてしまいます。

これらの課題を解決するために、二つの方法を提案します。

NAT Gatewayを使用して固有のIPを付与する

まず一つ目は、NAT Gateway2を使用して固有のIPを付与することです。これにより、DockerHubからのpullリクエストが特定のIPから来るようになり、レートリミットの制約を回避できます。ただし、この方法には追加の費用が発生しますので、予算管理に注意が必要です。

ECR Publicを経由してDockerHubのイメージを取得する

二つ目の方法は、AWSが提供する新しいサービス、ECR Public3を経由してDockerHubのイメージを取得することです。具体的には、DockerHubのイメージをpublic.ecr.aws/docker/library/以下にミラーリングします。例えば、php:7.4.0-apacheのイメージはpublic.ecr.aws/docker/library/php:7.4.0-apacheとして取得できます。これにより、DockerHubへの直接のリクエストを避けることができます。

おわりに

DockerHubのレートリミットは開発の流れを妨げる可能性がありますが、上記の方法を使用することで、この問題を効率的に解決することができます。適切な手法を選択することで、安全性と効率性を確保しながら開発プロセスをスムーズに進めることが可能です。これらの提案が、あなたの開発作業をよりスムーズに、そして安全に進めるための一助となれば幸いです。

  1. DockerHubのレートリミット - 匿名ユーザーは6時間ごとに100プル、認証ユーザーは6時間ごとに200プルに制限されています。

  2. NAT Gateway - VPC内のエンドポイントからDockerHubからのpullリクエストに固有のIPを付与し、レートリミットを回避する。

  3. ECR Public - DockerHubのイメージをpublic.ecr.aws/docker/library/以下にミラーリングし、DockerHubへの直接のリクエストを避けるAWSの新サービス。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3