Screaming Loud

日々是精進

could not query provider registry for registry.terraform.io でterraformのproviderがダウンロードできない問題の対処

現象

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"
    }
  }

原因

ここに書いてある通りです。

github.com

/etc/resolve.conf に存在しないnameserverを書いている場合、cgoを許可しないとDNS解決がGoでうまくいかないっぽいです。

解決法

以下のどちらかを実施すれば直ります

  • ネットワーク設定から存在しないDNSサーバのIPを消す
  • terraformをソースからビルドする。その際 $ CGO_ENABLED=1 go build -ldflags "-s -w" -o tf でcgoを許可してビルドする

でした。 変なところでハマってしまいました。