👌

[API構築2] dockerイメージをECRにプッシュした

2023/07/02に公開

概要

API作るものと構成 の環境構築のために、CI/CD周りの技術選定 で選んだ技術を用いてGolang appのdockerイメージをコンテナレジストリ(ECR)にアップロードする。

以下に従って作業を進める。(これはプライベートリポジトリ想定だが、公開用のドキュメントは見つからなかったのでこれを参考に読み替えていく)
https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/docker-push-ecr-image.html

レジストリとリポジトリ

ECRの使い方を読んでるとリポジトリという言葉が出てくる。ECRは「コンテナレジストリ」だったから今からdockerイメージをアップロードする先ってレジストリじゃないの?

答え
レジストリとリポジトリは別物です。

AWS アカウント
└ レジストリ (1個)
  └ リポジトリ (複数)
    └ イメージ (複数)

参照:https://qiita.com/shate/items/a24ae736bcd91787801c

ECRに公開リポジトリ作成

以下のように設定する。値のない項目は入力なし。

設定項目 設定値
リポジトリ名 aichatbot-repository

設定フォーム


できた。

imagesはまだ何もpushしていないので空。

docker imageをECRへ登録

上記imagesの「プッシュコマンドの表示」ボタンを開くと以下の説明が出た。これに従ってpushしていく。

0. AWS CLIをインストールし、認証情報をセットアップする

以下に従ってAWS CLIを使える状態にする。
https://zenn.dev/tofucode/articles/108b5310bd7712

1. 認証トークンを取得し、レジストリに対してDockerクライアントを認証する

以下のコマンドを実行する(XXXX部分は~/.aws/configを参照する)

aws ecr-public get-login-password --region us-east-1 --profile AdministratorAccess-XXXX| docker login --username AWS --password-stdin public.ecr.aws/j3a2u6t5

2. Dockerイメージを構築する

以下で構築済みのためスキップ
https://zenn.dev/tofucode/articles/efd13a3e65afa3

3. Dockerイメージにタグを付ける

docker tag aichatbot-app public.ecr.aws/j3a2u6t5/aichatbot-repository:latest

4. AWSリポジトリにDockerイメージをプッシュする

docker push public.ecr.aws/j3a2u6t5/aichatbot-repository:latest

できた!

ほほ〜 472MB? ローカルのDockerだと1.2GBなのに?ちゃんとアップロードできているのか不安・・・EKSに配って確認せねば。

感想

AWS CLIの認証周りの設定がめちゃくちゃわかりづらかった。

そもそもIAM Identity Center周りがとても難しい。権限周りを新しく管理する方法らしいが大規模組織を想定していて辛い。そのあたりの流れの説明が非公開リポジトリ用の説明になっていて(ECR用のAWS CLIコマンドが非公開リポジトリ用コマンド(aws ecr)と公開リポジトリ用コマンド(aws ecr-public)で別れている)、頭こんがらがる。
あと致命的なのでaws ecr-public get-login-passwordの説明にオプションが足りてなかった。AWS初心者には辛い・・

Docker Hubにしておけばよかったかも?
いや、ECS使うときにECRに上がっていればきっと楽なはずだから・・・はずだから・・・

追記:
DockerHubでもECSに簡単にアップできるらしい。うーーーん洗濯をミスった感

GitHubで編集を提案

Discussion