概要
WSLでterraformを使おうとした際に、terraform plan
や terraform apply
がいつまで経っても完了しなかったのでその調査結果と対処法です。
環境
- Windows 10
- WSL2
- Ubuntu 22.04
原因
詳しくはわからないのですが、どうも(WSL)Ubuntuのデフォルトで設定されているネームサーバーからの応答が適切に処理できていないことが原因のようです。
/etc/resolv.conf
に記載されているネームサーバーを8.8.8.8に変更したところ問題なく terraform plan
や terraform apply
が実行されるようになりました。
ただ、WSLのUbuntuでは単純に /etc/resolv.conf
を修正しただけだと、次回起動時に自動生成されてしまいます。
以下は /ect/resolv.conf
の永続化 の手順です。
手順
/ect/resolv.confの自動生成の停止
/etc/wsl.conf
に以下の設定を追記します。
[network]
generateResolvConf = false
/etc/wsl.conf
を開きます。
sudo vi /etc/wsl.conf
私の環境では以下が最初から記載されていたので続きに追記しています。
[automount]
options = "metadata"
[network]
generateResolvConf = false
/etc/resolv.confの設定
WSLでは /etc/resolv.conf
が /run/resolvconf/resolv.conf
のシンボリックリンクになっています。
また、起動時・終了時には以下の様な処理が実行されているようです。
起動時
- IPv4アドレスを取得
-
/run/resolvconf/resolv.conf
に上記アドレスを nameserver の値として設定 -
/run/resolvconf/resolv.conf
/etc/resolv.conf
にシンボリックリンクを張る
終了時
-
/etc/resolv.conf
を unlink する -
/run/resolvconf/resolv.conf
を削除
generateResolvConf を false に設定したので、起動時の処理は行われなくなりましたが、終了時の処理は実行されてしまうので、起動時に /etc/resolv.conf
を作成する方法をとります。
まずは、/etc/resolv.conf.dist
を作成します
sudo vi /etc/resolv.conf.dist
/etc/resolv.conf.dist
に以下を追記
nameserver 8.8.8.8
続いて再度 /etc/wsl.conf
を開き、下記を追記します。
[boot]
command = "cp -rup /etc/resolv.conf.dist /etc/resolv.conf"
最終的に /etc/wsl.conf
は以下のようになります。
[automount]
options = "metadata"
[boot]
command = "cp -rup /etc/resolv.conf.dist /etc/resolv.conf"
[network]
generateResolvConf = false
あとは、Windows PowerShellからWSLを再起動して /etc/resolv.conf
に nameserver 8.8.8.8
が設定されていることを確認し、 terraform plan
コマンドが正常に実行されればOKです。