ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

terraform-provider-aws 数据源详解:aws_s3control_multi_region_access_points 查询全部多区域接入点

terraform-provider-aws 数据源详解:aws_s3control_multi_region_access_points 查询全部多区域接入点 terraform-provider-aws 数据源详解aws_s3control_multi_region_access_points 查询全部多区域接入点【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-awsaws_s3control_multi_region_access_points是 terraform-provider-aws 中用于枚举 AWS S3 Control Multi-Region Access Points多区域接入点MRAP列表的数据源。在需要盘点账户内全部 MRAP、审计其状态与区域分布、或基于动态列表批量生成配置时它比逐个查询单点数据源更加高效。读完本文你将掌握该数据源的完整参数、返回值结构、底层 AWS API 调用链以及它与aws_s3control_multi_region_access_point资源、单点数据源的协同用法。数据源是什么一次拉取账户内所有 MRAPMulti-Region Access Point 是 AWS S3 提供的一项全局能力它将分布在多个区域的多个 S3 存储桶聚合到一个全局接入点之下客户端只需使用一个主机名即可跨区域读写数据。与此对应terraform-provider-aws 在 S3 Control 服务包internal/service/s3control中同时提供了资源与数据源aws_s3control_multi_region_access_point资源负责创建、读取、删除单个 MRAP配置定义在 multi_region_access_point.goaws_s3control_multi_region_access_point数据源按名称查询单个MRAP 的详情定义在 multi_region_access_point_data_source.goaws_s3control_multi_region_access_points本数据源调用ListMultiRegionAccessPointsAPI 列出全部MRAP定义在 multi_region_access_points_data_source.go。三者配合可以覆盖创建 → 查询单个 → 枚举全部的完整使用闭环。基础用法本数据源没有任何必填参数最小配置即可拉取当前调用者账户下所有多区域接入点data aws_s3control_multi_region_access_points example {}查询结果通过access_points属性列表导出典型的消费方式是在输出或模板中遍历output mrap_names { value [for ap in data.aws_s3control_multi_region_access_points.example.access_points : ap.name] } output mrap_status { value { for ap in data.aws_s3control_multi_region_access_points.example.access_points : ap.name ap.status } }如果希望查询其他账户持有的 MRAP或指定不同的控制区域端点可以在块内传入可选参数见下节。Argument Reference两个可选参数该数据源支持以下可选参数参数类型说明account_idstring拥有这些多区域接入点的 AWS 账户 ID。省略时默认使用调用者Provider 凭据对应的账户 ID。regionstring请求被路由到的区域端点。默认使用 Provider 配置中设置的区域。account_id跨账户枚举的关键S3 Control 的绝大部分 API 都要求显式传递AccountId本数据源在 Read 实现中做了兜底处理if input.AccountId nil { input.AccountId aws.String(d.Meta().AccountID(ctx)) }即配置了account_id就用配置值未配置则回退为当前 Provider 的账户 ID。在源码的 Schema 定义中account_id还挂载了 AWS 账户 ID 格式校验器fwvalidators.AWSAccountID()见 multi_region_access_points_data_source.go因此非法格式会在 plan/apply 阶段直接报错而不是等到 AWS API 返回。region控制区域端点S3 Control 是区域化服务但 Multi-Region Access Point 相关操作存在特殊性所有 MRAP 操作都会被固定路由到 us-west-2美国西部俄勒冈区域。这一点在源码中反复出现例如资源创建时的客户端配置output, err : conn.CreateMultiRegionAccessPoint(ctx, input, func(o *s3control.Options) { // All Multi-Region Access Point actions are routed to the US West (Oregon) Region. o.Region endpoints.UsWest2RegionID })见 multi_region_access_point.go。分页列举同样如此multi_region_access_point_list.go。因此本数据源的region参数实际影响的是 S3 Control 客户端的端点解析而不是 MRAP 的数据位置——MRAP 本身是全局对象其底层存储桶分布在regions属性中列出的各个区域。Attribute Reference返回结构逐层解析除上述两个参数外数据源还导出以下属性属性类型说明access_pointslist多区域接入点列表每个元素包含下表的子属性。access_points块每个元素的字段对应源码中 multiRegionAccessPointListDataSourceModel 的模型定义字段类型说明aliasstringMRAP 的别名形如xxxxx.mrap用于生成全局访问主机名。created_atstring创建时间RFC3339 格式。namestringMRAP 名称。public_access_blocklist该 MRAP 的公共访问块配置结构见下。regionslist该 MRAP 具备数据支撑的 AWS 区域列表结构见下。statusstringMRAP 当前状态AWS 侧取值通常为READY/CREATING/DELETING等。关于created_at的格式源码模型使用timetypes.RFC3339multi_region_access_points_data_source.go与单点数据源中aws.ToTime(accessPoint.CreatedAt).Format(time.RFC3339)的转换行为multi_region_access_point_data_source.go保持一致在 HCL 中可以直接作为时间字符串使用。public_access_block块字段类型说明block_public_aclsbool是否阻止该账户下的存储桶设置公共 ACL。block_public_policybool是否阻止该账户下的存储桶设置公共桶策略。ignore_public_aclsbool是否忽略该账户下存储桶已有的公共 ACL。restrict_public_bucketsbool是否限制该账户下存储桶的公共桶策略。这四个布尔值在创建资源时默认全部为true见 multi_region_access_point.go 中的Default: true因此通过数据源查询时若看到四项均为true表示该 MRAP 沿用了默认的严格公共访问限制。regions块字段类型说明bucketstring该区域下关联的 S3 存储桶名称。bucket_account_idstring拥有该存储桶的 AWS 账户 ID支持跨账户挂载存储桶。regionstring区域名称。一个 MRAP 最多可关联 20 个区域资源定义中region的MaxItems: 20见 multi_region_access_point.goregions块即反映这些分布在不同区域的存储桶及其归属账户。源码级解析数据源背后的调用链理解该数据源的实现有助于预判其行为与适用边界。核心 Read 逻辑位于 multi_region_access_points_data_source.go调用链如下从 Provider Meta 获取 S3 Control 客户端d.Meta().S3ControlClient(ctx)将 Terraform 配置通过flex.Expand展开为ListMultiRegionAccessPointsInputAWS SDK for Go v2 的请求结构若AccountId为空则回填调用者账户 ID调用findMultiRegionAccessPoints执行列举将 AWS 返回值通过flex.Flatten回填到access_points属性并写入 State。其中findMultiRegionAccessPoints使用 SDK 官方分页器逐页拉取避免一次性加载超大响应func findMultiRegionAccessPoints(ctx context.Context, conn *s3control.Client, input *s3control.ListMultiRegionAccessPointsInput) ([]awstypes.MultiRegionAccessPointReport, error) { paginator : s3control.NewListMultiRegionAccessPointsPaginator(conn, input) var output []awstypes.MultiRegionAccessPointReport for paginator.HasMorePages() { page, err : paginator.NextPage(ctx) if err ! nil { return nil, err } output append(output, page.AccessPoints...) } return output, nil }见 multi_region_access_points_data_source.go。从源码结构看该实现基于 terraform-plugin-framework文件头FrameworkDataSource注解与采用 SDKv2 实现的单点数据源分属两代插件框架但对外暴露的 Terraform 行为一致。与相关资源的协同实战创建后立即查询官方测试的用法数据源最常见的实战场景是先创建、后枚举。仓库中的验收测试 multi_region_access_points_data_source_test.go 展示了标准姿势——通过depends_on保证 MRAP 已创建完成resource aws_s3_bucket test { bucket example-bucket force_destroy true } resource aws_s3control_multi_region_access_point test { details { name example-mrap region { bucket aws_s3_bucket.test.id } } } data aws_s3control_multi_region_access_points test { depends_on [aws_s3control_multi_region_access_point.test] }对应资源创建的最小配置见测试辅助函数 multi_region_access_point_test.go。需要提醒的是MRAP 的创建是异步的资源实现通过RequestTokenARNDescribeMultiRegionAccessPointOperation轮询等待SUCCEEDED见 multi_region_access_point.go且资源创建超时默认长达 60 分钟。若你在数据源查询时发现某 MRAP 的status仍为CREATING往往是因为绕过资源、直接在 AWS 侧创建后立刻查询所致。跨账户查询示例当需要审计其他账户的 MRAP 时显式指定account_iddata aws_s3control_multi_region_access_points shared { account_id 123456789012 } output shared_aliases { value [for ap in data.aws_s3control_multi_region_access_points.shared.access_points : ap.alias] }注意调用者的 IAM 凭据必须具备目标账户下s3control:ListMultiRegionAccessPoints的权限通常通过跨账户角色或资源策略授予。使用注意事项名称命名约束虽然数据源本身不涉及命名但了解其查询对象的命名规则有助于过滤结果。MRAP 名称要求 350 个字符不能包含下划线、大写字母或点号且不能以连字符开头或结尾具体校验见 validate.go。例如my-mrap合法My_MRAP.1非法。区域路由特性MRAP 相关操作固定路由到 us-west-2源码注释明确说明因此即使 Provider 配置在其他区域本数据源依然能正确列举全局的 MRAP 列表。结果顺序不保证官方测试注释明确指出并行运行时返回的 MRAP 顺序不可预测multi_region_access_points_data_source_test.go。若依赖顺序请使用for表达式按name或alias显式排序而非依赖列表下标。权限要求需要s3control:ListMultiRegionAccessPoints权限跨账户场景下还需要具备读取目标账户 MRAP 的授权。小结aws_s3control_multi_region_access_points是盘点 AWS 账户内全部多区域接入点的标准入口零必填参数即可枚举account_id支持跨账户access_points下嵌套的public_access_block与regions块完整覆盖了安全配置与区域分布信息。其底层基于 AWS SDK for Go v2 的分页列举实现仓库路径 internal/service/s3control/multi_region_access_points_data_source.go结合 multi_region_access_point.go 的资源实现与 multi_region_access_points_data_source_test.go 的验收用例你可以获得从创建、单点查询到全局枚举的完整 MRAP 管理方案。【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表