跳至主要内容

后端类型: COS

将状态存储为对象,存储在给定存储桶中可配置的前缀下,位于 腾讯云对象存储 (COS)。

此后端支持 状态锁定。将您的状态存储在 COS 存储桶中需要以下权限

  • CreateTagDeleteTagDescribeTags 用于标签键 tencentcloud-terraform-lock
  • PutGetDelete 用于指定存储桶的前缀的文件

示例配置

代码块
terraform {
backend "cos" {
region = "ap-guangzhou"
bucket = "bucket-for-tofu-state-1258798060"
prefix = "tofu/state"
}
}

假设我们已创建了一个名为 bucket-for-tofu-state-1258798060COS 存储桶,OpenTofu 状态将写入文件 tofu/state/terraform.tfstate 中。

数据源配置

要在另一个配置中使用 COS 远程状态,请使用 terraform_remote_state 数据源

代码块
data "terraform_remote_state" "foo" {
backend = "cos"

config = {
region = "ap-guangzhou"
bucket = "bucket-for-tofu-state-1258798060"
prefix = "tofu/state"
}
}

配置变量

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

  • secret_id - (可选)腾讯云的密钥 ID。它支持环境变量 TENCENTCLOUD_SECRET_ID
  • secret_key - (可选)腾讯云的密钥。它支持环境变量 TENCENTCLOUD_SECRET_KEY
  • security_token - (可选)临时访问凭证的腾讯云安全令牌。它支持环境变量 TENCENTCLOUD_SECURITY_TOKEN
  • region - (可选)COS 存储桶所在的区域。它支持环境变量 TENCENTCLOUD_REGION
  • bucket - (必填)COS 存储桶的名称。您需要先手动创建它。
  • prefix - (可选)在存储桶中保存状态文件的目录。默认为“env:”。
  • key - (可选)在存储桶中保存状态文件的路径。默认为 terraform.tfstate
  • encrypt - (可选)是否启用状态文件的服务器端加密。如果为 true,COS 将使用“AES256”加密算法对状态文件进行加密。
  • acl - (可选)要应用于状态文件的对象 ACL,允许 privatepublic-read。默认为 private
  • accelerate - (可选)是否启用全局加速。默认为 false

角色假设

如果提供角色假设,OpenTofu 将尝试使用提供的凭据来假设此角色。可以通过在 cos 后端块中添加 assume_role 块来提供角色假设。

  • assume_role - (可选)assume_role 块。如果提供,OpenTofu 将尝试使用提供的凭据来假设此角色。

assume_role 块的详细信息如下

  • role_arn - (必填)要假设的角色的 ARN。它可以从 TENCENTCLOUD_ASSUME_ROLE_ARN 中获取。
  • session_name - (必填)在进行 AssumeRole 调用时使用的会话名称。它可以从 TENCENTCLOUD_ASSUME_ROLE_SESSION_NAME 中获取。
  • session_duration - (必填)在进行 AssumeRole 调用时的会话持续时间。其值范围为 0 到 43200(秒),默认为 7200 秒。它可以从 TENCENTCLOUD_ASSUME_ROLE_SESSION_DURATION 中获取。
  • policy - (可选)在进行 AssumeRole 调用时更严格的策略。其内容不能包含 principal 元素。注意:更多语法参考,请参阅:策略语法逻辑

用法

代码块
terraform {
backend "cos" {
region = "ap-guangzhou"
bucket = "bucket-for-tofu-state-{appid}"
prefix = "tofu/state"
assume_role {
role_arn = "qcs::cam::uin/xxx:roleName/yyy"
session_name = "my-session-name"
session_duration = 3600
}
}
}

此外,这些 assume_role 配置也可以通过环境变量提供。

用法

代码块
$ export TENCENTCLOUD_SECRET_ID="my-secret-id"
$ export TENCENTCLOUD_SECRET_KEY="my-secret-key"
$ export TENCENTCLOUD_REGION="ap-guangzhou"
$ export TENCENTCLOUD_ASSUME_ROLE_ARN="qcs::cam::uin/xxx:roleName/yyy"
$ export TENCENTCLOUD_ASSUME_ROLE_SESSION_NAME="my-session-name"
$ export TENCENTCLOUD_ASSUME_ROLE_SESSION_DURATION=3600
$ tofu plan