后端类型: COS
将状态存储为对象,存储在给定存储桶中可配置的前缀下,位于 腾讯云对象存储 (COS)。
此后端支持 状态锁定。将您的状态存储在 COS 存储桶中需要以下权限
CreateTag
、DeleteTag
和DescribeTags
用于标签键tencentcloud-terraform-lock
Put
、Get
和Delete
用于指定存储桶的前缀的文件
警告
强烈建议您在 COS 存储桶上启用 对象版本控制,以便在意外删除和人为错误的情况下允许状态恢复。
示例配置
terraform {
backend "cos" {
region = "ap-guangzhou"
bucket = "bucket-for-tofu-state-1258798060"
prefix = "tofu/state"
}
}
假设我们已创建了一个名为 bucket-for-tofu-state-1258798060
的 COS 存储桶,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"
}
}
配置变量
警告
我们建议使用环境变量来提供凭据和其他敏感数据。如果您使用 -backend-config
或在配置中直接硬编码这些值,OpenTofu 将在 .terraform
子目录和计划文件中包含这些值。有关详细信息,请参阅 凭据和敏感数据。
支持以下配置选项或环境变量
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,允许private
和public-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