- OpenTofu 语言
- OpenTofu 设置
- 后端
- remote
后端类型:远程
我们建议使用 cloud
内置集成 而不是此后端。cloud
选项包括改进的用户体验和更多功能。
远程后端在所有其他 OpenTofu 后端中是独一无二的,因为它既可以存储状态快照,也可以执行 TF 自动化和协作软件 ( TACOS ) 后端的 CLI 驱动运行工作流程操作。它曾经被称为“增强型”后端。
如果您的 TACOS 提供商启用了完整的远程操作,您可以在 TACOS 运行时环境中执行诸如 tofu plan
或 tofu apply
之类的命令,日志输出直接流式传输到您的本地终端。远程计划和应用使用来自相关远程工作区的变量值。
您也可以将 TACOS 与本地操作一起使用,其中仅状态存储在 TACOS 远程后端中。
命令支持
功能实现可能因不同的 TACOS 而异。
远程后端支持以下 OpenTofu 命令
apply
console
destroy
fmt
get
graph
import
init
output
plan
providers
show
state
(支持所有子命令:list、mv、pull、push、rm、show)taint
untaint
validate
version
workspace
工作区
远程后端可以与单个远程工作区一起使用,也可以与多个类似命名的远程工作区 (例如 networking-dev
和 networking-prod
) 一起使用。后端配置的 workspaces
块决定了它使用哪种模式
-
要使用单个远程工作区,请将
workspaces.name
设置为远程工作区的完整名称 (例如networking-prod
)。 -
要使用多个远程工作区,请将
workspaces.prefix
设置为所有所需远程工作区名称中使用的前缀。例如,将prefix = "networking-"
设置为使用名称类似networking-dev
和networking-prod
的远程工作区。这在将单个 OpenTofu 配置中使用的多个 OpenTofu CLI 工作区 映射到多个远程工作区时非常有用。
后端配置需要 name
或 prefix
。省略两者或同时设置两者会导致配置错误。
如果您在运行 tofu init
时存在先前状态,并且相应的远程工作区为空或不存在,OpenTofu 将创建工作区并相应地更新远程状态。但是,如果您的工作区需要变量或特定版本的 OpenTofu 才能进行远程操作,我们建议您在对它们执行任何远程操作之前在 TACOS 上创建远程工作区。
工作区名称
OpenTofu 使用没有公共前缀的简短名称在命令行上与工作区进行交互。例如,如果 prefix = "networking-"
,请使用 tofu workspace select prod
切换到当前配置内的 OpenTofu CLI 工作区 prod
。但是,针对该 OpenTofu CLI 工作区的远程 OpenTofu 操作 (例如 plan
和 apply
) 将在远程工作区 networking-prod
中进行。
因此,terraform.workspace
插值表达式产生的结果不同,具体取决于远程工作区是否配置为本地或远程执行操作。例如,在名为 networking-prod
的远程工作区中,该工作区使用 prefix = "networking-"
创建,该表达式将产生以下结果
- 对于本地操作,
terraform.workspace
=prod
- 对于远程操作,
terraform.workspace
=networking-prod
示例配置
我们建议省略配置中的令牌,而是使用 tofu login
或在 CLI 配置文件 中手动配置 credentials
。
基本配置
# Using a single workspace:
terraform {
backend "remote" {
hostname = "app.example.io"
organization = "company"
workspaces {
name = "my-app-prod"
}
}
}
# Using multiple workspaces:
terraform {
backend "remote" {
hostname = "app.example.io"
organization = "company"
workspaces {
prefix = "my-app-"
}
}
}
使用 CLI 输入
# main.tf
terraform {
required_version = "~> 0.12.0"
backend "remote" {}
}
后端配置文件
# config.remote.tfbackend
workspaces { name = "workspace" }
hostname = "app.example.io"
organization = "company"
使用后端文件运行 tofu init
tofu init -backend-config=config.remote.tfbackend
数据源配置
data "terraform_remote_state" "foo" {
backend = "remote"
config = {
organization = "company"
workspaces = {
name = "workspace"
}
}
}
配置变量
我们建议使用环境变量来提供凭据和其他敏感数据。如果在配置中使用 -backend-config
或直接硬编码这些值,OpenTofu 会将这些值包含在 .terraform
子目录和计划文件中。有关详细信息,请参阅 凭据和敏感数据。
以下配置选项受支持
-
hostname
- (必填) 要连接到的远程后端主机名。 -
organization
- (必填) 包含目标工作区(s) 的组织名称。 -
token
- (可选) 用于对远程后端进行身份验证的令牌。我们建议省略配置中的令牌,而是使用tofu login
或在 CLI 配置文件 中手动配置credentials
。 -
workspaces
- (必填) 指定要使用的远程工作区(s) 的块。workspaces
块支持以下键name
- (可选) 一个远程工作区的完整名称。当配置时,只能使用默认工作区。此选项与prefix
冲突。prefix
- (可选) 用于一个或多个远程工作区名称的前缀,所有这些工作区都可以使用此配置。完整的 workspace 名称为 TACOS 中使用,简短名称 (减去前缀) 用于 OpenTofu CLI workspace 的命令行。如果省略,只能使用默认工作区。此选项与name
冲突。
配置从另一个远程工作区检索状态的 terraform_remote_state
数据源时,必须使用 name
键。prefix
键仅用于配置远程后端的实例。
命令行参数
对于包含 backend "remote"
块的配置,对 OpenTofu 状态进行本地修改然后将其推送到远程工作区的命令接受以下选项来修改此行为
-
-ignore-remote-version
- 覆盖检查本地和远程 OpenTofu 版本是否一致,即使存在不匹配也让操作继续进行。通常,状态修改操作需要使用与远程工作区设置中选择的 OpenTofu 版本兼容的本地 OpenTofu CLI 版本。这是为了避免本地操作创建工作区的远程执行环境无法解码的新状态快照。
覆盖此检查会导致远程工作区无法完成远程操作,因此我们建议不要使用此选项。
使用 .terraformignore 从上传中排除文件
在 CLI 驱动的运行中执行远程 plan
或 apply
时,您的配置目录的存档将上传到 TACOS。您可以通过配置目录根目录下的 .terraformignore
文件来定义要忽略的路径。如果此文件不存在,则存档默认会排除以下内容
.git/
目录.terraform/
目录 (不包括.terraform/modules
)
.terraformignore
文件可以包含规则,就像在 .gitignore
文件 中包含规则一样
- 注释 (以
#
开头) 或空白行将被忽略 - 使用正斜杠
/
结束模式以指定目录 - 使用感叹号
!
开头来否定模式
请注意,与 .gitignore
不同,仅考虑配置目录根目录下的 .terraformignore
。