本記事は個人の意見であり、所属する組織の見解とは関係ありません。
こちらはAWS Containers Advent Calendar 2020の3日目の記事です。
re:Invent 2020が開催しましたね!Andy JassyのKeynoteでもコンテナ関連のサービスのアップデートが複数発表されています。みなさんは、どのアップデートが気になりましたか?
- Amazon Elastic Container Registry (ECR)でパブリックレジストリが提供可能に
- [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インスタンスの利用をサポート
- Amazon EKS with AWS Fargateでマネージドな アプリケーションログ転送をサポート
- Amazon EKSで Kubernetes operational software (add-ons)をAmazon EKS consoleから管理可能に
- Amazon ECS Anywhere
- Amazon EKS Anywhere
- Amazon EKS Distro
色々触って試してみたいのですが、まずは簡単に試せるというところで、本日の記事では、ECRでパブリックレジストリを作ってみたいと思います!
とりあえず作ってみる
マネージメントコンソールから左側のメニューのRepositoriesにアクセスしてみると、Private/Publicのタブが増えている事に気づきます。細かい事は後でチェックするとして、まずは「Create repository」をクリックしてpublic repositoryを作って行きます。
Visibility settingsでPublicを選ぶと、必須入力項目はRepository name
で、残りの入力項目はオプションです。例えば、自作imageを色々な人に使って欲しい!という様な場合には、logoや、descriptionをしっかり入力しておきたいですね。ただし、Amazon ECR Public Galleryの検索結果でlogoが表示される為にはverified accounts
であることが必要です。
ここの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からも検索出来る様になっています。
イメージの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も続きます。新しい機能・サービスを触りながら楽しみましょう!