Terraform「Error: Failed to query available provider packages」(プロバイダーが見つからない)の修正方法

intermediate🏗️ Terraform2026-03-18| Terraform 0.13+、Linux/macOS/Windows、任意のクラウドプロバイダー(AWS、GCP、Azure)

Error Message

Error: Failed to query available provider packages
#terraform#provider#registry#init

TL;DR

Terraformがプロバイダーレジストリに接続できないか、バージョン制約に合うバージョンが見つからない状態です。まずterraform init -upgradeを実行してネットワーク接続を確認しましょう。企業のプロキシがレジストリへのHTTPS通信をブロックしているケースが9割を占めます。カスタムまたはプライベートレジストリを使用している場合は、required_providersのソースアドレスを再確認してください。

エラーの全文

Error: Failed to query available provider packages

│ Could not retrieve the list of available versions for provider
│ hashicorp/aws: could not connect to registry.terraform.io: Failed to
│ request discovery document: Get
│ "https://registry.terraform.io/.well-known/terraform.json": dial tcp:
│ lookup registry.terraform.io: no such host

またはバージョン制約に関するエラー:

Error: Failed to query available provider packages

│ Could not retrieve the list of available versions for provider
│ hashicorp/azurerm: no available releases match the given constraints
│ >= 3.0.0,  3.114

原因

  • インターネット接続なし — Terraformがregistry.terraform.ioに到達できない
  • 企業プロキシ/ファイアウォール — レジストリへのHTTPS通信がブロックされている
  • バージョン制約の競合required_providersブロックに矛盾するバージョンや存在しないバージョンが指定されている
  • プロバイダーソースアドレスの誤り — タイポ、またはTerraform 0.12時代の暗黙的なプロバイダー参照が残っている
  • ロックファイルが古い.terraform.lock.hclが存在しないバージョンや変更されたハッシュを参照している
  • プライベート/カスタムレジストリに到達不可 — 内部レジストリのURLが間違っているか、認証情報が不足している

修正1:レジストリへのネットワーク接続を確認する

まずここから始めます。設定を変更する前に、マシンがレジストリに実際にアクセスできるか確認してください:

curl -I https://registry.terraform.io/.well-known/terraform.json

タイムアウトや接続エラーが出る場合はネットワークの問題です。Terraformの設定の問題ではありません。

企業プロキシ環境の場合

terraform initを実行する前にプロキシの環境変数を設定します:

# Linux/macOS
export HTTPS_PROXY=https://your-proxy.company.com:8080
export HTTP_PROXY=http://your-proxy.company.com:8080
export NO_PROXY="localhost,127.0.0.1"

terraform init
# Windows (PowerShell)
$env:HTTPS_PROXY = "https://your-proxy.company.com:8080"
$env:HTTP_PROXY = "http://your-proxy.company.com:8080"

terraform init

修正2:terraform init -upgrade を実行する

ロックファイルが古い、またはキャッシュされたメタデータが古い場合は、強制的に全体を再取得します:

terraform init -upgrade

プロバイダーのメタデータを再取得し、.terraform.lock.hclに新しいチェックサムを書き込みます。ステートファイルには影響しません。

修正3:required_providers ブロックを確認する

versions.tf(またはterraformブロックを記述しているファイル)を開き、ソースアドレスとバージョン制約を確認します:

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"  # このバージョンがレジストリに存在することを確認
    }
  }
  required_version = ">= 1.3.0"
}

よくある間違い:

  • source = "hashicorp/aws"の代わりにsource = "aws"を使用している — Terraform 0.12では動作しましたが、0.13以降では機能しません
  • 存在しないパッチバージョン(例:= 3.114.0)に固定している — 代わりに~> 3.114を使用してください
  • モジュール間でバージョン制約が競合している — ルートモジュールが>= 4.0を要求し、子モジュールが< 4.0を要求している場合など

プロバイダーの実際に存在するバージョンを確認するには:

curl -s https://registry.terraform.io/v1/providers/hashicorp/aws/versions | python3 -m json.tool | grep '"version"' | head -20

修正4:ロックファイルを削除して再初期化する

ロックファイルが破損している、またはハッシュが一致しない場合は、削除してゼロから始めます:

rm .terraform.lock.hcl
rm -rf .terraform/
terraform init

Terraformがプロバイダーをゼロから解決します。完了後、再生成されたロックファイルをコミットしてください。

修正5:ファイルシステムミラーを使用する(エアギャップ/オフライン環境)

対象マシンにインターネット接続がない場合、CIランナーやエアギャップサーバーでよく直面する問題です。解決策はローカルのプロバイダーミラーを使用することです。

インターネットに接続できるマシンでプロバイダーをダウンロードします:

terraform providers mirror /tmp/tf-mirror

/tmp/tf-mirrorディレクトリを対象環境に転送します。次に~/.terraformrc(Linux/macOS)または%APPDATA%/terraform.rc(Windows)でTerraformにミラーを使用するよう設定します:

provider_installation {
  filesystem_mirror {
    path    = "/opt/terraform-providers"
    include = ["registry.terraform.io/*/*"]
  }
  direct {
    exclude = ["registry.terraform.io/*/*"]
  }
}

修正6:プライベートレジストリの認証情報

プライベートレジストリには認証情報が必要です。~/.terraformrcに追加します:

credentials "app.terraform.io" {
  token = "your-token-here"
}

またはTerraform Cloud用の環境変数を使用します:

export TF_TOKEN_app_terraform_io="your-token-here"

修正の確認

terraform initが正常に完了すると以下が表示されます:

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure.

プロバイダーが実際にダウンロードされたことを確認します:

ls .terraform/providers/registry.terraform.io/hashicorp/aws/

プロバイダーのバージョンとプラットフォーム名のディレクトリ(例:5.40.0/linux_amd64/)が表示されれば成功です。

クイックリファレンス:どの修正から試すべきか

  • DNSエラー/ホストが見つからない → 修正1(ネットワーク/プロキシ)
  • ハッシュ不一致/チェックサムエラー → 修正2(-upgrade)または修正4(ロックファイルの削除)
  • 制約に一致するリリースが見つからない → 修正3(バージョン制約の確認)
  • エアギャップ/インターネット接続なし → 修正5(ファイルシステムミラー)
  • プライベートレジストリから401 Unauthorized → 修正6(認証情報)

Related Error Notes