ネットワーク遅延などの理由で terraform init コマンドがタイムアウトした場合、プロバイダーをダウンロードできないなどの問題が発生する可能性があります。これらの問題を解決するために、Alibaba Cloud オープンソースイメージ Web サイトを指定できます。
問題
Alibaba Cloud プロバイダーは、source = hashicorp/alicloud
および source = aliyun/alicloud
のソースからダウンロードできます。中国でプロバイダーをダウンロードすると、ダウンロード速度が遅くなったり、ダウンロードが失敗したりすることがあります。
- Finding aliyun/alicloud versions matching "1.191.0"...
╷
│ Error: Failed to query available provider packages
│
│ Could not retrieve the list of available versions for provider aliyun/alicloud: could not query provider registry for registry.terraform.io/aliyun/alicloud: the request
│ failed after 2 attempts, please try again later: Get "https://registry.terraform.io/v1/providers/aliyun/alicloud/versions": net/http: request canceled (Client.Timeout
│ exceeded while awaiting headers)
╵
- Finding hashicorp/alicloud versions matching "1.191.0"...
╷
│ Error: Failed to query available provider packages
│
│ Could not retrieve the list of available versions for provider hashicorp/alicloud: could not query provider registry for registry.terraform.io/hashicorp/alicloud: the
│ request failed after 2 attempts, please try again later: Get "https://registry.terraform.io/v1/providers/hashicorp/alicloud/versions": context deadline exceeded
│ (Client.Timeout exceeded while awaiting headers)
╵
ソリューション
Terraform CLI V0.13.2 以降のバージョンでは、ネットワークイメージを構成できます。前述の問題を解決するために、Alibaba Cloud プロバイダーは、中国のユーザーがイメージを高速にダウンロードできるようにイメージサービスを提供しています。
構成方法
.terraformrc
または terraform.rc
という名前の構成ファイルを作成します。ファイルの場所は、ホストのオペレーティングシステムによって異なります。
Windows オペレーティングシステムの場合、ファイル名は
terraform.rc
で、ユーザーの%APPDATA%
ディレクトリに保存する必要があります。具体的なディレクトリは、Windows のバージョンとシステム構成によって異なります。PowerShell で$env:APPDATA
コマンドを実行すると、オペレーティングシステム内のファイルディレクトリを確認できます。その他のすべてのオペレーティングシステムの場合、ファイル名は
.terraformrc
で、関連ユーザーのホームディレクトリに保存する必要があります。
TF_CLI_CONFIG_FILE
環境変数を使用して、Terraform CLI の構成ファイルのディレクトリを指定することもできます。構成ファイルは、*.tfrc
という命名形式に従う必要があります。
macOS を使用する場合は、ホームディレクトリに .terraformrc
という名前のファイルを作成します。ファイルには、次の内容が含まれています。
provider_installation {
network_mirror {
url = "https://mirrors.aliyun.com/terraform/"
// 中国本土のイメージソースからダウンロードできるのは、Alibaba Cloud 関連のプロバイダーのみです。
include = ["registry.terraform.io/aliyun/alicloud",
"registry.terraform.io/hashicorp/alicloud",
]
}
direct {
// Alibaba Cloud 関連のプロバイダーを除くすべてのプロバイダーは、元のダウンロードリンクを維持します。
exclude = ["registry.terraform.io/aliyun/alicloud",
"registry.terraform.io/hashicorp/alicloud",
]
}
}