Amazon Elastic Container Registryでパブリックレジストリを作ってみた


本記事は個人の意見であり、所属する組織の見解とは関係ありません。
こちらはAWS Containers Advent Calendar 2020の3日目の記事です。

re:Invent 2020が開催しましたね！Andy JassyのKeynoteでもコンテナ関連のサービスのアップデートが複数発表されています。みなさんは、どのアップデートが気になりましたか？

* [Amazon Elastic Container Registry (ECR)でパブリックレジストリが提供可能に](https://aws.amazon.com/jp/blogs/aws/amazon-ecr-public-a-new-public-container-registry/)
* [Amazon EKS Console Update] (https://aws.amazon.com/jp/about-aws/whats-new/2020/12/amazon-eks-console-now-includes-kubernetes-resources-to-simplify-cluster-management/)
* [Amazon EKS マネージドノードグループがEC2 Spotインスタンスの利用をサポート](https://aws.amazon.com/jp/about-aws/whats-new/2020/12/amazon-eks-support-ec2-spot-instances-managed-node-groups/)
* [Amazon EKS with AWS Fargateでマネージドな アプリケーションログ転送をサポート](https://aws.amazon.com/jp/about-aws/whats-new/2020/12/amazon-eks-adds-built-in-logging-support-for-aws-fargate/)
* [Amazon EKSで Kubernetes operational software (add-ons)をAmazon EKS consoleから管理可能に](https://aws.amazon.com/jp/about-aws/whats-new/2020/12/amazon-eks-simplifies-installation-and-management-for-kubernetes-cluster-add-ons/)
* [Amazon ECS Anywhere](https://aws.amazon.com/jp/blogs/containers/introducing-amazon-ecs-anywhere/)
* [Amazon EKS Anywhere](https://aws.amazon.com/eks/eks-anywhere/)
* [Amazon EKS Distro](https://aws.amazon.com/blogs/opensource/introducing-amazon-eks-distro/)


色々触って試してみたいのですが、まずは簡単に試せるというところで、本日の記事では、ECRでパブリックレジストリを作ってみたいと思います！


## とりあえず作ってみる

マネージメントコンソールから左側のメニューのRepositoriesにアクセスしてみると、Private/Publicのタブが増えている事に気づきます。細かい事は後でチェックするとして、まずは「Create repository」をクリックしてpublic repositoryを作って行きます。

![image01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63007/16bfb70b-5ab0-382b-f999-1e31a7d52f69.png)



Visibility settingsでPublicを選ぶと、必須入力項目は`Repository name`で、残りの入力項目はオプションです。例えば、自作imageを色々な人に使って欲しい！という様な場合には、logoや、descriptionをしっかり入力しておきたいですね。ただし、Amazon ECR Public Galleryの検索結果でlogoが表示される為には`verified accounts`であることが必要です。

![image02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63007/6cd7dbbf-7021-23c8-9b57-f1041cc80fbd.png)



ここのRepository nameに入力した名前が、公開時のURIにも含まれる形になります。

`public.ecr.aws/<default alias>/<Resitory name>`

設定事項はこれだけです。注意しておきたいポイントは、

* repository作成後は、Visibility settingsを変更出来ない(private <=> publicの様な変更は出来ない)
* public resitoryの場合は、imageのscanの設定が行えない
* default aliasは初回作成時に自動で割り当てられる。後でカスタマイズすることが可能


という所でしょうか。本当に簡単に作れます。

default aliasのカスタマイズは、Registries のメニューから、Publicのプロパティをeditする事で設定可能です。
custom aliasは承認制の様で、一度承認されると変更出来ない様なので、慎重に設定した方が良さそうです。



最終的に今回作ってみた public registoryは、最終的に以下の様な形になりました。この投稿をあげるタイミングでは、custom aliasが承認されていないのでdefault aliasのままです。


`public.ecr.aws/a5r0b0k1/hello-container`


[Amazon ECR Public Gallery](https://gallery.ecr.aws/)からも検索出来る様になっています。


## イメージのpush
private registoryと同じく、マネージメントコンソール上から、pushする際のサンプルコマンドを確認することができます。

```
$ aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
$ docker build -t <<Resitory name> .
$ docker tag <Resitory name>:latest public.ecr.aws/a5r0b0k1/<Resitory name>:latest
$ docker push public.ecr.aws/a5r0b0k1/<Resitory name>:latest
```

Privateと特に変更なさそうに見えますが、get-login-passwordを叩く際の先のリージョンはus-east-1になっています。
どうやらpublic registory自体はリージョンにひもづくリソースではなさそうですね。


## Misc

あまり見慣れていないドメイン名をみたら、どんな感じなのか調べたくなりますよね。`public.ecr.aws`を調べていると
Global Acceleratorを使っている様です。

```
$ dig +noedns +norec public.ecr.aws. @ns-372.awsdns-46.com.

; <<>> DiG 9.10.6 <<>> +noedns +norec public.ecr.aws. @ns-372.awsdns-46.com.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48233
;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 0

;; QUESTION SECTION:
;public.ecr.aws.			IN	A

;; ANSWER SECTION:
public.ecr.aws.		300	IN	CNAME	a961edf72200aa9b1.awsglobalaccelerator.com.

;; AUTHORITY SECTION:
ecr.aws.		172800	IN	NS	ns-1158.awsdns-16.org.
ecr.aws.		172800	IN	NS	ns-1919.awsdns-47.co.uk.
ecr.aws.		172800	IN	NS	ns-372.awsdns-46.com.
ecr.aws.		172800	IN	NS	ns-942.awsdns-53.net.

;; Query time: 34 msec
;; SERVER: 205.251.193.116#53(205.251.193.116)
;; WHEN: Thu Dec 03 09:03:40 JST 2020
;; MSG SIZE  rcvd: 225
```

まだまだre:Inventも続きます。新しい機能・サービスを触りながら楽しみましょう！