はじめに

筆者は業務ではWindows端末を使用していて、コンテナを動かす際にはWSL2とRancher Desktopを利用しています。
先日、AWS CDKを利用したプロジェクトでデプロイ時にエラーが発生して解決に時間がかかってしまったので、同じような事象に遭遇した方がトラブルシュート時に疑ってみた方がいい仮説候補の一つとなるよう、以下に文書として残します。

エラー内容

今回は、cdk deployコマンドを実行した際に、下記のようにECRへのアクセスを試みていると思われる箇所でエラーが出力されていました。

AwesomeStack:  fail: docker login --username AWS --password-stdin https://<AWSアカウント>.dkr.ecr.ap-northeast-1.amazonaws.com exited with error code 1: Error response from daemon: Get "https://<AWSアカウント>.dkr.ecr.ap-northeast-1.amazonaws.com/v2/": dial tcp: lookup <AWSアカウント>.dkr.ecr.ap-northeast-1.amazonaws.com on 172.24.99.178:53: read udp 172.24.99.178:43761->172.24.99.178:53: read: connection refused

(見た感じ53番ポートへのアクセスなのでDNS関連かな?とは思ったのですが、前回デプロイを行った際にはこのようなエラーに遭遇しなかったため、社内で利用しているVPNの設定が原因かな?と考えそれ関連の設定を弄りまわしていましたが、解決に結びつかず解決までに結構な時間を使ってしまいました。)

対処

IPアドレスの出処確認

エラーメッセージ中に172.24.99.178というIPアドレスがありますが、まずはこいつの出処を探ります。
コマンドプロンプト等で ipconfig コマンドを叩いてみると、どうやらWSL関連のIPアドレスのようです。

Rancer Desktopへログイン

CDKデプロイ時にコンテナ使っているからRancher Desktopかなーと考え、WSL2上のrancher-desktopのディストリに入ってみます。

PS C:\Users\john-doe\Desktop> wsl -l -v
  NAME                    STATE           VERSION
* Ubuntu                  Running         2
  rancher-desktop         Running         2
  rancher-desktop-data    Stopped         2
PS C:\Users\john-doe\Desktop> wsl -d rancher-desktop
#

名前解決の状況確認

エラーメッセージでは自身に対して名前解決のリクエストを出しているように見えます。
まずは試しに、名前の引けなかったECRの名前解決を試みてみます。

# nslookup <AWSアカウント>.dkr.ecr.ap-northeast-1.amazonaws.com
nslookup: write to '172.24.99.178': Connection refused
;; connection timed out; no servers could be reached

引けませんね。もしかしたら名前解決できるようにすれば解決するかも?

照会先DNSサーバの追加

resolv.confをみるとnameserverは自身のみを対象としていました。(今回問題になったので初めて確認したため元々どうなっているものなのかはよく分かっていません。)
なにを設定すれば適切かちょっとわかりませんが、手っ取り早くGoogle Public DNSを設定してみます。

~ # cat /etc/resolv.conf
nameserver 172.24.99.178
~ # vi /etc/resolv.conf
~ # cat /etc/resolv.conf
nameserver 8.8.8.8
nameserver 172.24.99.178

再度名前解決

もう一度、先程失敗した名前解決を試してみます。

~ # nslookup <AWSアカウント>.dkr.ecr.ap-northeast-1.amazonaws.com
Server:         8.8.8.8
Address:        8.8.8.8:53

Non-authoritative answer:
<AWSアカウント>.dkr.ecr.ap-northeast-1.amazonaws.com       canonical name = nlb2-******.elb.ap-northeast-1.amazonaws.com
Name:   nlb2-******.elb.ap-northeast-1.amazonaws.com
Address: **.***.***.**

Non-authoritative answer:
<AWSアカウント>.dkr.ecr.ap-northeast-1.amazonaws.com       canonical name = nlb2-******.elb.ap-northeast-1.amazonaws.com

引けるようになりました。

CDK デプロイ

Rancher Desktopで名前が引けるようになったので、これでうまくいくか確認します。
cdk deployを実行すると、今回問題としているエラーは発生しなくなり問題なくデプロイが成功しました。

おわりに

解決してみるとなんてことない話なんですが、明後日の方向を調査して時間を潰してしまっていた分情けないやらで闇堕ちしかけました。
トラブルシュートは勘を頼みにする部分もありますが、ある程度で「アカンなコレは」と思ったら”素直に”エラーメッセージを読んで不明点を潰していくべきですね。(むしろ最初からエラーメッセージを素直に読んだほうがいい場合の方が多いと思いますが。)
これまで問題なかったのになぜ今回エラーになったのかまでは追えていませんが、似たような事象で困っている方の参考になればと思います。