LoginSignup
0
0

Terraformでplanやapplyが実行されない場合の対処法

Last updated at Posted at 2023-07-26

概要

WSLでterraformを使おうとした際に、terraform planterraform 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

私の環境では以下が最初から記載されていたので続きに追記しています。

/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 に以下を追記

/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 は以下のようになります。

/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.confnameserver 8.8.8.8 が設定されていることを確認し、 terraform plan コマンドが正常に実行されればOKです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0