
# Provider
Terraform的配置文件以 ".tf" 或".tf.json"结尾，主要由[provider](https://support.huaweicloud.com/tr-aos/rf_05_0008.html)，[resource](https://support.huaweicloud.com/tr-aos/rf_05_0009.html)，[data source](https://support.huaweicloud.com/tr-aos/rf_05_0010.html)和[变量](https://support.huaweicloud.com/tr-aos/rf_05_0011.html)组成。
每个 Provider 代表一个服务提供商，Terraform 通过插件机制与Provider进行交互。Provider通过关键字 "provider" 进行声明，Provider的配置参数请参考[这里](https://registry.terraform.io/providers/huaweicloud/huaweicloud/latest/docs)。
执行 terraform init 命令时会下载使用的插件，默认将从Terraform官方仓库下载最新版本的插件。
对于Terraform 0.13之后的版本，可以使用 "required_providers" 指定Provider的 registry 源和版本。
注：当前RFS服务兼容Terraform 1.5.2版本。
```
terraform {
  required_providers {
    huaweicloud = {
      source = "huawei.com/provider/huaweicloud"
      version = ">= 1.20.0"
    }
  }
  required_version = ">= 0.13"
}
```
在Terraform中，您可以使用 provider块创建多个配置，其中一个 provider块为默认配置，其它块使用 "alias" 标识为非默认配置。在资源中使用元参数 provider 可以选择非默认的 provider块。例如需要在不同的地区管理资源，首先需要声明多个 provider块：
```
provider "huaweicloud" {
  region = "cn-north-1"
  ...
}
provider "huaweicloud" {
  alias  = "guangzhou"
  region = "cn-south-1"
  ...
}
```
示例中声明了北京和广州的华为云provider，并对广州地区的provider增加了别名。在资源中使用元参数 provider 来选择非默认的 provider块，其格式为：\<provider名称\>.\<别名\>。
```
resource "huaweicloud_vpc" "example" {
  provider = huaweicloud.guangzhou
  name     = "terraform_vpc"
  cidr     = "192.168.0.0/16"
}
```
华为云Provider 支持在Resource中指定region参数，可以在不同的地区创建资源。相比 alias + provider 的方式，这种方式更加灵活简单。
```
provider "huaweicloud" {
  region = "cn-north-1"
  ...
}
resource "huaweicloud_vpc" "example" {
  region = "cn-south-1"
  name   = "terraform_vpc"
  cidr   = "192.168.0.0/16"
}
```
