CodeBuildでのDockerHubのダウンロードレート制限によるエラー（DockerHub pull rate limit error）を楽に解決する!?（Amazon ECR Public）

re:Invent2020で`Amazon ECR Public`が発表されました。
[Amazon ECR Public および Amazon ECR Public Gallery を発表](https://aws.amazon.com/jp/about-aws/whats-new/2020/12/announcing-amazon-ecr-public-and-amazon-ecr-public-gallery/?sc_channel=em&sc_campaign=GLOBAL_CT_WS_global-snapshot-newsletter_20201210_&sc_medium=em_321333&sc_content=PA_nl_la&sc_geo=mult&sc_country=global&sc_outcome=pa&trk=em_321333&mkt_tok=eyJpIjoiTm1NeU5XSTNNV0kxWmpRNSIsInQiOiIzMDFBRm1WcEtzQndENThaZTdxbjFGYlZYYXRWQytydWx3bHpEZmZTMEgrQVlLNWJuRTJ0eHNxeVlpcTZPMWdaMDh6QlBjdEs4STh6akRQc3VldjlrQUpaXC80QVF0blMwV0FHdE5LMVdZejVFSHdJMGhvd3UycmtYQ2pMVGJJdGhQWnkzekluSk9jMHllZGVha3VjVVZ3PT0ifQ%3D%3D)

自分の周りでもCodeBuildが最近落ちまくっており、DockerHubへログインすれば大丈夫との噂を聞いていたのですが、IPガチャを何回も回すことで回避？していました。そろそろ修正しなきゃなと思っていたところ、上記リリースでこの問題を容易に回避することができそうなので、早速修正していきます。

# （参考）最近のCodeBuildとの戦い...

複数回連続で落ちることもザラ

![スクリーンショット 2020-12-14 23.23.55.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73176/874567b5-3870-732f-9b1f-787fa32cea74.jpeg)

# 修正の前提

* Amazon ECR Public Galleryに公式イメージが存在すること(nginxとかです)

まだpythonとかは用意されていなさそうです（2020/12/14時点）。

# `Amazon ECR Public Gallery`で公式イメージを探す

いた!

![スクリーンショット 2020-12-14 23.18.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73176/143dcd9a-74e4-c712-1811-6f88af1c4188.png)

![スクリーンショット 2020-12-14 23.20.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73176/7fc1f96e-bf7f-8f96-9c1a-ad074799ba36.png)

DockerHubとバージョンも同じ
→同一のレポジトリ（GitHubのDockerFile）がリンクされていました。

![スクリーンショット 2020-12-14 23.21.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73176/00354e9e-473e-fc3f-5d30-3c250a9718a5.png)

# 早速修正

## Before

```docker:Dockerfile
FROM nginx:alpine
```

```bash:/codebuild/log
[Container] 2020/11/25 11:24:30 Running command docker build -t $REPOSITORY_URI:$IMAGE_TAG docker/
Sending build context to Docker daemon  14.69MB

Step 1/8 : FROM nginx:alpine
toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit
```

## After

```docker:Dockerfile
FROM public.ecr.aws/nginx/nginx:alpine
```

* log

```bash:/codebuild/log
[Container] 2020/12/14 02:09:54 Running command docker build -t $REPOSITORY_URI:$IMAGE_TAG docker/
Sending build context to Docker daemon   14.7MB

Step 1/8 : FROM public.ecr.aws/nginx/nginx:alpine # <---------- ECR Public経由
alpine: Pulling from nginx/nginx
```

これで当分buildが安定しそうです。

# 参考リンク

 - [Amazon ECR Public および Amazon ECR Public Gallery を発表](https://aws.amazon.com/jp/about-aws/whats-new/2020/12/announcing-amazon-ecr-public-and-amazon-ecr-public-gallery/?sc_channel=em&sc_campaign=GLOBAL_CT_WS_global-snapshot-newsletter_20201210_&sc_medium=em_321333&sc_content=PA_nl_la&sc_geo=mult&sc_country=global&sc_outcome=pa&trk=em_321333&mkt_tok=eyJpIjoiTm1NeU5XSTNNV0kxWmpRNSIsInQiOiIzMDFBRm1WcEtzQndENThaZTdxbjFGYlZYYXRWQytydWx3bHpEZmZTMEgrQVlLNWJuRTJ0eHNxeVlpcTZPMWdaMDh6QlBjdEs4STh6akRQc3VldjlrQUpaXC80QVF0blMwV0FHdE5LMVdZejVFSHdJMGhvd3UycmtYQ2pMVGJJdGhQWnkzekluSk9jMHllZGVha3VjVVZ3PT0ifQ%3D%3D) 
 - [ECRをパブリックレジストリとして利用可能になりました！ #reinvent](https://dev.classmethod.jp/articles/ecr-public-registry/)