Terraform AWS Provider 数据源 `aws_location_geofence_collection` 完全指南:读取地理围栏集合信息
Terraform AWS Provider 数据源aws_location_geofence_collection完全指南读取地理围栏集合信息【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-awsaws_location_geofence_collection是 Terraform AWS Provider 中用于查询 AWS Location Service 地理围栏集合Geofence Collection元数据的数据源。本文将围绕该数据源的核心用法展开先给出可直接运行的 Terraform 配置示例再逐一拆解全部入参与导出属性并结合当前仓库 internal/service/location/geofence_collection_data_source.go 的源码实现说明数据源背后的 API 调用链、属性映射与标签过滤逻辑帮助你在既有地理围栏集合之上安全地引用 ARN、KMS 密钥与标签信息而无需在配置中硬编码。数据源概述与适用场景地理围栏Geofence是 AWS Location Service 提供的空间能力用于在虚拟边界内对设备位置进行判定。多个地理围栏按业务语义组织成地理围栏集合Geofence Collection。当你需要在一个或多个 Terraform 配置中引用已存在通常由其他团队或独立配置创建的地理围栏集合时使用数据源是推荐做法动态获取collection_arn避免在 IAM 策略、跨资源引用中写死 ARN读取创建/更新时间戳、描述、关联的 KMS 密钥 ID 与标签供条件判断或输出使用在terraform apply前即可验证目标集合是否存在数据源读取失败会直接报错而非静默通过。与之相对如果需要创建并管理地理围栏集合的完整生命周期则应使用同名的管理资源aws_location_geofence_collection其实现位于 internal/service/location/geofence_collection.go。数据源与资源共享同一套底层 API属性语义完全对齐。基本用法读取一个地理围栏集合原文档给出的最小可用配置如下data aws_location_geofence_collection example { collection_name example }执行terraform plan或terraform apply后即可通过data.aws_location_geofence_collection.example.collection_arn、data.aws_location_geofence_collection.example.description等表达式在其他资源中引用该集合的属性。更贴近生产实践的写法是先用资源创建、再用数据源引用这样既能验证数据源与资源属性的一致性又能演示引用方式。该模式在仓库的接入测试 internal/service/location/geofence_collection_data_source_test.go 中有完整体现resource aws_location_geofence_collection test { collection_name example } data aws_location_geofence_collection test { collection_name aws_location_geofence_collection.test.collection_name }注意测试配置通过aws_location_geofence_collection.test.collection_name将资源的名称直接注入数据源而非硬编码字符串这正是数据源的典型使用范式——让 Terraform 自动编排依赖关系。参数说明Argument Reference数据源支持以下入参参数是否必选说明collection_name必选地理围栏集合的名称。region可选该数据源实际访问的 AWS 区域默认为 Provider 配置中设置的区域。collection_name 的命名约束collection_name并非任意字符串。从数据源源码 internal/service/location/geofence_collection_data_source.go 可以看到其 schema 校验规则collection_name: { Type: schema.TypeString, Required: true, ValidateFunc: validation.StringLenBetween(1, 100), },即名称长度必须位于1 到 100 个字符之间超出该范围会在plan阶段直接被校验拦截而不会发起 AWS API 请求。管理资源 internal/service/location/geofence_collection.go 对collection_name使用了相同的校验规则且标记为ForceNew: true创建后不可原地修改只能重建说明名称一旦确定便不可变更。region 参数的生效方式region为可选参数用于覆盖 Provider 默认区域使数据源可在指定区域的终端节点上查询集合。AWS Location Service 采用区域化端点部署集合创建在哪个区域就只能在对应区域查询。省略region时沿用 Provider 配置的区域设置。属性说明Attribute Reference除collection_name本身外数据源在读取成功后还会导出以下只读属性属性类型说明collection_arnstring地理围栏集合的 ARN用于跨 AWS 资源引用如 IAM 策略。create_timestring集合创建时间戳ISO 8601 格式。descriptionstring集合的可选描述信息。kms_key_idstring分配给该 Location 资源的 AWS KMS 客户自主管理密钥的密钥标识。tagsmap(string)集合的资源标签键值对。update_timestring集合最近一次更新的时间戳ISO 8601 格式。时间戳的格式保证create_time与update_time在 AWS API 响应中为毫秒级时间戳数据源在写入状态前统一转换为RFC 3339格式。对应源码d.Set(names.AttrCreateTime, aws.ToTime(out.CreateTime).Format(time.RFC3339)) d.Set(update_time, aws.ToTime(out.UpdateTime).Format(time.RFC3339))因此这两个属性始终呈现为标准化的2026-09-18T03:56:43Z形态便于在depends_on、时间比较或外部系统对接中直接使用。tags 的过滤语义数据源返回的tags并非 AWS API 返回的原始标签全集而是经过两层过滤后的结果见数据源源码末尾ignoreTagsConfig : meta.(*conns.AWSClient).IgnoreTagsConfig(ctx) if err : d.Set(names.AttrTags, keyValueTags(ctx, out.Tags).IgnoreAWS().IgnoreConfig(ignoreTagsConfig).Map()); err ! nil { return create.AppendDiagError(diags, names.Location, create.ErrActionSetting, DSNameGeofenceCollection, d.Id(), err) }IgnoreAWS()剔除 AWS 内部使用的预留标签如aws:cloudformation:stack-name等IgnoreConfig(ignoreTagsConfig)进一步剔除用户在 Provider 的ignore_tags配置中声明忽略的标签。这意味着tags反映的是经过用户策略清洗后的标签视图与 Provider 全局的标签忽略机制保持一致。源码级实现原理数据源如何工作数据源的完整读取逻辑位于 internal/service/location/geofence_collection_data_source.go 的dataSourceGeofenceCollectionRead函数其执行链路如下获取客户端通过meta.(*conns.AWSClient).LocationClient(ctx)取得 AWS SDK v2 的 Location Service 客户端取参数读取collection_name调用查找函数调用findGeofenceCollectionByName(ctx, conn, name)写状态将返回值映射到各属性并以collection_name作为资源 IDd.SetId(aws.ToString(out.CollectionName))返回诊断任何一步出错都会通过create.AppendDiagError汇总为 Terraform 诊断信息。其中findGeofenceCollectionByName定义在管理资源的源码 internal/service/location/geofence_collection.go 中是数据源与资源共享的查找函数func findGeofenceCollectionByName(ctx context.Context, conn *location.Client, name string) (*location.DescribeGeofenceCollectionOutput, error) { in : location.DescribeGeofenceCollectionInput{ CollectionName: aws.String(name), } out, err : conn.DescribeGeofenceCollection(ctx, in) if errs.IsA*awstypes.ResourceNotFoundException { return nil, retry.NotFoundError{ LastError: err, } } ... }可以看到底层对应 AWS 的DescribeGeofenceCollectionAPI。当集合不存在时AWS 返回ResourceNotFoundException该函数将其包装为retry.NotFoundError最终由数据源层转换为明确的读取失败诊断——这正是数据源能在plan阶段就暴露目标集合不存在这一问题的原因。而管理资源在Read阶段对同样的NotFound错误则采取从状态中移除的策略日志输出removing from state两种行为差异体现了数据源与资源对缺失实体的不同语义数据源要求必须存在资源则容忍已被外部删除。实战进阶完整参数组合示例将数据源与完整配置的资源搭配可以一次拿到全部元数据。以下示例同时使用了描述、KMS 加密与标签并与数据源串联参考仓库接入测试 internal/service/location/geofence_collection_test.go 中的资源配置形态resource aws_kms_key test { deletion_window_in_days 7 enable_key_rotation true } resource aws_location_geofence_collection test { collection_name production-fences description 生产环境地理围栏集合 kms_key_id aws_kms_key.test.arn tags { Environment production Team iot } } data aws_location_geofence_collection test { collection_name aws_location_geofence_collection.test.collection_name } output geofence_arn { value data.aws_location_geofence_collection.test.collection_arn } output geofence_created_at { value data.aws_location_geofence_collection.test.create_time } output geofence_tags { value data.aws_location_geofence_collection.test.tags }关于上述资源参数从管理资源 schemainternal/service/location/geofence_collection.go可以确认以下约束description可选长度 0–1000 字符支持创建后原地更新对应UpdateGeofenceCollectionAPIkms_key_id可选长度 1–2048 字符标记为ForceNew——创建后不可更换密钥只能重建集合tags创建时传入通过getTagsIn(ctx)合并 Provider 全局默认标签后随CreateGeofenceCollection请求发送资源的 Create/Update/Delete 默认超时均为 30 分钟。对只读场景例如仅需 ARN 与描述可以只保留资源名与数据源其余参数省略——未配置的description、kms_key_id在数据源导出时对应为空字符串tags为空 map。小结aws_location_geofence_collection数据源是对 AWS Location Service 地理围栏集合的只读抽象本质上是DescribeGeofenceCollectionAPI 的 Terraform 封装。其入参仅有必选的collection_name与可选的region导出属性覆盖 ARN、时间戳、描述、KMS 密钥与标签足以支撑跨资源引用、条件判断与审计输出等常见需求。对于需要动态引用既有集合的场景优先使用数据源获取collection_arn等元数据需要管理集合生命周期时则配合同名资源使用。两者的 schema 与查找逻辑在仓库中同源实现geofence_collection_data_source.go 与 geofence_collection.go属性和校验规则保持一致组合使用时可放心依赖。【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考