后端类型: s3
将状态存储为给定 Amazon S3 上给定存储桶中的给定密钥。此后端还支持通过 Dynamo DB 进行状态锁定和一致性检查,可以通过将 dynamodb_table
字段设置为现有的 DynamoDB 表名称来启用。单个 DynamoDB 表可用于锁定多个远程状态文件。OpenTofu 生成的密钥名称包含 bucket
和 key
变量的值。
强烈建议您在 S3 存储桶上启用 存储桶版本控制,以便在意外删除和人为错误的情况下恢复状态。
示例配置
terraform {
backend "s3" {
bucket = "mybucket"
key = "path/to/my/key"
region = "us-east-1"
}
}
假设我们已创建了一个名为 mybucket
的存储桶。OpenTofu 状态写入密钥 path/to/my/key
。
请注意,对于访问凭据,我们建议使用 部分配置。
S3 存储桶权限
OpenTofu 需要在目标后端存储桶上具有以下 AWS IAM 权限
s3:ListBucket
在arn:aws:s3:::mybucket
上s3:GetObject
在arn:aws:s3:::mybucket/path/to/my/key
上s3:PutObject
在arn:aws:s3:::mybucket/path/to/my/key
上s3:DeleteObject
在arn:aws:s3:::mybucket/path/to/my/key
上
这在以下 AWS IAM 语句中可见
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::mybucket"
},
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"],
"Resource": "arn:aws:s3:::mybucket/path/to/my/key"
}
]
}
AWS 可以使用附加到用户/组/角色的 IAM 策略(如上面的示例)或附加到存储桶对象的资源策略(看起来类似但还需要一个 Principal
来指示哪个实体具有这些权限)来控制对 S3 存储桶的访问。有关更多详细信息,请参阅 Amazon 有关 S3 访问控制 的文档。
DynamoDB 表权限
如果您使用状态锁定,OpenTofu 将需要对 DynamoDB 表 (arn:aws:dynamodb:::table/mytable
) 具有以下 AWS IAM 权限
dynamodb:DescribeTable
dynamodb:GetItem
dynamodb:PutItem
dynamodb:DeleteItem
这在以下 AWS IAM 语句中可见
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dynamodb:DescribeTable",
"dynamodb:GetItem",
"dynamodb:PutItem",
"dynamodb:DeleteItem"
],
"Resource": "arn:aws:dynamodb:*:*:table/mytable"
}
]
}
数据源配置
要在另一个配置中使用 S3 远程状态,请使用 terraform_remote_state
数据源。
data "terraform_remote_state" "network" {
backend = "s3"
config = {
bucket = "tofu-state-prod"
key = "network/terraform.tfstate"
region = "us-east-1"
}
}
terraform_remote_state
数据源将返回引用远程状态中定义的所有根模块输出(但不会返回任何嵌套模块的输出,除非它们在根目录中被显式输出)。示例输出可能如下所示
data.terraform_remote_state.network:
id = 2016-10-29 01:57:59.780010914 +0000 UTC
addresses.# = 2
addresses.0 = 52.207.220.222
addresses.1 = 54.196.78.166
backend = s3
config.% = 3
config.bucket = tofu-state-prod
config.key = network/terraform.tfstate
config.region = us-east-1
elb_address = web-elb-790251200.us-east-1.elb.amazonaws.com
public_subnet_id = subnet-1e05dd33
配置
此后端需要配置 AWS 区域和 S3 状态存储。其他配置(如启用 DynamoDB 状态锁定)是可选的。
凭据和共享配置
我们建议使用环境变量来提供凭据和其他敏感数据。如果您使用 -backend-config
或直接在配置中硬编码这些值,OpenTofu 将在 .terraform
子目录和计划文件中包含这些值。有关详细信息,请参阅 凭据和敏感数据。
需要以下配置
region
- (必需) S3 存储桶和 DynamoDB 表 (如果使用) 的 AWS 区域。这也可以从AWS_DEFAULT_REGION
和AWS_REGION
环境变量中获取。
以下配置是可选的
access_key
- (可选) AWS 访问密钥。如果配置,还必须配置secret_key
。这也可以从AWS_ACCESS_KEY_ID
环境变量、AWS 共享凭据文件 (例如~/.aws/credentials
) 或 AWS 共享配置文件 (例如~/.aws/config
) 中获取。secret_key
- (可选)AWS 访问密钥。如果已配置,还必须配置access_key
。也可以从AWS_SECRET_ACCESS_KEY
环境变量、AWS 共享凭据文件(例如~/.aws/credentials
)或 AWS 共享配置文件(例如~/.aws/config
)中获取。iam_endpoint
- (可选)**已弃用** AWS Identity and Access Management (IAM) API 的自定义端点。也可以从AWS_IAM_ENDPOINT
环境变量中获取。max_retries
- (可选)AWS API 请求在可重试失败时重试的最大次数。默认值为 5。retry_mode
- (可选)指定重试的尝试方式。有效值为standard
和adaptive
。也可以从AWS_RETRY_MODE
环境变量中获取。profile
- (可选)AWS 共享凭据文件(例如~/.aws/credentials
)或 AWS 共享配置文件(例如~/.aws/config
)中要用于凭据和/或配置的 AWS 配置文件名称。也可以从AWS_PROFILE
环境变量中获取。shared_credentials_file
- (可选)**已弃用** AWS 共享凭据文件的路径。默认值为~/.aws/credentials
。shared_credentials_files
- (可选)AWS 共享凭据文件路径的列表。默认值为~/.aws/credentials
。也可以从AWS_SHARED_CREDENTIALS_FILE
环境变量中获取。shared_config_files
- (可选)AWS 共享配置文件路径的列表。默认值为~/.aws/config
。也可以从AWS_SHARED_CONFIG_FILE
环境变量中获取。skip_s3_checksum
- (可选)上传 S3 对象时,在输入中不包含校验和。这对不支持校验和验证的非 AWS S3 API 有用。skip_credentials_validation
- (可选)跳过通过 STS API 进行的凭据验证。skip_region_validation
- (可选)跳过对提供的区域名称的验证。skip_metadata_api_check
- (可选)跳过使用 EC2 元数据 API。skip_requesting_account_id
- (可选)跳过请求账户 ID。这对没有 IAM、STS API 或元数据 API 的 AWS API 实现有用。sts_endpoint
- (可选)**已弃用** AWS Security Token Service (STS) API 的自定义端点。也可以从AWS_STS_ENDPOINT
环境变量中获取。sts_region
- (可选)STS 的 AWS 区域。如果未设置,AWS 将对 STS 使用与其他非 STS 操作相同的区域。token
- (可选)多因素身份验证 (MFA) 令牌。也可以从AWS_SESSION_TOKEN
环境变量中获取。allowed_account_ids
(可选):允许的 AWS 账户 ID 列表,用于防止意外破坏实时环境。此选项与forbidden_account_ids
冲突。forbidden_account_ids
(可选):禁止的 AWS 账户 ID 列表,用于防止意外破坏实时环境。此选项与allowed_account_ids
冲突。custom_ca_bundle
- 包含自定义根证书和中间证书的文件。也可以使用AWS_CA_BUNDLE
环境变量进行配置。ec2_metadata_service_endpoint
- 要使用的 EC2 元数据服务 (IMDS) 端点的地址。也可以从AWS_EC2_METADATA_SERVICE_ENDPOINT
环境变量中获取。ec2_metadata_service_endpoint_mode
- 与元数据服务通信时要使用的模式。有效值为IPv4
和IPv6
。也可以从AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE
环境变量中获取。http_proxy
- (可选)访问 AWS API 时要使用的 HTTP 代理的地址。也可以从HTTP_PROXY
环境变量中获取。https_proxy
- (可选)访问 AWS API 时要使用的 HTTPS 代理的地址。也可以从HTTPS_PROXY
环境变量中获取。no_proxy
- (可选)以逗号分隔的值,指定访问 AWS API 时应从代理中排除的主机。也可以从NO_PROXY
环境变量中获取。更多详细信息,请参见 此处。insecure
- (可选)显式允许后端执行“不安全”的 SSL 请求;默认值为false
。use_dualstack_endpoint
- (可选)解析具有 DualStack 功能的端点。use_fips_endpoint
- (可选)解析具有 FIPS 功能的端点。
自定义 AWS API 端点
可选的 endpoints
参数包含以下选项
s3
- (可选)使用此选项设置 AWS S3 API 的自定义端点 URL。也可以从AWS_ENDPOINT_URL_S3
环境变量或已弃用的环境变量AWS_S3_ENDPOINT
中获取。iam
- (可选)使用此选项设置 AWS IAM API 的自定义端点 URL。也可以从AWS_ENDPOINT_URL_IAM
环境变量或已弃用的环境变量AWS_IAM_ENDPOINT
中获取。sts
- (可选)使用此选项设置 AWS STS API 的自定义端点 URL。也可以从AWS_ENDPOINT_URL_STS
环境变量或已弃用的环境变量AWS_STS_ENDPOINT
中获取。dynamodb
- (可选)使用此选项设置 AWS DynamoDB API 的自定义端点 URL。也可以从AWS_ENDPOINT_URL_DYNAMODB
环境变量或已弃用的环境变量AWS_DYNAMODB_ENDPOINT
中获取。
terraform {
backend "s3" {
endpoints {
dynamodb = "http://localhost:4569"
s3 = "http://localhost:4572"
}
}
}
假设角色配置
假设 IAM 角色是可选的,可以通过两种方式进行配置。首选方式是使用 assume_role
参数,另一种方式已弃用。
assume_role
参数包含以下参数
role_arn
- (必填)要假设的 IAM 角色的 Amazon 资源名称 (ARN)。duration
- (可选)指定单个凭据的有效期。这些凭据会自动续期,续期期限由 AWS 账户定义。持续时间应以<hours>h<minutes>m<seconds>s
的格式指定,每个单位都是可选的。例如,一个半小时可以表示为1h30m
或90m
。持续时间必须在 15 分钟 (15m) 到 12 小时 (12h) 的范围内。external_id
- (可选)假设角色时要使用的外部标识符。policy
- (可选)IAM 策略的 JSON 表示形式,用于进一步限制要假设的 IAM 角色的权限。policy_arns
- (可选)要假设的 IAM 角色的 IAM 策略的 Amazon 资源名称 (ARN) 集,用于进一步限制权限。session_name
- (可选)假设角色时要使用的会话名称。tags
- (可选)要与假设的角色会话关联的标记映射。transitive_tag_keys
- (可选)要传递到任何后续会话的假设角色会话的标记键集。
以下顶级参数已弃用
assume_role_duration_seconds
- (可选)限制假设角色会话持续时间的秒数。请使用assume_role.duration
代替。assume_role_policy
- (可选)IAM 策略 JSON,用于描述进一步限制要假设的 IAM 角色的权限。请使用assume_role.policy
代替。assume_role_policy_arns
- (可选)IAM 策略的 Amazon 资源名称 (ARN) 集,用于描述进一步限制要假设的 IAM 角色的权限。请使用assume_role.policy_arns
代替。assume_role_tags
- (可选)假设角色会话标记的映射。请使用assume_role.tags
代替。assume_role_transitive_tag_keys
- (可选)传递到任何后续会话的假设角色会话标记键集。请使用assume_role.transitive_tag_keys
代替。external_id
- (可选)假设角色时要使用的外部标识符。请使用assume_role.external_id
代替。role_arn
- (可选)要假设的 IAM 角色的 Amazon 资源名称 (ARN)。请使用assume_role.role_arn
代替。session_name
- (可选)假设角色时要使用的会话名称。请使用assume_role.session_name
代替。
terraform {
backend "s3" {
bucket = "mybucket"
key = "my/key.tfstate"
region = "us-east-1"
assume_role = {
role_arn = "arn:aws:iam::ACCOUNT-ID:role/Opentofu"
}
}
}
使用 Web 身份配置假设角色
以下 assume_role_with_web_identity
配置块是可选的
role_arn
- (必填)要假设的 IAM 角色的 Amazon 资源名称 (ARN)。也可以使用AWS_ROLE_ARN
环境变量进行设置。duration
- (可选)单个凭据的有效期。凭据会自动续期,直到 AWS 账户定义的最大期限。以<hours>h<minutes>m<seconds>s
的格式指定,任何单位都是可选的。例如,一个半小时可以指定为1h30m
或90m
。必须在 15 分钟 (15m) 到 12 小时 (12h) 之间。policy
- (可选)IAM 策略 JSON,用于描述进一步限制要假设的 IAM 角色的权限。policy_arns
- (可选)IAM 策略的 Amazon 资源名称 (ARN) 集,用于描述进一步限制要假设的 IAM 角色的权限。session_name
- (可选)假设角色时要使用的会话名称。也可以使用AWS_ROLE_SESSION_NAME
环境变量进行设置。web_identity_token
- (可选)来自 OpenID Connect (OIDC) 或 OAuth 提供者的 Web 身份令牌的值。web_identity_token
或web_identity_token_file
之一必填。web_identity_token_file
- (可选)包含来自 OpenID Connect (OIDC) 或 OAuth 提供者的 Web 身份令牌的文件。web_identity_token_file
或web_identity_token
之一必填。也可以使用AWS_WEB_IDENTITY_TOKEN_FILE
环境变量进行设置。
terraform {
backend "s3" {
bucket = "mybucket"
key = "my/key.tfstate"
region = "us-east-1"
assume_role_with_web_identity = {
role_arn = "arn:aws:iam::ACCOUNT-ID:role/Opentofu"
web_identity_token = "<token value>"
}
}
}
可以通过提供策略来限制假设的角色。
terraform {
backend "s3" {
bucket = "mybucket"
key = "my/key.tfstate"
region = "us-east-1"
assume_role_with_web_identity = {
role_arn = "arn:aws:iam::ACCOUNT-ID:role/Opentofu"
web_identity_token = "<token value>"
policy = <<-JSON
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::mybucket/*",
"arn:aws:s3:::mybucket"
]
}
]
}
JSON
}
}
}
S3 状态存储
需要以下配置
bucket
- (必填)S3 存储桶的名称。key
- (必填)S3 存储桶中状态文件的路径。使用非默认 工作区 时,状态路径将为/workspace_key_prefix/workspace_name/key
(另请参见workspace_key_prefix
配置)。
以下配置是可选的
acl
- (可选)要应用于状态文件的 预定义 ACL。encrypt
- (可选)启用对状态文件的 服务器端加密。endpoint
- (可选) 已弃用 AWS S3 API 的自定义端点。 这也可以从AWS_S3_ENDPOINT
环境变量中获取。force_path_style
- (可选) 已弃用 启用路径样式 S3 URL(https://<HOST>/<BUCKET>
而不是https://<BUCKET>.<HOST>
)。 使用use_path_style
代替。use_path_style
- (可选) 启用路径样式 S3 URL(https://<HOST>/<BUCKET>
而不是https://<BUCKET>.<HOST>
)。kms_key_id
- (可选) 用于加密状态的密钥管理服务 (KMS) 密钥的 Amazon 资源名称 (ARN)。 请注意,如果指定此值,OpenTofu 将需要对该 KMS 密钥拥有kms:Encrypt
、kms:Decrypt
和kms:GenerateDataKey
权限。sse_customer_key
- (可选) 用于使用 带客户提供密钥的服务器端加密 (SSE-C) 加密状态的密钥。 这是密钥的 Base64 编码值,它必须解码为 256 位。 这也可以从AWS_SSE_CUSTOMER_KEY
环境变量中获取,由于该值的敏感性,建议这样做。 将其设置在 OpenTofu 文件内会导致它被持久化到磁盘上的terraform.tfstate
中。workspace_key_prefix
- (可选) 应用于桶内状态路径的前缀。 这仅在使用非默认工作区时相关。 默认值为env:
。
DynamoDB 状态锁定
以下配置是可选的
dynamodb_endpoint
- (可选) 已弃用 AWS DynamoDB API 的自定义端点。 这也可以从AWS_DYNAMODB_ENDPOINT
环境变量中获取。dynamodb_table
- (可选) 用于状态锁定和一致性的 DynamoDB 表的名称。 该表必须具有名为LockID
的分区键,其类型为String
。 如果未配置,状态锁定将被禁用。
多帐户 AWS 架构
一种常见的架构模式是组织使用多个独立的 AWS 帐户来隔离不同的团队和环境。 例如,“暂存”系统通常会部署到与相应的“生产”系统不同的 AWS 帐户中,以最大限度地降低暂存环境影响生产基础设施的风险,无论是通过速率限制、配置错误的访问控制还是其他意外交互。
S3 后端可以在多种不同的方式中使用,这些方式在便利性、安全性以及隔离方面做出不同的权衡。 本节描述了一种旨在在这几种权衡之间找到良好折衷方案的方法,允许使用 OpenTofu 的工作区功能 在相同配置的多个隔离部署之间方便地切换。
将本节用作您方法的起点,但请注意,您可能需要根据适用于您组织的独特标准和法规进行调整。 您还需要对这种方法进行一些调整,以考虑您组织中现有的实践,例如,如果以前使用过其他工具来管理基础设施。
OpenTofu 是一种管理工具,用于管理您的基础设施,因此理想情况下,OpenTofu 使用的基础设施应该存在于 OpenTofu 管理的基础设施之外。 这可以通过创建一个单独的管理 AWS 帐户来实现,该帐户包含人类操作员使用的用户帐户以及用于管理其他帐户的任何基础设施和工具。 将共享的管理工具与您的主要环境隔离有许多优势,例如避免在更改目标基础设施时意外损坏管理基础设施,以及降低攻击者可能滥用生产基础设施以访问(通常具有更高权限)的管理基础设施的风险。
管理帐户设置
您的管理 AWS 帐户将至少包含以下项目
- 一个或多个用于系统管理员的 IAM 用户,这些管理员将登录以维护其他帐户中的基础设施。
- 可选地,一个或多个 IAM 组 用于区分具有不同级别的其他 AWS 帐户访问权限的不同用户组。
- 一个将包含每个工作区 OpenTofu 状态文件的 S3 桶。
- 一个将用于锁定的 DynamoDB 表,以防止对单个工作区执行并发操作。
分别使用 bucket
和 dynamodb_table
参数在 S3 后端配置中为 OpenTofu 提供 S3 桶名称和 DynamoDB 表名称,并配置适当的 workspace_key_prefix
来包含随后将为此配置创建的各种工作区的状态。
环境帐户设置
为了本节的方便,术语“环境帐户”指的是内容由 OpenTofu 管理的帐户之一,与上面描述的管理帐户分开。
您的环境帐户最终将包含您自己的产品特定基础设施。 除了这个之外,它还必须包含一个或多个 IAM 角色,这些角色授予 OpenTofu 执行所需管理任务的足够权限。
委派访问权限
每个管理员将使用其在管理帐户中的 IAM 用户的凭据运行 OpenTofu。 IAM 角色委派 用于授予这些用户访问每个环境帐户中创建的角色的权限。
上面链接的 AWS 文档中涵盖了角色委派的全部细节。 最重要的细节是
- 每个角色的假设角色策略必须授予管理 AWS 帐户的访问权限,从而与管理 AWS 帐户建立信任关系,以便其用户可以假设该角色。
- 管理帐户中的用户或组也必须具有创建相反关系的策略,允许这些用户或组假设该角色。
由于管理帐户的目的是仅托管用于管理其他帐户的工具,因此将管理帐户的访问权限限制为仅假设环境帐户角色和访问 OpenTofu 状态所需的特定操作很有用。 通过阻止所有其他访问,您可以消除用户错误导致错误地在管理帐户中创建暂存或生产资源的风险。
在配置 OpenTofu 时,请使用环境变量或标准凭据文件 ~/.aws/credentials
在管理帐户中为 S3 后端和 OpenTofu 的 AWS 提供程序提供管理员用户的 IAM 凭据。
使用条件配置将不同的 assume_role
值传递给 AWS 提供程序,具体取决于所选工作区。 例如
variable "workspace_iam_roles" {
default = {
staging = "arn:aws:iam::STAGING-ACCOUNT-ID:role/OpenTofu"
production = "arn:aws:iam::PRODUCTION-ACCOUNT-ID:role/OpenTofu"
}
}
provider "aws" {
# No credentials explicitly set here because they come from either the
# environment or the global credentials file.
assume_role {
role_arn = "${var.workspace_iam_roles[terraform.workspace]}"
}
}
如果工作区 IAM 角色是集中管理的,并在许多独立的 OpenTofu 配置之间共享,则还可以通过数据源(例如 terraform_remote_state
)获取角色 ARN,以避免重复这些值。
创建和选择工作区
创建必要的对象并配置好后端后,运行 tofu init
以初始化后端并建立名为“default”的初始工作区。 此工作区不会使用,但 OpenTofu 会将其自动创建作为对不使用工作区功能的用户的一种便利。
创建一个与上面 workspace_iam_roles
变量值中给出的每个键相对应的工作区
$ tofu workspace new staging
Created and switched to workspace "staging"!
...
$ tofu workspace new production
Created and switched to workspace "production"!
...
由于 AWS 提供程序配置中的 assume_role
设置,任何对 AWS 资源的管理操作都将通过相应环境 AWS 帐户中配置的角色执行。 后端操作(例如从 S3 读取和写入状态)将直接以管理员自己的用户身份在管理帐户中执行。
$ tofu workspace select staging
$ tofu apply
...
在 Amazon EC2 中运行 OpenTofu
广泛使用 OpenTofu 进行基础设施管理的团队通常会在自动化中运行 OpenTofu,以确保一致的操作环境并限制对 OpenTofu 配置通常需要的各种秘密和其他敏感信息的访问。
在 Amazon EC2 实例上运行的自动化工具中运行 OpenTofu 时,请考虑在管理帐户中运行此实例,并使用 实例配置文件 代替上面建议的各种管理员 IAM 用户。 IAM 实例配置文件也可以通过 IAM 策略授予跨帐户委派访问权限,从而为该实例提供运行 OpenTofu 所需的访问权限。
为了隔离对不同环境帐户的访问,请为每个目标帐户使用单独的 EC2 实例,以便其访问权限可以仅限于单个帐户。
可以使用其他 AWS 计算服务(如 ECS)中的等效功能采取类似的方法。
保护对工作区状态的访问
在对前几节描述的模式进行简单实现时,所有用户都可以访问所有工作空间的读写状态。在许多情况下,需要对 S3 中的 OpenTofu 状态对象应用更精确的访问约束,例如,只允许受信任的管理员修改生产状态,或者控制包含敏感信息的读取状态。
Amazon S3 使用 IAM 策略支持基于每个对象路径的细粒度访问控制。关于 S3 访问控制机制的完整描述超出了本指南的范围,但下面显示了一个示例 IAM 策略,它只允许访问 S3 存储桶中的单个状态对象。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::myorg-tofu-states"
},
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:PutObject"],
"Resource": "arn:aws:s3:::myorg-tofu-states/myapp/production/tfstate"
}
]
}
还可以对用于锁定的 DynamoDB 表应用细粒度访问控制。当 OpenTofu 在 tofu plan
期间锁定状态时,它将完整的 state 文件作为文档存储,并将 s3 对象键设置为文档的分区键。在释放状态锁后,OpenTofu 将更新后的 state 文件的摘要置于 DynamoDB 中。该键类似于原始 state 文件的键,但以 -md5
为后缀。
以下示例显示了一个简单的 IAM 策略,允许后端操作角色执行这些操作。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect" : "Allow",
"Action" : [
"dynamodb:DeleteItem",
"dynamodb:GetItem",
"dynamodb:PutItem",
"dynamodb:Query",
"dynamodb:UpdateItem"
],
"Resource" : ["arn:aws:dynamodb:*:*:table/myorg-state-lock-table"],
"Condition" : {
"ForAllValues:StringEquals" : {
"dynamodb:LeadingKeys" : [
"myorg-tofu-states/myapp/production/tfstate", // during a state lock the full state file is stored with this key
"myorg-tofu-states/myapp/production/tfstate-md5" // after the lock is released a hash of the statefile's contents are stored with this key
]
}
}
}
]
}
有关更多详细信息,请参阅 AWS DynamoDB 细粒度锁定文档。
配置自定义 User-Agent 信息
请注意,此功能是可选的。
默认情况下,OpenTofu AWS 提供程序使用的底层 AWS 客户端使用包含有关 OpenTofu 和 AWS Go SDK 版本的信息在 User-Agent 标头中创建请求。若要在 User-Agent 标头中提供其他信息,可以设置 TF_APPEND_USER_AGENT
环境变量,其值将直接添加到 HTTP 请求中,例如:
$ export TF_APPEND_USER_AGENT="JenkinsAgent/i-12345678 BuildID/1234 (Optional Extra Information)"