跳至主要内容

OpenTofu 设置

特殊的 terraform 配置块类型用于配置 OpenTofu 本身的某些行为,例如要求最低的 OpenTofu 版本来应用您的配置。

OpenTofu terraform 块语法

OpenTofu 设置收集在 terraform 块中

代码块
terraform {
# ...
}

每个 terraform 块可以包含许多与 OpenTofu 行为相关的设置。在 terraform 块中,只能使用常量值;参数不能引用命名对象(如资源、输入变量等),也不能使用任何 OpenTofu 语言内置函数。

以下部分将介绍 terraform 块中支持的各种选项。

配置 OpenTofu 后端

嵌套的 backend 块配置 OpenTofu 应该使用哪个状态后端。

backend 块的语法和行为在 后端配置 中描述。

指定所需的 OpenTofu 版本

required_version 设置接受 版本约束字符串,该字符串指定哪些版本的 OpenTofu 可以与您的配置一起使用。

如果正在运行的 OpenTofu 版本与指定的约束不匹配,OpenTofu 将产生错误并退出,不再执行任何其他操作。

当您使用 子模块 时,每个模块都可以指定自己的版本要求。树中所有模块的要求都必须满足。

在协作环境中使用 OpenTofu 版本约束,以确保每个人都在使用特定版本的 OpenTofu,或者至少使用配置所需的最低版本 OpenTofu。

required_version 设置仅适用于 OpenTofu CLI 的版本。OpenTofu 的资源类型由提供者插件实现,其发布周期独立于 OpenTofu CLI 以及彼此之间。使用 required_providers 来管理您使用的每个提供者的预期版本。

指定提供者要求

required_providers 块指定当前模块所需的所有提供者,将每个本地提供者名称映射到源地址和版本约束。

代码块
terraform {
required_providers {
aws = {
version = ">= 2.7.0"
source = "hashicorp/aws"
}
}
}

有关更多信息,请参阅 提供者要求

实验性语言功能

OpenTofu 团队有时会通过选择性加入实验引入新的语言功能,以便社区可以在其成为向后兼容性约束之前尝试新功能并提供反馈。

在提供实验性功能的版本中,您可以通过在 tofu 块中设置 experiments 参数,在每个模块的基础上启用它们

代码块
terraform {
experiments = [example]
}

假设当前 OpenTofu 版本中提供了名为 example 的实验,则上述操作将选择加入该实验。

实验可能会在以后的版本中发生任意更改,并且,根据实验的结果,在最终发布之前可能会发生巨大变化,或者根本不会以稳定形式发布。即使在次要版本和修补程序版本中,也可能出现此类重大更改。我们不建议在用于生产用途的 OpenTofu 模块中使用实验性功能。

为了明确这一点,并避免模块调用者无意中依赖实验性功能,任何启用了实验的模块都会在每次 tofu plantofu apply 时生成警告。如果您想在共享模块中尝试实验性功能,我们建议只在模块的 alpha 或 beta 版本中启用实验。

实验的介绍和完成情况已记录在 OpenTofu 的变更日志 中,您可以查看其中的发布说明,了解特定 OpenTofu 版本中是否提供任何实验关键字。

将元数据传递给提供者

如果提供者定义了相应的模式,则 terraform 块可以为模块使用的每个提供者包含一个嵌套的 provider_meta 块。这允许提供者接收模块特定的信息,主要用于由与相关提供者相同的供应商分发的模块。

有关更多信息,请参见 提供者元数据