十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

Terraform AWS Provider 中 aws_appconfig_configuration_profiles 数据源详解:批量获取 AppConfig 配置配置文件

Terraform AWS Provider 中 aws_appconfig_configuration_profiles 数据源详解:批量获取 AppConfig 配置配置文件 Terraform AWS Provider 中 aws_appconfig_configuration_profiles 数据源详解批量获取 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_configuration_profiles数据源展开。该数据源用于按application_id列出指定 AWS AppConfig 应用下的所有 Configuration Profile ID是解决配置配置文件 ID 由控制台或其他流程生成、无法预知这一常见痛点的关键工具。读完本文你将掌握该数据源的完整参数与导出属性、与aws_appconfig_configuration_profile单数数据源配合使用的for_each模式以及其在 Provider 源码中基于分页迭代器的实现原理。一、数据源定位从应用 ID 到配置配置文件 ID 集合AWS AppConfig 中Application 与其下的 Configuration Profile 是一对多的层级关系一个应用可以挂载多个配置配置文件每个配置文件对应一份location_uri指定的配置内容。当这些配置文件的 ID 不是由 Terraform 管理例如由其他团队、CI 流程或手动在控制台创建时Terraform 配置中就需要一种先列出、再引用的能力。aws_appconfig_configuration_profiles数据源正是为此设计给定一个 AppConfig Application 的 ID它调用 AWS API 列出该应用下的全部 Configuration Profile并把它们的 ID 汇总为一组集合导出供其他资源或数据源引用。典型场景包括将列出的配置文件 ID 通过for_each批量展开为aws_appconfig_configuration_profile数据源逐条读取完整属性在aws_appconfig_deployment等资源中动态引用某个配置文件避免硬编码 ID在 Terraform 输出output中暴露应用下的配置文件清单供下游模块消费。二、完整用法示例数据源链式引用官方文档给出的基础用法展示了列表数据源 单数数据源的组合模式data aws_appconfig_configuration_profiles example { application_id a1d3rpe } data aws_appconfig_configuration_profile example { for_each data.aws_appconfig_configuration_profiles.example.configuration_profile_ids configuration_profile_id each.value application_id aws_appconfig_application.example.id }这段配置的工作流程是data.aws_appconfig_configuration_profiles.example先执行向 AppConfig 发起列表查询拿到configuration_profile_ids集合data.aws_appconfig_configuration_profile.example以该集合作为for_each键值为每个配置文件 ID 创建一个数据源实例单数数据源实例逐个拉取对应配置文件的完整属性描述、location_uri、type、kms_key_identifier、校验器等。需要注意的实操细节文档示例中的application_id使用了静态 ID 字符串如a1d3rpe实际使用时通常引用资源属性如aws_appconfig_application.example.id保证 ID 与 Terraform 管理状态一致若配置文件本身也是由 Terraform 资源创建的务必通过depends_on建立显式依赖确保数据源在资源创建之后再读取。仓库中的验收测试正是这样做的见 数据源测试文件data aws_appconfig_configuration_profiles test { application_id aws_appconfig_application.test.id depends_on [aws_appconfig_configuration_profile.test_1, aws_appconfig_configuration_profile.test_2] }三、Argument Reference输入参数该数据源支持以下输入参数参数必填说明application_id是AppConfig Application 的 IDregion否操作所在 Region默认继承 Provider 配置中的 Region 设置从源码定义可以看到application_id被声明为Required的字符串字段而configuration_profile_ids是一个Computed的字符串集合TypeSet即它只能由 Provider 计算填充、用户不可写入见 数据源 schema 定义names.AttrApplicationID: { Type: schema.TypeString, Required: true, }, configuration_profile_ids: { Type: schema.TypeSet, Computed: true, Elem: schema.Schema{Type: schema.TypeString}, },使用TypeSet而非TypeList意味着返回结果是无序集合在 Terraform 配置中应以for_each而非count 索引的方式消费这正是官方示例采用for_each的原因。四、Attribute Reference导出属性除上述输入参数外数据源导出以下属性属性说明configuration_profile_ids与该 AppConfig Application 关联的所有 Configuration Profile ID 集合这是该数据源唯一的导出属性也是它与下游配置衔接的唯一数据通道。配合单数数据源可获得哪些完整属性仅拿到 ID 集合往往不够通常还需描述、存储位置、校验器等详情。此时链式引用的aws_appconfig_configuration_profile单数数据源会导出以下属性参见 单数数据源文档arn- 配置文件的 ARNdescription- 描述id- 配置文件 ID 与 Application ID 以冒号(:)分隔组合而成的复合 IDkms_key_identifier- 用于加密配置数据的 KMS 密钥标识符location_uri- 配置文件内容的位置 URIname- 配置文件名称retrieval_role_arn- 访问location_uri所指内容所需的 IAM 角色 ARNtags- 资源标签映射type- 配置文件类型如AWS.Freeform、AWS.AppConfig.FeatureFlags类型常量定义见 资源源码validator- 校验方法嵌套集合含contentJSON Schema 内容或 Lambda 函数 ARN与typeJSON_SCHEMA或LAMBDA两个字段。这些属性的读取逻辑在 单数数据源读取函数 中逐一落盘到 state且两个必填输入application_id、configuration_profile_id都通过了[a-z\d]{4,7}的正则校验可以在terraform validate阶段提前拦截非法 ID 格式。五、源码级实现分页拉取与错误处理数据源的读取入口是dataSourceConfigurationProfilesRead其核心步骤为见 实现源码从 meta 中取得 AppConfig 客户端meta.(*conns.AWSClient).AppConfigClient(ctx)构造ListConfigurationProfilesInput并委托给findConfigurationProfileSummaries完成实际查询以application_id作为数据源自身的 state ID用tfslices.ApplyToAll把 API 返回的ConfigurationProfileSummary对象切片映射为纯字符串切片写入configuration_profile_ids。真正的 API 调用封装在findConfigurationProfileSummaries见 分页实现其中有两个值得注意的工程细节完整分页通过 SDK v2 的appconfig.NewListConfigurationProfilesPaginator创建分页迭代器循环pages.HasMorePages()直到取尽所有页因此无论应用下有多少个配置文件都不会遗漏——列表结果的正确性不依赖单次 API 调用的页大小资源缺失的语义化处理当 API 返回ResourceNotFoundException例如application_id不存在时将其转换为retry.NotFoundError而非直接向用户抛出原始 SDK 错误。这让上层能统一按资源未找到的语义处理也解释了为什么引用一个不存在的 Application ID 会报 NotFound 类错误。测试如何验证行为验收测试TestAccAppConfigConfigurationProfilesDataSource_basic在该应用下创建了两个hosted类型的配置文件然后断言数据源的configuration_profile_ids集合恰好包含 2 个元素且每个元素分别与两个资源的configuration_profile_id属性成对匹配见 测试断言。这验证了两个关键行为集合大小准确无重复、无遗漏以及集合元素确实来自 List API 的真实返回值。六、实际使用建议与限制结合上述实现给出几条可落地的使用建议始终与for_each搭配消费configuration_profile_ids是集合类型顺序不保证用for_each展开为单数数据源实例是最稳妥的模式显式声明依赖当配置文件由同一栈中的资源创建时为列表数据源添加depends_on避免读到尚未创建完成的空列表仓库测试中的做法即如此理解 Region 语义region参数覆盖 Provider 级 Region 配置跨 Region 引用同一应用 ID 时需注意 AppConfig 应用是 Region 级资源不同 Region 的 ID 空间相互独立结果可能为空若应用下没有任何配置文件configuration_profile_ids为空集合for_each展开后不会产生任何实例下游引用这些实例属性的配置会报引用错误建议在count/for_each之外配合条件判断或输出检查该数据源只读且轻量它只返回 ID 集合不含名称、类型等详情。需要完整属性时请链式使用单数数据源或将 ID 交给aws_appconfig_deployment等资源使用——后者同样以configuration_profile_id作为必填参数见 deployment 资源。参考文件索引数据源文档aws_appconfig_configuration_profiles数据源实现configuration_profiles_data_source.go数据源验收测试configuration_profiles_data_source_test.go单数数据源实现configuration_profile_data_source.go配置文件资源含 type 常量configuration_profile.goAppConfig 服务包说明README【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表