Terraform Airbyte Provider | Could not retrieve the list of available versions for provider

背景

airbyteをterraformで管理するためTerraform Airbyte Providerをしようしていたところterraform applyでエラーが発生した

調査

main.tfの内容

terraform {
  required_version = ">= 0.13"
  required_providers {
    airbyte = {
      source  = "airbytehq/airbyte"
      version = "0.6.1"
    }
  } 
}

provider "airbyte" {
  password = "xxxxxxx"
  username = "yyyyyyy"
  server_url = "http://localhost:8000/api/public/v1"
}

module "bigquery-s3 {
  source         = "./bigquery-s3
}

エラー内容

out: terraform.tfstate found. Running terraform apply...
out: Initializing the backend...
out: Upgrading modules...
out: - bigquery-s3 in bigquery-s3
out: Initializing provider plugins...
out: - Finding airbytehq/airbyte versions matching "0.6.1"...
out: - Finding latest version of hashicorp/airbyte...
err: ╷
out: - Using previously-installed airbytehq/airbyte v0.6.1
err: │ Error: Failed to query available provider packages
err: │ 
err: │ Could not retrieve the list of available versions for provider
err: │ hashicorp/airbyte: provider registry registry.terraform.io does not have a
err: │ provider named registry.terraform.io/hashicorp/airbyte
err: │ 
err: │ Did you intend to use airbytehq/airbyte? If so, you must specify that
err: │ source address in each module which requires that provider. To see which
err: │ modules are currently depending on hashicorp/airbyte, run the following
err: │ command:
err: │     terraform providers
err: ╵

main.tfでは正しくproviderairbytehq/airbyteを読み込んでくれようとしている
が、moduleではhashicorp/airbyteと呼ばれるプロバイダーを利用しようと動作する

暗黙的に子moduleでは親と同じproviderを使ってくれるはずなのに
参考: Providers Within Modules – Configuration Language | Terraform | HashiCorp Developer

(別の話になるけど)おそらくproviderのversionが違う場合はterraform init -upgradeを実行すると解消するはず、しかし今回はprovider名自体が違うため解消できなかった

terraform providersを実行

mainとmoduleがそれぞれどのproviderを参照しているかを表示してくれる

$ terraform providers

    Providers required by configuration:
    .
    ├── provider[registry.terraform.io/airbytehq/airbyte] 0.6.1
    └── module.bigquery-s3
        └── provider[registry.terraform.io/hashicorp/airbyte]

module.bigquery-s3配下もprovider[registry.terraform.io/airbytehq/airbyte] 0.6.1になっているべきだが、やはりズレている

ひとまず解消する方法

main.tfと同じ内容のprovider設定をprovider.tfとして作成

terraform {
  required_providers {
    airbyte = {
      source  = "airbytehq/airbyte"
      version = "0.6.1"
    }
  }
}

それをmoduleディレクトリ配下に配置する

    └── terraform
        ├── bigquery-s3
        │   ├── connections.tf
        │   ├── destinations.tf
        │   ├── provider.tf <-- これを追加
        │   └── sources.tf
        └── main.tf

terraform providersを実行すると

$ terraform providers

Providers required by configuration:
.
├── provider[registry.terraform.io/airbytehq/airbyte] 0.6.1
└── module.bigquery-s3
    └── provider[registry.terraform.io/airbytehq/airbyte] 0.6.1

最上階層(main.tf)のproviderとmoduleのproviderが一致した

ただし、同じ内容の設定を各moduleディレクトリに配置するのは気が引けるな…
今のところ他の解決方法は見つかってません

ダメだったパターン

main.tfのmodule読み込みの設定のみで対処しようとしたが、同じエラーが発生した

terraform {
  required_providers {
    airbyte = {
      source  = "airbytehq/airbyte"
      version = "0.6.1"
    }
  }
}

provider "airbyte" {
  username   = "airbyte"
  password   = "password"
  server_url = "http://localhost:8000/api/public/v1"
}

module "example" {
  source = "./module"
  ##### ここを追加したがダメだった Start ####
  providers = {  <-- 
    airbyte = airbyte 
  }
  #### ここを追加したがダメだった End ####
}

まとめ

この記事でも同じ事象が紹介されていた(お陰で自信が持てました)
Terraformにおいてハマった話(モジュール x GitHubプロバイダー編) – NIFTY engineering

根本解決するにはどうすれば…
このあたりをイジるのかな
Terraform Airbyte Registry No compatible versions of provider registry.terraform.io/airbytehq/airbyte were found. · Issue #103 · CircleCI-Public/terraform-orb

謎は深まるばかりです…