- OpenTofu 语言
- 提供程序
- 提供程序配置
提供程序配置
提供程序允许 OpenTofu 与云提供商、SaaS 提供商和其他 API 交互。
某些提供程序需要您使用端点 URL、云区域或其他设置对其进行配置,然后 OpenTofu 才能使用它们。此页面记录了如何配置提供程序的设置。
此外,所有 OpenTofu 配置都必须声明它们需要的提供程序,以便 OpenTofu 可以安装和使用它们。 提供程序需求 页面记录了如何声明提供程序,以便 OpenTofu 可以安装它们。
提供程序配置
提供程序配置位于 OpenTofu 配置的根模块中。(子模块从根模块接收其提供程序配置;有关更多信息,请参阅 模块 providers
元参数 和 模块开发:模块中的提供程序。)
提供程序配置是使用 provider
块创建的
provider "google" {
project = "acme-app"
region = "us-central1"
}
在块标题中给出的名称(在此示例中为 "google"
)是要配置的提供程序的 本地名称。此提供程序应已包含在 required_providers
块中。
块的主体({
和 }
之间)包含提供程序的配置参数。此部分中的大多数参数由提供程序本身定义;在此示例中,project
和 region
都是特定于 google
提供程序的。
您可以在这些配置参数的值中使用 表达式,但只能引用在应用配置之前已知的值。这意味着您可以安全地引用输入变量,但不能引用资源导出的属性(资源参数直接在配置中指定的例外情况)。
提供程序的文档应列出它期望的配置参数。对于在 公共 OpenTofu 注册表 上分发的提供程序,版本化文档可在每个提供程序的页面上获得,通过提供程序标题中的“文档”链接。
某些提供程序可以使用 shell 环境变量(或其他备用来源,如虚拟机实例配置文件)作为其某些参数的值;在可用时,我们建议将其用作将凭据保留在您的版本控制 OpenTofu 代码之外的一种方式。
还有两个由 OpenTofu 本身定义并可用于所有 provider
块的“元参数”
与 OpenTofu 语言中的许多其他对象不同,如果 provider
块的内容原本为空,则可以省略它。OpenTofu 假设任何未明确配置的提供程序都具有空的默认配置。
alias
:多个提供程序配置
您可以选择为同一个提供程序定义多个配置,并在每个资源或每个模块的基础上选择要使用的配置。这样做的主要原因是支持云平台的多个区域;其他示例包括目标多个 Docker 主机、多个 Consul 主机等。
要为给定提供程序创建多个配置,请包含具有相同提供程序名称的多个 provider
块。对于每个额外的非默认配置,请使用 alias
元参数提供额外的名称段。例如
# The default provider configuration; resources that begin with `aws_` will use
# it as the default, and it can be referenced as `aws`.
provider "aws" {
region = "us-east-1"
}
# Additional provider configuration for west coast region; resources can
# reference this as `aws.west`.
provider "aws" {
alias = "west"
region = "us-west-2"
}
为了在模块中声明配置别名以从父模块接收备用提供程序配置,请将 configuration_aliases
参数添加到该提供程序的 required_providers
条目中。以下示例在包含模块中声明了 mycloud
和 mycloud.alternate
提供程序配置名称
terraform {
required_providers {
mycloud = {
source = "mycorp/mycloud"
version = "~> 1.0"
configuration_aliases = [ mycloud.alternate ]
}
}
}
默认提供程序配置
没有 alias
参数的 provider
块是该提供程序的默认配置。未设置 provider
元参数的资源将使用与资源类型名称的第一个单词匹配的默认提供程序配置。(例如,aws_instance
资源使用默认的 aws
提供程序配置,除非另有说明。)
如果提供程序的每个显式配置都有一个别名,则 OpenTofu 使用隐含的空配置作为该提供程序的默认配置。(如果提供程序有任何必需的配置参数,则当资源默认为空配置时,OpenTofu 将引发错误。)
引用备用提供程序配置
当 OpenTofu 需要提供程序配置的名称时,它期望 <PROVIDER NAME>.<ALIAS>
形式的引用。在上面的示例中,aws.west
将引用具有 us-west-2
区域的提供程序。
这些引用是特殊的表达式。与其他命名实体的引用(例如,var.image_id
)一样,它们不是字符串,不需要加引号。但它们仅在 resource
、data
和 module
块的特定元参数中有效,不能在任意表达式中使用。
选择备用提供程序配置
默认情况下,资源使用从资源类型名称的第一个单词推断出的默认提供程序配置(没有 alias
参数)。
要为资源或数据源使用备用提供程序配置,请将其 provider
元参数设置为 <PROVIDER NAME>.<ALIAS>
引用
resource "aws_instance" "foo" {
provider = aws.west
# ...
}
要为子模块选择备用提供程序配置,请使用其 providers
元参数指定哪些提供程序配置应映射到模块内部的哪些本地提供程序名称
module "aws_vpc" {
source = "./aws_vpc"
providers = {
aws = aws.west
}
}
模块在传入提供程序时有一些特殊要求;有关更多详细信息,请参阅 模块 providers
元参数。在大多数情况下,只有根模块应该定义提供程序配置,所有子模块都从其父模块获取其提供程序配置。
version
(已弃用)
version
元参数指定提供程序的版本约束,其工作方式与 required_providers
块 中的 version
参数相同。仅当 required_providers
未包含该提供程序的版本约束时,才会使用提供程序配置中的版本约束。
始终在 required_providers
块 中声明提供程序版本约束。