跳到主要内容

后端类型:远程

远程后端在所有其他 OpenTofu 后端中是独一无二的,因为它既可以存储状态快照,也可以执行 TF 自动化和协作软件 ( TACOS ) 后端的 CLI 驱动运行工作流程操作。它曾经被称为“增强型”后端。

如果您的 TACOS 提供商启用了完整的远程操作,您可以在 TACOS 运行时环境中执行诸如 tofu plantofu apply 之类的命令,日志输出直接流式传输到您的本地终端。远程计划和应用使用来自相关远程工作区的变量值。

您也可以将 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-devnetworking-prod) 一起使用。后端配置的 workspaces 块决定了它使用哪种模式

  • 要使用单个远程工作区,请将 workspaces.name 设置为远程工作区的完整名称 (例如 networking-prod)。

  • 要使用多个远程工作区,请将 workspaces.prefix 设置为所有所需远程工作区名称中使用的前缀。例如,将 prefix = "networking-" 设置为使用名称类似 networking-devnetworking-prod 的远程工作区。这在将单个 OpenTofu 配置中使用的多个 OpenTofu CLI 工作区 映射到多个远程工作区时非常有用。

后端配置需要 nameprefix。省略两者或同时设置两者会导致配置错误。

如果您在运行 tofu init 时存在先前状态,并且相应的远程工作区为空或不存在,OpenTofu 将创建工作区并相应地更新远程状态。但是,如果您的工作区需要变量或特定版本的 OpenTofu 才能进行远程操作,我们建议您在对它们执行任何远程操作之前在 TACOS 上创建远程工作区。

工作区名称

OpenTofu 使用没有公共前缀的简短名称在命令行上与工作区进行交互。例如,如果 prefix = "networking-",请使用 tofu workspace select prod 切换到当前配置内的 OpenTofu CLI 工作区 prod。但是,针对该 OpenTofu CLI 工作区的远程 OpenTofu 操作 (例如 planapply) 将在远程工作区 networking-prod 中进行。

因此,terraform.workspace 插值表达式产生的结果不同,具体取决于远程工作区是否配置为本地或远程执行操作。例如,在名为 networking-prod 的远程工作区中,该工作区使用 prefix = "networking-" 创建,该表达式将产生以下结果

  • 对于本地操作,terraform.workspace = prod
  • 对于远程操作,terraform.workspace = networking-prod

示例配置

基本配置

代码块
# 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"
}
}
}

配置变量

以下配置选项受支持

  • hostname - (必填) 要连接到的远程后端主机名。

  • organization - (必填) 包含目标工作区(s) 的组织名称。

  • token - (可选) 用于对远程后端进行身份验证的令牌。我们建议省略配置中的令牌,而是使用 tofu login 或在 CLI 配置文件 中手动配置 credentials

  • workspaces - (必填) 指定要使用的远程工作区(s) 的块。workspaces 块支持以下键

    • name - (可选) 一个远程工作区的完整名称。当配置时,只能使用默认工作区。此选项与 prefix 冲突。
    • prefix - (可选) 用于一个或多个远程工作区名称的前缀,所有这些工作区都可以使用此配置。完整的 workspace 名称为 TACOS 中使用,简短名称 (减去前缀) 用于 OpenTofu CLI workspace 的命令行。如果省略,只能使用默认工作区。此选项与 name 冲突。

命令行参数

对于包含 backend "remote" 块的配置,对 OpenTofu 状态进行本地修改然后将其推送到远程工作区的命令接受以下选项来修改此行为

  • -ignore-remote-version - 覆盖检查本地和远程 OpenTofu 版本是否一致,即使存在不匹配也让操作继续进行。

    通常,状态修改操作需要使用与远程工作区设置中选择的 OpenTofu 版本兼容的本地 OpenTofu CLI 版本。这是为了避免本地操作创建工作区的远程执行环境无法解码的新状态快照。

    覆盖此检查会导致远程工作区无法完成远程操作,因此我们建议不要使用此选项。

使用 .terraformignore 从上传中排除文件

在 CLI 驱动的运行中执行远程 planapply 时,您的配置目录的存档将上传到 TACOS。您可以通过配置目录根目录下的 .terraformignore 文件来定义要忽略的路径。如果此文件不存在,则存档默认会排除以下内容

  • .git/ 目录
  • .terraform/ 目录 (不包括 .terraform/modules)

.terraformignore 文件可以包含规则,就像在 .gitignore 文件 中包含规则一样

  • 注释 (以 # 开头) 或空白行将被忽略
  • 使用正斜杠 / 结束模式以指定目录
  • 使用感叹号 ! 开头来否定模式

请注意,与 .gitignore 不同,仅考虑配置目录根目录下的 .terraformignore