
プライベートサブネットから ECR にイメージをプッシュする際に必要な VPC エンドポイントを教えてください
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
困っていた内容
プライベートサブネットの EC2 から ECR にイメージをプッシュしたところ、タイムアウトが発生しました。VPC エンドポイントを設定すれば良さそうですが、ecr.dkr、ecr.api、s3と種類がたくさんあってよく分かりません。どれを選んだら良いか教えてください。
どう対応すればいいの?
com.amazonaws.region.ecr.dkrとcom.amazonaws.region.ecr.apiをご使用ください。
ECR にイメージをプッシュする際に必要な VPC エンドポイントは、ECR VPC エンドポイントとなります。ECR VPC エンドポイントは、対応する API によって2種類提供されていますが、プッシュの際は両方のエンドポイントが必要になります。
Amazon ECR インターフェイス VPC エンドポイント (AWS PrivateLink) - Amazon ECR
com.amazonaws.region.ecr.dkr
このエンドポイントは、Docker Registry API に使用されます。push や pull などの Docker クライアントコマンドでは、このエンドポイントが使用されます。
com.amazonaws.region.ecr.api
このエンドポイントは、Amazon ECR API への呼び出しに使用されます。DescribeImages や CreateRepository などの API アクションは、このエンドポイントに移動します。
やってみた
VPC エンドポイントを設定しない状態で、プライベートサブネットの EC2 から Docker イメージをプッシュします。
docker pushの前に、Docker クライアントを認証しますが、VPC エンドポイントを設定しない状態では、認証に必要なパスワード(aws ecr get-login-password)の取得に失敗します。
$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 1234567889012.dkr.ecr.ap-northeast-1.amazonaws.com Connect timeout on endpoint URL: "https://api.ecr.ap-northeast-1.amazonaws.com/" Error: Cannot perform an interactive login from a non TTY device
com.amazonaws.region.ecr.apiだけ追加して、再チャレンジします。
パスワードの取得は成功しましたが、その後のログイン(docker login)に失敗します。
$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 1234567889012.dkr.ecr.ap-northeast-1.amazonaws.com Error response from daemon: Get "https://1234567889012.dkr.ecr.ap-northeast-1.amazonaws.com/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
com.amazonaws.region.ecr.dkrも追加して、再チャレンジします。
ログインに成功し、その後のプッシュも成功しました。
$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 1234567889012.dkr.ecr.ap-northeast-1.amazonaws.com Login Succeeded $ docker tag hello-world:latest 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/hello-world:latest $ docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/hello-world:latest The push refers to repository [123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/hello-world] 123456789012: Pushed abcdefghijkl: Pushed latest: digest: sha256:123456789012abcdefghijkl123456789012 size: 2194






