現象
localのMacでterraform initした際に以下の様なエラーが発生して providerがダウンロードできなくなりました。
Error: Failed to query available provider packages Could not retrieve the list of available versions for provider hashicorp/aws: could not query provider registry for registry.terraform.io/hashicorp/aws: the request failed after 2 attempts, please try again later: Get "https://registry.terraform.io/v1/providers/hashicorp/aws/versions": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
これ別にaws providerに限った話ではなく、 datadogとかrandomとか全てで発生します
initは通常 .terraform
配下のキャッシュを見ているので required_provider
にマッチしていれば、ダウンロード自体が発生しないのでproviderアップデートのときですね
環境は以下です
- macOS Catalina
- tfenvによるterraform管理
- terraform v0.13.2
providerの指定はこんな感じ
required_providers { aws = { source = "hashicorp/aws" version = ">= 3.0" } datadog = { source = "datadog/datadog" version = "= 2.12.1" } }
原因
ここに書いてある通りです。
/etc/resolve.conf
に存在しないnameserverを書いている場合、cgoを許可しないとDNS解決がGoでうまくいかないっぽいです。
解決法
以下のどちらかを実施すれば直ります
- ネットワーク設定から存在しないDNSサーバのIPを消す
- terraformをソースからビルドする。その際
$ CGO_ENABLED=1 go build -ldflags "-s -w" -o tf
でcgoを許可してビルドする
でした。 変なところでハマってしまいました。