Terraform AWS Provider 数据源 `aws_s3_bucket_object_lock_configuration` 使用指南
2026/9/20 3:31:11 网站建设 项目流程
  • IaC
  • 云原生
  • 基础设施

【免费下载链接】terraform-provider-aws

The AWS Provider enables Terraform to manage AWS resources.

项目地址:https://gitcode.com/GitHub_Trending/te/terraform-provider-aws
点击查看免费下载

本篇技术指南以 关联文档 为核心,系统讲解 Terraform AWS Provider 中数据源aws_s3_bucket_object_lock_configuration的完整用法:从基本查询示例、全部参数与导出属性,到其基于 terraform-plugin-framework 的源码实现原理,并结合仓库内的实现与测试代码(bucket_object_lock_configuration_data_source.go、bucket_object_lock_configuration.go)深入说明其底层调用链。读完本文,你将能熟练使用该数据源读取 S3 桶的 Object Lock 配置状态,并理解其与aws_s3_bucket_object_lock_configuration资源、S3 版本控制、目录桶(S3 Express)之间的协作关系。

数据源概述

aws_s3_bucket_object_lock_configuration是一个只读数据源,用于获取 AWS S3(Simple Storage)桶的Object Lock(对象锁定)配置详细信息。它适用于以下典型场景:

  • 在配置管理、合规审计或自动化脚本中,读取某个桶是否开启了 Object Lock;
  • 读取桶上配置的默认保留规则(default_retention),包括保留模式和保留期限;
  • 在多个 Terraform 配置或模块之间共享桶的 Object Lock 状态,作为其他资源的输入。

该数据源由 S3 服务包注册,通过@FrameworkDataSource注解声明,数据源名称为aws_s3_bucket_object_lock_configuration,实现位于 bucket_object_lock_configuration_data_source.go。

示例用法

基本用法

在 Terraform 配置中声明该数据源,仅需指定桶名即可读取其 Object Lock 配置:

data "aws_s3_bucket_object_lock_configuration" "example" { bucket = "example-bucket" }

查询结果可随后通过属性引用使用,例如读取object_lock_enabledrule块中的默认保留配置等。

参数参考(Argument Reference)

必填参数

参数类型说明
bucket字符串桶的名称。

可选参数

参数类型说明
expected_bucket_owner字符串预期桶所有者的账户 ID。当桶属于其他 AWS 账户时使用,用于校验桶的实际所有者。
region字符串该数据源所管理资源的区域。默认使用 Provider 配置中设置的区域。

从源码实现看(Schema 定义),bucket被标记为Requiredexpected_bucket_ownerOptionalobject_lock_enabledrule为只读计算属性(Computed)。

属性参考(Attribute Reference)

该数据源除参数外,还导出以下属性:

属性类型说明
object_lock_enabled字符串该桶是否已启用 Object Lock 配置,值为Enabled
rule指定对象的 Object Lock 规则,详见下方 Rule 小节。

Rule

rule块支持以下属性:

属性说明
default_retention针对放置到桶中的新对象的默认 Object Lock 保留设置,详见下方 Default Retention。

Default Retention

default_retention块支持以下属性:

属性类型说明
days整数默认保留期限(天数)。
mode字符串默认 Object Lock 保留模式,合法值为GOVERNANCECOMPLIANCE
years整数默认保留期限(年数)。

源码实现原理

基于 terraform-plugin-framework 的数据源

该数据源采用 HashiCorp 的 terraform-plugin-framework 实现,数据源结构体bucketObjectLockConfigurationDataSource内嵌了framework.DataSourceWithModel,其模型字段定义如下(源码):

  • BucketExpectedBucketOwner:用户输入的参数;
  • ObjectLockEnabled:只读计算结果;
  • RuleListNestedObjectValueOf[dataBucketObjectLockConfigRuleModel]嵌套列表,其中DefaultRetention进一步嵌套DaysModeYears三个字段。

Read 流程与底层 API 调用链

数据源读取的核心逻辑位于Read方法(源码):

  1. 从配置中解析bucketexpected_bucket_owner
  2. 调用findObjectLockConfiguration(定义于 bucket_object_lock_configuration.go),该函数构造GetObjectLockConfigurationInput并调用 S3 APIGetObjectLockConfiguration,将expected_bucket_owner(若提供)一并传入请求;
  3. 将 API 返回的ObjectLockConfiguration通过flex.Flatten扁平化为数据源模型并写入状态;
  4. 当桶不存在(errCodeNoSuchBucket)或 Object Lock 配置不存在(errCodeObjectLockConfigurationNotFoundError)时,会包装为retry.NotFoundError抛出,这也是测试中期望 "couldn't find resource" 报错的来源。

目录桶(S3 Express)的特殊处理

Read方法中有一个值得注意的细节(源码):当桶名满足目录桶命名规则时,会切换到 S3 Express 专用客户端S3ExpressClient发起请求。目录桶的判断逻辑定义于 directory_bucket.go,其命名后缀匹配--x-s3模式。也就是说,该数据源同时兼容普通 S3 桶与目录桶的查询场景。

aws_s3_bucket_object_lock_configuration资源配合使用

数据源通常与同名资源配合:先用 资源文档 中的aws_s3_bucket_object_lock_configuration创建/管理 Object Lock 配置,再用本数据源读取验证。仓库中的验收测试给出了一个完整协作示例(bucket_object_lock_configuration_data_source_test.go):

resource "aws_s3_bucket" "test" { bucket = "example" object_lock_enabled = true } resource "aws_s3_bucket_object_lock_configuration" "test" { bucket = aws_s3_bucket.test.id rule { default_retention { mode = "COMPLIANCE" days = 3 } } } data "aws_s3_bucket_object_lock_configuration" "test" { bucket = aws_s3_bucket_object_lock_configuration.test.bucket }

几点实践提醒(结合资源侧文档):

  • Object Lock 依赖桶版本控制:对已有桶启用 Object Lock 前,需先通过aws_s3_bucket_versioning资源启用版本控制,必要时使用资源侧的token参数完成授权;
  • 数据源读取的是桶上当前生效的 Object Lock 配置:若桶仅开启object_lock_enabled而未配置任何rule,则返回的rule列表为空(rule.# = 0),object_lock_enabled仍为Enabled
  • 若桶既未开启 Object Lock 也未配置规则,则读取会报错(测试中表现为couldn't find resource)。

测试验证

仓库为数据源提供了三个验收测试用例(bucket_object_lock_configuration_data_source_test.go):

  1. TestAccS3BucketObjectLockConfigurationDataSource_basic:验证基本读取,断言object_lock_enabled = Enabledrule.# = 1default_retention.days = 3mode = COMPLIANCE
  2. TestAccS3BucketObjectLockConfigurationDataSource_noRule:验证桶启用了 Object Lock 但未配置规则时,返回rule.# = 0
  3. TestAccS3BucketObjectLockConfigurationDataSource_notConfigured:验证桶未配置 Object Lock 时,读取报错couldn't find resource

这些用例既印证了数据源的行为边界,也可作为你编写本地测试或排查问题的参考。

小结

aws_s3_bucket_object_lock_configuration数据源是一个轻量、只读的查询入口,用于获取 S3 桶的 Object Lock 配置详情。其参数与属性结构清晰,底层通过 S3GetObjectLockConfigurationAPI 实现,兼容普通桶与目录桶,并能与同名资源、版本控制配置无缝协作,适合在合规审计、配置校验和基础设施即代码(IaC)流程中直接引用。

  • IaC
  • 云原生
  • 基础设施

【免费下载链接】terraform-provider-aws

The AWS Provider enables Terraform to manage AWS resources.

项目地址:https://gitcode.com/GitHub_Trending/te/terraform-provider-aws
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询