
Terraform AWS Provider 中 aws_appconfig_environments 数据源详解按应用查询全部 AppConfig 环境【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws本文围绕 Terraform AWS Provider 的aws_appconfig_environments数据源展开介绍如何在 Terraform 配置中按 AppConfig Application 查询其名下的全部环境EnvironmentID并将这些 ID 传递给其他资源使用结合 Provider 源码讲解该数据源的 schema 校验规则、ListEnvironmentsAPI 的分页读取实现以及配套验收测试的验证方式。读完本文你能够正确编写该数据源的 Terraform 配置理解其底层调用链并知道如何与其他 AppConfig 数据源组合使用。数据源定位与使用场景aws_appconfig_environments是一个只读数据源data source用于访问某个 AppConfig Application 下的所有 Environment其核心价值在于允许你把查询到的 Environment ID 集合传递给另一个资源。在 AWS AppConfig 的模型中一个 Application 可以定义一个或多个 Environment配置Configuration Profile发布Deployment时需要指定目标环境。当环境中存在多个环境且你无法在 Terraform 配置里预先知道每个环境的 ID 时就可以先通过本数据源列出全部环境 ID再驱动后续资源。基本用法示例文档给出的基本用法如下data aws_appconfig_environments example { application_id a1d3rpe }application_id必须是一个合法的应用 ID。结合仓库源码 internal/service/appconfig/environments_data_source.go该参数在 schema 中声明为Required并带有正则校验names.AttrApplicationID: { Type: schema.TypeString, Required: true, ValidateFunc: validation.StringMatch(regexache.MustCompile([a-z\d]{4,7}), ), },也就是说application_id必须是 4~7 位的小写字母或数字与 AWS AppConfig 应用 ID 的实际格式一致。配置不合法的值会在 plan 阶段即被本地校验拦截而不必等到调用 API 才报错。更贴近实战的写法是把 ID 引用链起来先声明应用和环境资源再让数据源依赖它们。仓库验收测试 internal/service/appconfig/environments_data_source_test.go 中的测试配置就是这个模式resource aws_appconfig_environment test_1 { application_id aws_appconfig_application.test.id name test-1 } resource aws_appconfig_environment test_2 { application_id aws_appconfig_application.test.id name test-2 } data aws_appconfig_environments test { application_id aws_appconfig_application.test.id depends_on [aws_appconfig_environment.test_1, aws_appconfig_environment.test_2] }注意这里用depends_on显式声明了依赖数据源本身只引用了application_id与两个环境资源没有属性级依赖若不加depends_onTerraform 可能在环境创建之前读取数据源导致查询结果不含新建的环境。参数参考Argument Reference该数据源支持以下参数参数必填性说明application_id必填RequiredAppConfig Application 的 ID。源码中的校验要求为 4~7 位小写字母或数字region可选Optional该数据源所管理的区域。默认使用 provider 配置中设置的 Region从源码看schema 只声明了application_id和输出属性environment_ids两个字段region是 Provider 对所有资源/数据源统一支持的区域参数由 provider 层的区域解析机制处理不需要在该数据源内部单独实现。属性参考Attribute Reference除上述参数外该数据源导出以下属性environment_ids- 与该 AppConfig Application 关联的一组 Environment ID 集合。environment_ids在源码中被声明为TypeSet无序字符串集合而非TypeListenvironment_ids: { Type: schema.TypeSet, Computed: true, Elem: schema.Schema{Type: schema.TypeString}, },这带来两点实际影响集合元素的顺序不保证引用时应按元素值如environment_ids.*而非下标位置使用测试中因此使用TestCheckTypeSetElemAttrPair集合元素匹配而非TestCheckListElemAttrPair来断言见 environments_data_source_test.go。另外从源码可以推断该数据源的id值读取函数在成功后执行d.SetId(applicationID)即用application_id本身作为数据源的 ID。源码实现基于 ListEnvironments 的分页读取该数据源的读取逻辑位于 internal/service/appconfig/environments_data_source.go核心调用链如下dataSourceEnvironmentsRead通过meta.(*conns.AWSClient).AppConfigClient(ctx)获取 AppConfig 的 AWS SDK v2 客户端构造appconfig.ListEnvironmentsInput{ApplicationId: ...}调用包内findEnvironments函数内部使用 SDK 的分页器appconfig.NewListEnvironmentsPaginator循环拉取所有页面pages : appconfig.NewListEnvironmentsPaginator(conn, input) for pages.HasMorePages() { page, err : pages.NextPage(ctx) if err ! nil { return nil, err } output append(output, page.Items...) }最后通过tfslices.ApplyToAll将每个awstypes.Environment对象投影为其Id字段写入environment_ids。使用分页器意味着即使一个应用下的环境数量超过单页上限数据源也能完整返回全部 ID不会静默截断。错误处理上若读取过程中发生错误会以reading AppConfig Environments: ...的格式包装为诊断信息返回便于在terraform plan/apply输出中定位问题。验收测试如何验证正确性验收测试TestAccAppConfigEnvironmentsDataSource_basicinternal/service/appconfig/environments_data_source_test.go做了如下断言environment_ids.#等于2——即创建两个环境后数据源恰好返回两个 ID两个aws_appconfig_environment.test_1/test_2资源的environment_id都作为集合元素出现在environment_ids中TestCheckTypeSetElemAttrPair。同时测试在PreCheck中通过acctest.PreCheckPartitionHasService(t, names.AppConfigEndpointID)校验当前分区支持 AppConfig 服务这提示该数据源只能在提供 AppConfig 服务的 AWS 分区/区域中使用。与相关数据源的配合使用AppConfig 包中还提供其他可组合使用的数据源与资源文档位于aws_appconfig_environment 资源文档管理单个环境支持name、description、monitorCloudWatch 告警等参数导出environment_id、arn、state等属性aws_appconfig_environment数据源internal/service/appconfig/environment_data_source.go已知具体environment_id时读取单个环境的 ARN、状态、监控配置和标签aws_appconfig_configuration_profiles数据源internal/service/appconfig/configuration_profiles_data_source.go同构地列出应用下全部配置 Profile ID。典型组合模式是aws_appconfig_environments给出环境 ID 集合后用for_each或显式引用为每个 ID 建立aws_appconfig_deployment等资源当只需要某一个环境时则直接用单数形式的数据源aws_appconfig_environment。小结aws_appconfig_environments数据源参数简单——仅需application_id4~7 位小写字母或数字输出environment_ids字符串集合。从源码可以确认其底层基于ListEnvironments分页器完整拉取、用应用 ID 作为数据源自身 ID且测试覆盖了集合数量与元素匹配两个维度。实际使用时注意在数据源上补depends_on以保证在环境资源创建后再读取并按集合而非下标顺序消费environment_ids。【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考