尧图精选

使用 aws_connect_hours_of_operation 数据源:查询 Amazon Connect 工作时间配置

🕒 发布时间:2026/9/18 2:14:38 📁 来源:尧图网络
使用 aws_connect_hours_of_operation 数据源查询 Amazon Connect 工作时间配置【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-awsaws_connect_hours_of_operation是 Terraform AWS Provider 中用于读取查询Amazon Connect 营业时间Hours of Operation配置的数据源。它允许你在 Terraform 配置中通过工作时间的name或hours_of_operation_id精确获取指定实例中的工作时间详情如周几营业、开门/关门时间、时区、标签等并将这些信息作为其他资源配置的输入实现跨资源的数据引用。读完本文你将掌握该数据源的完整参数语义、两种查询方式、属性结构以及它与aws_connect_hours_of_operation资源配合使用的实战写法。本文基于 Terraform AWS Provider 源码仓库中的官方文档与实现展开涉及的核心文件包括数据源文档、数据源实现、资源实现 与 数据源测试。数据源概览何时使用它Amazon Connect 的 Hours of Operation营业时间用于定义联络中心的对外服务时段例如周一至周五 8:00–23:00 提供服务。它通常与队列Queue、路由配置Routing Profile等实体关联。当你的 Terraform 配置需要消费这些已存在的工作时间数据而不是创建或修改它时就应使用本数据源。它适用于如下典型场景同一实例中多个资源如队列、路由配置需要引用同一个营业时间 ID避免硬编码 UUID通过名称name这种更可读的方式定位营业时间而不必先查询出 UUID将现有基础设施中已存在的工作时间信息导入 Terraform 状态引用链实现配置与现状的对齐。该数据源属于 SDKv2 框架实现注册名为aws_connect_hours_of_operation注释标记为SDKDataSource(aws_connect_hours_of_operation, nameHours Of Operation)见 hours_of_operation_data_source.go。参数参考Argument Reference数据源支持以下参数参数是否必需说明region可选资源所属的 AWS 区域默认使用 Provider 配置中设置的区域该 Provider 的通用参数几乎所有资源/数据源均支持instance_id必需托管该营业时间的 Amazon Connect 实例 ID即实例标识符格式为 UUIDname条件必需按名称查询营业时间与hours_of_operation_id二选一hours_of_operation_id条件必需按营业时间 ID 查询与name二选一关键约束instance_id必须提供且name与hours_of_operation_id中必须且只能提供其一。在源码中这一约束通过 schema 的ExactlyOneOf机制强制实现见 hours_of_operation_data_source.gohours_of_operation_id: { Type: schema.TypeString, Optional: true, Computed: true, ExactlyOneOf: []string{hours_of_operation_id, names.AttrName}, }, name: { Type: schema.TypeString, Optional: true, Computed: true, ExactlyOneOf: []string{names.AttrName, hours_of_operation_id}, },若两个参数同时省略或同时提供Terraform 会在 plan 阶段直接报错从机制上杜绝了查询条件歧义。两种查询方式的完整示例官方文档给出了按name与按hours_of_operation_id两种查询用法均可直接复制使用。按名称查询data aws_connect_hours_of_operation test { instance_id aaaaaaaa-bbbb-cccc-dddd-111111111111 name Test }按 ID 查询data aws_connect_hours_of_operation test { instance_id aaaaaaaa-bbbb-cccc-dddd-111111111111 hours_of_operation_id cccccccc-bbbb-cccc-dddd-111111111111 }与资源联动的推荐写法更贴合真实项目的做法是先创建一个aws_connect_hours_of_operation资源再通过数据源按 ID 或名称引用它避免手写 UUID。仓库的数据源测试正是这一模式的官方印证resource aws_connect_instance test { identity_management_type CONNECT_MANAGED inbound_calls_enabled true instance_alias connect-instance-example outbound_calls_enabled true } resource aws_connect_hours_of_operation test { instance_id aws_connect_instance.test.id name Office Hours description Test Hours of Operation Description time_zone EST config { day MONDAY end_time { hours 23 minutes 8 } start_time { hours 8 minutes 0 } } config { day TUESDAY end_time { hours 21 minutes 0 } start_time { hours 9 minutes 0 } } tags { Name Test Hours of Operation } } # 按 ID 查询 data aws_connect_hours_of_operation test { instance_id aws_connect_instance.test.id hours_of_operation_id aws_connect_hours_of_operation.test.hours_of_operation_id }若改按名称查询只需将最后一段替换为data aws_connect_hours_of_operation test { instance_id aws_connect_instance.test.id name aws_connect_hours_of_operation.test.name }属性参考Attribute Reference除上述参数外数据源会导出以下属性属性类型说明arnstring营业时间的 ARNconfig集合营业时间配置信息适用星期、开始时间、结束时间结构见下文descriptionstring营业时间的描述hours_of_operation_idstring营业时间的标识符UUIDinstance_idstring托管实例的标识符namestring营业时间的名称tagsmap分配给营业时间的标签time_zonestring营业时间应用的时区config是集合类型TypeSet每个块包含属性说明day该营业时间适用的星期几end_time结束时间块表示联络中心关闭时刻start_time开始时间块表示联络中心开启时刻end_time与start_time均只包含两个字段属性说明hours小时关闭/开启时刻的小时minutes分钟关闭/开启时刻的分钟在 Terraform 状态中读取结果形如config.#、config.*.day、config.*.end_time.0.hours等引用路径。测试中即通过TestCheckTypeSetElemNestedAttrs校验了config.*内层结构见 hours_of_operation_test.go例如end_time.0.hours为23、start_time.0.hours为8、day为MONDAY。源码级解析数据源底层是如何工作的读取流程数据源的读取逻辑集中在dataSourceHoursOfOperationRead见 hours_of_operation_data_source.go流程如下从配置中取得instance_id构造DescribeHoursOfOperationInput若提供了hours_of_operation_id直接将其写入请求中的HoursOfOperationId调用DescribeHoursOfOperation获取详情若提供了name先调用ListHoursOfOperations分页拉取该实例下的营业时间摘要列表按名称过滤出唯一匹配项findHoursOfOperationSummaryByTwoPartKey再用其Id回填HoursOfOperationId最后调用DescribeHoursOfOperation将返回的 ARN、名称、描述、时区、config、标签等写入 Terraform state并以instanceID:hoursOfOperationID的格式设置数据源 IDhoursOfOperationCreateResourceID。按名称查询的分页与唯一性校验按名称查询时代码使用 AWS SDK 的ListHoursOfOperationsPaginator以每页 60 条MaxResults: 60分页遍历全部摘要并对名称进行精确匹配过滤见 hours_of_operation_data_source.goconst maxResults 60 input : connect.ListHoursOfOperationsInput{ InstanceId: aws.String(instanceID), MaxResults: aws.Int32(maxResults), }随后通过tfresource.AssertSingleValueResult校验过滤结果——必须恰好匹配到一个营业时间匹配到 0 个返回未找到错误匹配到多个同名营业时间返回歧义错误。这意味着在同一实例中营业时间的name必须唯一否则按名称查询将失败。这是从源码实现可确认的行为约束。错误处理与标签当实例或营业时间不存在时AWS 返回ResourceNotFoundException代码会将其转换为retry.NotFoundError最终以明确错误信息返回给用户标签通过setTagsOut写入 state源码中数据源声明了Tags注解因此tags属性可直接引用。与资源实现的一致性数据源与同名的aws_connect_hours_of_operation资源共享底层查找函数findHoursOfOperation见 hours_of_operation.go二者读取逻辑完全一致。资源侧额外约束了写入字段name长度 1–127、description长度 1–250、day通过enum.Validate[awstypes.HoursOfOperationDays]()校验仅允许SUNDAY–SATURDAY等 AWS 枚举值。也就是说数据源能读到的字段集合正是资源能够写入的字段集合读写两侧 schema 严格对齐这一点可以从资源文档 connect_hours_of_operation.html.markdown 与资源源码的对照中得到印证。常见用法与注意事项instance_id不可省略所有查询路径都必须以实例 ID 为上下文实例不存在时会直接报错name与hours_of_operation_id二选一两者同时缺失或同时出现都会导致 plan 失败同名冲突按名称查询要求实例内名称唯一否则报匹配到多个结果的错误建议优先按 ID 查询以避免歧义时区语义time_zone返回的是 IANA 风格的时区名如ESTconfig中的hours/minutes表示的是该时区下联络中心的开门与关门时刻region参数与 Provider 其他资源一致可通过region覆盖 Provider 级区域配置默认跟随 Provider 配置与资源配合引用优先使用aws_connect_hours_of_operation.test.hours_of_operation_id或.name作为数据源入参避免手写 UUID 造成配置漂移。总结aws_connect_hours_of_operation数据源为 Terraform 管理 Amazon Connect 营业时间提供了安全、可校验的只读访问通道它既支持通过可读的name定位也支持通过精确的hours_of_operation_id定位并完整暴露config含day、start_time、end_time、time_zone、tags等全部属性供上层资源引用。结合本文给出的源码实现细节ExactlyOneOf约束、分页按名过滤、唯一性断言、与资源共享底层查找逻辑你可以在实际项目中准确、高效地消费营业时间数据构建出可读性强、不易出错的 Connect 基础设施代码。【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →