Amazon ECR 利用時にログインがうまくいかず辛かった。
しかもレジストリの状況等は参照できているにも関わらず...。
Amazon ECRへのログイン (Docker login) で凡ミスしていた。
Docker loginしていると思ったらしていなかった。
Amazon ECRは、トークンを取得してからログインという流れで使用するのですが、
僕は、トークンを取得コマンドが、ECRへのログインコマンドと思い込んでしまい。
ログインできてるのにpullができない時間を過ごし、闇堕ち寸前まで行きました。
???「魔法少女が魔女を生むならみんな死ぬしかないじゃない!」
If a magical girl creates a witch We have no choice but to die
Amazon ECRへのログイン方法
1.IAMで権限設定
2.Amazon ECRのログインに有効なトークンを取得(12時間らしいです)
3.Amazon ECRへログイン
4.あんなことやこんなことができる。
IAMや鍵の設定は各自ググって下さい。
さて問題の、トークン取得とAmazon ECRログインは、下記コマンドで実施します。
・トークン取得
このコマンドの戻り値をコピペしてそのまま打てば、ECRへのログインが可能
・Amazon ECRへのログイン
「・トークン取得」で実行した# aws ecr get-login --region のコマンドの戻り値をそのまま打つ。
# docker login -u AWS -p password https://aws_account_id.dkr.ecr.us-east-1.amazonaws.com
Login Succeeded
という感じ。
僕は #aws ecr get-login --no-include-email
を打てばそのまま、Amazon ECRにログインできると思っていました。
本来 トークン取得 → docker login → docker pullとかとかするところを
トークン取得 → docker pull という流れで作業に当たろうとして叱られました。
【激おこメッセージ】
[root@localhost tmp]# docker pull aws_account_id.dkr.ecr.リージョン.amazonaws.com/repository:tag
Error response from daemon: Get <aws_account_id.dkr.ecr.リージョン.amazonaws.com/repository:tag> no basic auth credentials
Docker login
この時、メッセージをちゃんと読めていたら、 Docker login
を拾うことで、ログインで失敗していたのもわかったはずですが、
「ログインできたもの」と思い込んでしました。や~分からなくなっちゃってたんですね。
ここで暗中模索...切り分け要素を探します。
〇2つだけメッセージの中から切り分けポイントを確認
1.no basic auth credentials
→認証の失敗(それはそう)
2.Docker login
→Dockerの環境変数
1. no basic auth credentials
は、現在お困りとのことで、こちらとしても分かりかねるということで、
2.Docker login
をヒントに見てみます。
[root@localhost tmp]#
[root@localhost tmp]#
[root@localhost tmp]# cat ~/.docker/config.json
"auths": {
"container-registry.XXX.XXX": {
"auth": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
"https://index.docker.io/v1/": {
"auth": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
"HttpHeaders": {
"User-Agent": "Docker-Client/18.06.1-ce (linux)"
[root@localhost tmp]#
[root@localhost tmp]#
なんと、なんの問題もなく認証ファイルが作成されてしまっています..。
はて...。
もう「1.no basic auth credentials」 から何とか探しきるしかなくなりました。
他にもヒントメッセージが欲しく、一旦、参照系のことをしてみます。
リポジトリ参照しようとしたら何かしらHTTPのステータスが出るはず。
そしてグーグル先生に助けてもらえるはず。多分 403 が返ってくるだけだけど...。
いざ、リポジトリ参照コマンドを、叩きます。
[root@localhost .aws]#
[root@localhost .aws]# aws ecr describe-repositories
aws ecr describe-repositories
"repositories": [
"registryId": "レジストリID",
"repositoryName": "リポジトリ名",
"repositoryArn": "arn:aws:ecr:リージョン:レジストリID:repository/リポジトリ名",
"createdAt": 1535608696.0,
"repositoryUri": "リポジトリURL"
[root@localhost .aws]#
[root@localhost .aws]#
(○Д○)
参照ができてい~る。
ん?もしかしてオレゴン州に居たりする!?
一応そういうことも無きにしも非ず。AWSの変数の確認もする。
[root@localhost ~]# aws configure list
Name Value Type Location
---- ----- ---- --------
profile <not set> None None
access_key ****************XXX shared-credentials-file
secret_key ****************XXX shared-credentials-file
region リージョン config-file ~/.aws/config
[root@localhost ~]#
リージョンも鍵も間違っていなかった。
ここで、原点にかえりドキュメントを参照...。
Amazon ECR レジストリ
https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/Registries.html
結果の出力は、Amazon ECR レジストリに対して Docker クライアントを認証するために使用する、docker login コマンドとなります。
ちゃ~んと書かれていました。
さて、本文冒頭に戻り、正規手順を踏みましょう。
Amazon ECRへのログイン方法
1.IAMで権限設定
2.Amazon ECRのログインに有効なトークンを取得(12時間らしいです)
3.Amazon ECRへログイン
4.あんなことやこんなことができる。
無事、あんなことやこんなことができました~。
危うく闇堕ち仕掛けました。
「日本人にかえれ | 出光 佐三 |本 | 通販 | Amazon」
https://www.amazon.co.jp/%E6%97%A5%E6%9C%AC%E4%BA%BA%E3%81%AB%E3%81%8B%E3%81%88%E3%82%8C-%E5%87%BA%E5%85%89-%E4%BD%90%E4%B8%89/dp/4478027609
↑これ読みたいので誰か買ってください。
Amazon ECR での AWS CLI の使用
https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/ECR_AWSCLI.html
Amazon ECR レジストリ
https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/Registries.html#registry_auth
Docker 環境の設定
https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/create_deploy_docker.container.console.html
Docker コマンドライン
設定ファイル
http://docs.docker.jp/engine/reference/commandline/cli.html#configuration-files
aws . ecr #get-login
https://docs.aws.amazon.com/cli/latest/reference/ecr/get-login.html#get-login
aws . ecr #describe-repositories
https://docs.aws.amazon.com/cli/latest/reference/ecr/describe-repositories.html