現象
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を許可してビルドする
でした。 変なところでハマってしまいました。