资讯动态

terraform-provider-aws 实战:使用 aws_batch_scheduling_policy 数据源查询 AWS Batch 调度策略详情

发布时间:2026/9/18 1:52:43 来源:尧图企业网站定制
terraform-provider-aws 实战使用 aws_batch_scheduling_policy 数据源查询 AWS Batch 调度策略详情【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-awsaws_batch_scheduling_policy是 HashiCorp AWS Provider 为 AWS Batch 服务提供的只读数据源它允许 Terraform 配置通过调度策略的 ARN 直接读取其名称、标签与公平份额fair share调度策略等详情。本指南以 数据源官方文档 为主线结合本仓库internal/service/batch下的真实源码与测试讲解该数据源的参数、返回属性、底层查找链路以及如何与aws_batch_scheduling_policy资源、aws_batch_job_queue作业队列协同使用。读完本文你将能够准确查询调度策略全部信息并避开文档与实现之间的字段命名陷阱。数据源是什么为什么需要它AWS Batch 的调度策略Scheduling Policy用于在作业队列Job Queue中按公平份额fair share机制分配 vCPU 资源例如为不同团队或不同作业设置权重因子与保留计算量。调度策略本身通过 ARN 唯一标识且通常与作业队列绑定使用。在 Terraform 中当你需要复用他人或既有基础设施创建的调度策略 ARN读取其配置详情在模块之间传递调度策略信息避免硬编码 ARN 与名称为现有调度策略补充标签、权重等数据做编排决策就可以使用aws_batch_scheduling_policy数据源。它是一个典型的单资源查找型数据源与aws_batch_job_queue、aws_batch_job_definition数据源并列通过 ARN 精确读取一个调度策略的全部只读属性。基本用法一个 ARN 查回全部详情数据源的核心用法非常简单只需在arn参数中传入调度策略的 ARNdata aws_batch_scheduling_policy test { arn arn:aws:batch:us-east-1:012345678910:scheduling-policy/example }数据源执行后可以通过data.aws_batch_scheduling_policy.test引用其导出属性例如output policy_name { value data.aws_batch_scheduling_policy.test.name } output compute_reservation { value data.aws_batch_scheduling_policy.test.fair_share_policy[0].compute_reservation }在真实配置中ARN 通常直接取自资源属性从而构成先创建、后查询的完整闭环data aws_batch_scheduling_policy test { arn aws_batch_scheduling_policy.test.arn }这一用法与本仓库的数据源验收测试完全一致也是官方生成的测试模板中的标准写法。参数Argument Reference数据源支持的参数如下参数是否必填说明arn必填要查询的调度策略的 ARN。region可选调度策略所属的 AWS 区域默认使用 Provider 配置中的区域。从源码看数据源 Schema 中arn的类型为schema.TypeString且Required: true是唯一的必填参数region参数由 Provider 层统一提供用于覆盖默认区域适合在多区域场景下显式指定。返回属性Attribute Reference除上述参数外数据源导出以下只读属性属性类型说明fair_share_policy列表公平份额策略块包含compute_reservation、share_decay_seconds、share_distribution三个子属性详见下文。name字符串调度策略的名称。tagsMap调度策略上的标签键值对。fair_share_policy 块fair_share_policy是一个列表TypeList块在 数据源实现 中所有子字段均为Computed: true即只读。其子属性包括compute_reservation整数为尚未使用的公平份额标识符预留的最大 vCPU 比例值。对应 AWS APIFairsharePolicy中的computeReservation。share_decay_seconds整数用于计算各公平份额标识符公平份额百分比的时间周期单位为秒。对应 AWS API 的shareDecaySeconds。share_distribution集合一个或多个份额分布块为公平份额标识符定义权重。share_distribution 块share_distribution是一个集合TypeSet块每个元素包含share_identifier字符串公平份额标识符或标识符前缀。weight_factor浮点数该公平份额标识符的权重因子。一个必须注意的字段命名陷阱细心的读者会发现本数据源文档中fair_share_policy块内的第二个字段写作share_delay_seconds但源码中实际使用的属性名是share_decay_seconds见 数据源实现 与 资源实现。这与 AWS Batch API 的ShareDecaySeconds字段对应是官方语义decay即衰减/衰退。也就是说在 Terraform 配置中引用该属性时应使用fair_share_policy[0].share_decay_seconds如本仓库测试 scheduling_policy_data_source_test.go 所示而非文档字面写的share_delay_seconds。文档中的share_delay_seconds是笔误实际以源码 Schema 为准。底层实现一次 Describe 调用 单结果断言数据源的读取逻辑非常精简全部实现在 dataSourceSchedulingPolicyRead 中核心调用链如下通过meta.(*conns.AWSClient).BatchClient(ctx)获取 AWS Batch 客户端调用findSchedulingPolicyByARN构造DescribeSchedulingPoliciesInput{Arns: []string{arn}}发起 API 查询见 scheduling_policy.go结果经tfresource.AssertSingleValueResult断言必须且只能命中一个调度策略否则返回SingularDataSourceFindError这正是单资源数据源的标准语义见 tfresource 包将 ARN 写入资源 IDd.SetId再依次填充fair_share_policy通过flattenFairsharePolicy将 AWS 侧结构展开为 Terraform 属性、name通过setTagsOut输出标签。flattenFairsharePolicyscheduling_policy.go负责把 API 返回的FairsharePolicy对象转换为 Terraform 状态结构其中share_distribution被展开为share_identifier与weight_factor组成的元素列表。这套实现同时被资源aws_batch_scheduling_policy的 Read 函数复用因此数据源与资源在读取逻辑上保持完全一致——这也是本仓库中数据源与资源成对开发的常见模式。实战组合资源 数据源 作业队列调度策略的价值体现在与作业队列的绑定上。以下是一个完整的组合示例先创建调度策略资源再用数据源读取其信息最后挂载到aws_batch_job_queueresource aws_batch_scheduling_policy example { name example fair_share_policy { compute_reservation 1 share_decay_seconds 3600 share_distribution { share_identifier A1* weight_factor 0.1 } share_distribution { share_identifier A2 weight_factor 0.2 } } tags { Name Example Batch Scheduling Policy } } data aws_batch_scheduling_policy example { arn aws_batch_scheduling_policy.example.arn } resource aws_batch_job_queue example { name example state ENABLED priority 1 compute_environments [ aws_batch_compute_environment.example.arn, ] scheduling_policy_arn data.aws_batch_scheduling_policy.example.arn }从 job_queue.go 可以看到scheduling_policy_arn会在创建作业队列时通过input.SchedulingPolicyArn传给 AWS API更新时若该字段发生变化会一并触发UpdateJobQueue调用见 job_queue.go。值得注意的是作业队列一旦绑定调度策略AWS 侧不允许直接移除——job_queue.go 中对此场景显式抛出 cannot remove the fair share scheduling policy 错误这在使用时需要特别注意。参数取值边界来自资源源码虽然数据源只读但其返回的值来源于同名资源因此理解资源的取值约束有助于判断数据源返回值的语义。在 资源 Schema 中compute_reservation取值范围0 ~ 99share_decay_seconds取值范围0 ~ 604800即最长 7 天share_distribution最多 500 个元素对应 AWS 限制单个作业队列中最多 500 个活跃公平份额标识符weight_factor取值范围0.0001 ~ 999.9999share_identifier通过validShareIdentifier校验最多 255 个字母数字字符最后一个字符可以是*通配符前缀。上述校验规则定义在 validate.go并有对应的单元测试验证边界行为见 validate_test.go例如sample*合法、smple非法、长度超过 255 非法。如何验证数据源行为测试用例解读本仓库为数据源编写了验收测试 TestAccBatchSchedulingPolicyDataSource_basic测试流程可作为理解数据源行为的参考先创建名为tf_acc_test_*的调度策略资源配置compute_reservation 1、share_decay_seconds 3600以及A1*权重 0.1、A2权重 0.2两个份额分布数据源通过arn aws_batch_scheduling_policy.test.arn读取该策略使用TestCheckResourceAttrPair逐一断言数据源的arn、fair_share_policy.#、fair_share_policy.0.compute_reservation、fair_share_policy.0.share_decay_seconds、fair_share_policy.0.share_distribution.#、name与资源完全一致通过statecheck.ExpectKnownValue断言无标签时tags为空 Map。该测试同时印证了数据源的返回内容与资源创建时的配置是一一对应的你可以放心地用数据源去审计既有调度策略的真实配置。小结aws_batch_scheduling_policy数据源是本仓库 Batch 服务模块中一个典型的ARN 查询型只读数据源用法极简只传arn即可获得name、tags与完整的fair_share_policy详情实现可靠底层一次DescribeSchedulingPolicies调用 单结果断言保证查询结果唯一且准确联动清晰与aws_batch_scheduling_policy资源共享读取逻辑并能直接为aws_batch_job_queue.scheduling_policy_arn提供值注意命名文档中的share_delay_seconds与源码实际属性名share_decay_seconds不一致编写配置时请以源码 Schema即share_decay_seconds为准。如需进一步了解资源的创建、更新、删除与导入能力可参考资源文档及 scheduling_policy.go 中的完整生命周期实现。【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价