后端类型: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"
}
配置变量
我们建议使用环境变量来提供凭据和其他敏感数据。如果直接在配置中使用 -backend-config
或硬编码这些值,OpenTofu 将在 .terraform
子目录和计划文件中包含这些值。有关详细信息,请参阅 凭据和敏感数据。
支持以下配置选项或环境变量
-
access_key
- (可选)阿里云访问密钥。它支持环境变量ALICLOUD_ACCESS_KEY
和ALICLOUD_ACCESS_KEY_ID
。 -
secret_key
- (可选)阿里云密钥。它支持环境变量ALICLOUD_SECRET_KEY
和ALICLOUD_ACCESS_KEY_SECRET
。 -
security_token
- (可选)STS 访问令牌。它支持环境变量ALICLOUD_SECURITY_TOKEN
。 -
ecs_role_name
- (可选,0.12.14+ 可用)附加到 ECS 实例上的 RAM 角色名称,用于 API 操作。您可以在阿里云控制台的“访问控制”部分中检索此名称。 -
region
- (可选)OSS 存储桶的区域。它支持环境变量ALICLOUD_REGION
和ALICLOUD_DEFAULT_REGION
。 -
endpoint
- (可选)OSS API 的自定义端点。它支持环境变量ALICLOUD_OSS_ENDPOINT
和OSS_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
。
-
如果您想在自定义 OSS 终端节点中存储状态,可以指定环境变量 OSS_ENDPOINT
,例如 "oss-cn-beijing-internal.aliyuncs.com"