跳至主要内容

后端类型:oss

将状态存储为给定存储桶中给定键的值,存储在 阿里云 OSS 上。此后端还支持通过 阿里云表格存储 进行状态锁定和一致性检查,可以通过将 tablestore_table 字段设置为现有的 TableStore 表名称来启用。

此后端支持通过 TableStore 进行 状态锁定

示例配置

代码块
terraform {
backend "oss" {
bucket = "bucket-for-tofu-state"
prefix = "path/mystate"
key = "version-1.tfstate"
region = "cn-beijing"
tablestore_endpoint = "https://tofu-remote.cn-hangzhou.ots.aliyuncs.com"
tablestore_table = "statelock"
}
}

假设我们有一个 OSS 存储桶 名为 bucket-for-tofu-state,一个 OTS 实例 名为 tofu-remote,以及一个 OTS 表格存储 名为 statelock。OpenTofu 状态将写入文件 path/mystate/version-1.tfstate 中。TableStore 必须具有名为 LockID 的主键,其类型为 String

数据源配置

要使用其他配置中的 OSS 远程状态,请使用 terraform_remote_state 数据源

代码块
terraform {
backend "oss" {
bucket = "remote-state-dns"
prefix = "mystate/state"
key = "terraform.tfstate"
region = "cn-beijing"
}
}

terraform_remote_state 数据源将返回所引用远程状态中定义的所有根输出,例如输出可能如下所示

代码块
data "terraform_remote_state" "network" {
backend = "oss"
config = {
bucket = "remote-state-dns"
key = "terraform.tfstate"
prefix = "mystate/state"
region = "cn-beijing"
}
outputs = {}
workspace = "default"
}

配置变量

支持以下配置选项或环境变量

  • access_key - (可选)阿里云访问密钥。它支持环境变量 ALICLOUD_ACCESS_KEYALICLOUD_ACCESS_KEY_ID

  • secret_key - (可选)阿里云密钥。它支持环境变量 ALICLOUD_SECRET_KEYALICLOUD_ACCESS_KEY_SECRET

  • security_token - (可选)STS 访问令牌。它支持环境变量 ALICLOUD_SECURITY_TOKEN

  • ecs_role_name - (可选,0.12.14+ 可用)附加到 ECS 实例上的 RAM 角色名称,用于 API 操作。您可以在阿里云控制台的“访问控制”部分中检索此名称。

  • region - (可选)OSS 存储桶的区域。它支持环境变量 ALICLOUD_REGIONALICLOUD_DEFAULT_REGION

  • endpoint - (可选)OSS API 的自定义端点。它支持环境变量 ALICLOUD_OSS_ENDPOINTOSS_ENDPOINT

  • bucket - (必需)OSS 存储桶的名称。

  • prefix - (可选)状态文件将存储在其中的路径目录。默认设置为“env:”。

  • key - (可选)状态文件的名称。默认为 terraform.tfstate

  • tablestore_endpoint / ALICLOUD_TABLESTORE_ENDPOINT - (可选)TableStore API 的自定义端点。

  • tablestore_table - (可选)用于状态锁定和一致性的 TableStore 表。该表必须具有名为 LockID 的主键,其类型为 String

  • sts_endpoint - (可选,1.0.11+ 可用)AliCloud 安全令牌服务 (STS) API 的自定义端点。它支持环境变量 ALICLOUD_STS_ENDPOINT

  • encrypt - (可选)是否启用状态文件的服务器端加密。如果为真,OSS 将使用“AES256”加密算法对状态文件进行加密。

  • acl - (可选)对象 ACL 要应用于状态文件。

  • shared_credentials_file - (可选,0.12.8+ 可用)这是共享凭据文件的路径。它也可以从 ALICLOUD_SHARED_CREDENTIALS_FILE 环境变量中获取。如果未设置此文件并且指定了配置文件,则将使用 ~/.aliyun/config.json

  • profile - (可选,0.12.8+ 可用)这是在共享凭据文件中设置的阿里云配置文件名称。它也可以从 ALICLOUD_PROFILE 环境变量中获取。

  • assume_role_role_arn - (可选,从 1.1.0 版本开始可用) 要假设的角色的 ARN。如果 ARN 设置为空字符串,则不会执行角色切换。它支持环境变量 ALICLOUD_ASSUME_ROLE_ARN。OpenTofu 使用提供的凭证在指定账户上执行配置。

  • assume_role_policy - (可选,从 1.1.0 版本开始可用) 用于应用于临时凭据的更严格的策略。这为您提供了一种进一步限制生成的临时安全凭据权限的方法。您不能使用此策略授予超出所假设角色权限的权限。

  • assume_role_session_name - (可选,从 1.1.0 版本开始可用) 假设角色时使用的会话名称。如果省略,则将 'tofu' 传递给 AssumeRole 调用作为会话名称。它支持环境变量 ALICLOUD_ASSUME_ROLE_SESSION_NAME

  • assume_role_session_expiration - (可选,从 1.1.0 版本开始可用) 假设角色的已建立会话过期的时间。有效值范围:[900-3600] 秒。默认为 3600(在这种情况下,阿里云使用其自己的默认值)。它支持环境变量 ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION

  • assume_role - (从 1.1.0 版本开始弃用,在 0.12.6 版本中可用) 如果提供角色 ARN,将尝试使用提供的凭据假设此角色。当指定 assume_role_role_arn 时,它将被忽略。

    已弃用,改用扁平化的 assume_role_* 选项

    • role_arn - (必需) 要假设的角色的 ARN。如果 ARN 设置为空字符串,则不会执行角色切换。它支持环境变量 ALICLOUD_ASSUME_ROLE_ARN。OpenTofu 使用提供的凭证在指定账户上执行配置。

    • policy - (可选) 用于应用于临时凭据的更严格的策略。这为您提供了一种进一步限制生成的临时安全凭据权限的方法。您不能使用此策略授予超出所假设角色权限的权限。

    • session_name - (可选) 假设角色时使用的会话名称。如果省略,则将 'tofu' 传递给 AssumeRole 调用作为会话名称。它支持环境变量 ALICLOUD_ASSUME_ROLE_SESSION_NAME

    • session_expiration - (可选) 假设角色的已建立会话过期的时间。有效值范围:[900-3600] 秒。默认为 3600(在这种情况下,阿里云使用其自己的默认值)。它支持环境变量 ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION