资讯动态

terraform-provider-aws 中 aws_connect_prompt 数据源:检索 Amazon Connect 提示音(Prompt)信息

发布时间:2026/9/18 21:51:30 来源:尧图企业网站定制
terraform-provider-aws 中 aws_connect_prompt 数据源检索 Amazon Connect 提示音Prompt信息【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws导读aws_connect_prompt是 terraform-provider-aws 为 Amazon Connect 服务提供的一个只读数据源Data Source用于按名称查询指定 Connect 实例中的提示音Prompt即提示语音/铃声文件如Beep.wav信息。在编写呼叫中心基础设施配置时你常常需要把已有 Prompt 的 ARN 或 ID 注入到联系流Contact Flow、队列Queue等资源的配置中此时即可通过该数据源在 Terraform 配置中引用而无需在aws_connect_instance之外另行管理 Prompt 的生命周期。读完本文你将掌握该数据源的完整参数与导出属性、与aws_connect_instance资源的组合用法以及其背后的ListPromptsAPI 查询与结果匹配原理。数据源定位与适用场景在 Amazon Connect 中Prompt 是预先录制或系统生成的提示音频文件例如按键提示音Beep.wav、问候语等它们隶属于某个具体的 Connect 实例Instance。本数据源仅承担读取查询职责它不会创建、修改或删除任何 Prompt 资源仓库中只有website/docs/d/connect_prompt.html.markdown数据源文档没有对应的r/connect_prompt管理资源文档适合在配置中获取已有 Prompt 的元数据并建立引用关系。典型的引用场景包括将 Prompt 的arn传给联系流Contact Flow或提示音配置相关资源将prompt_id用于需要精确标识 Prompt 的 API 参数拼装在模块Module间传递 Connect 实例中 Prompt 的标识信息避免硬编码。基本用法按名称查询 Prompt原文档给出的最小可用示例是按name查询一个名为Beep.wav的 Promptdata aws_connect_prompt example { instance_id aaaaaaaa-bbbb-cccc-dddd-111111111111 name Beep.wav }查询完成后可通过data.aws_connect_prompt.example.arn、data.aws_connect_prompt.example.prompt_id等属性在其他资源中引用。在真实项目中instance_id通常不需要手写 UUID而是直接引用aws_connect_instance资源的id输出。仓库中的验收测试 prompt_data_source_test.go 就采用了这种更贴合实战的写法先创建实例再查询其中的系统默认 Promptresource aws_connect_instance test { identity_management_type CONNECT_MANAGED inbound_calls_enabled true instance_alias resource-test-terraform-xxxx outbound_calls_enabled true } data aws_connect_prompt test { instance_id aws_connect_instance.test.id name Beep.wav }测试配置通过acctest.ConfigCompose将实例创建配置与数据源查询配置组合在一起并在数据源中使用aws_connect_instance.test.id作为instance_id这正是生产环境中推荐的组织方式——保证数据源查询与实例生命周期解耦、无需硬编码。参数参考Argument Reference该数据源支持以下参数参数是否必填说明instance_idRequired托管该 Prompt 的 Amazon Connect 实例 IDReference to the hosting Amazon Connect Instance。通常引用aws_connect_instance.名称.id。nameRequired要查询的 Prompt 名称例如Beep.wav。该名称必须在实例内精确匹配查询对大小写敏感。regionOptional该数据源执行查询时使用的 AWS 区域。默认使用 provider 配置 中设置的区域。从源码角度看数据源 Schema 定义位于 prompt_data_source.go 的dataSourcePrompt()函数中显式声明的参数为instance_idRequired字符串与nameRequired字符串而region这类通用参数由服务包注册机制注入——在 service_package_gen.go 中aws_connect_prompt数据源以Factory: dataSourcePrompt、TypeName: aws_connect_prompt、Name: Prompt注册并带有Region: inttypes.ResourceRegionDefault()的区域默认行为即未显式指定region时沿用 provider 级区域配置。属性参考Attribute Reference除上述参数外该数据源在读取成功后还会导出以下属性属性说明arnPrompt 的 ARNAmazon Resource Name。prompt_idPrompt 在 Connect 实例内的唯一标识符Identifier for the prompt。在 prompt_data_source.go 的dataSourcePromptRead函数中可以看到这两个属性的赋值逻辑d.Set(names.AttrARN, promptSummary.Arn)写入 ARNd.Set(prompt_id, promptID)写入prompt_id同时name与instance_id也会被回写到状态中。该数据源的 ARN 遵循arn:aws:connect:region:account:instance/instance_id/prompt/prompt_id的格式。这一点在验收测试中通过acctest.CheckResourceAttrRegionalARNFormat(ctx, datasourceName, names.AttrARN, connect, instance/{instance_id}/prompt/{prompt_id})显式校验见 prompt_data_source_test.go。底层实现原理从 name 到 Prompt 元数据的查询链路要理解该数据源的行为边界值得沿源码追一遍它的读取链路核心代码都在 prompt_data_source.go 中入口dataSourcePromptRead先从配置中取出instanceID与name然后调用findPromptSummaryByTwoPartKey(ctx, conn, instanceID, name)将结果写入 Terraform 状态并调用promptCreateResourceID(instanceID, promptID)生成数据源的复合 ID格式为instanceID:promptID分隔符为冒号。构造查询findPromptSummaryByTwoPartKey调用 AWS SDK for Go v2 的connect.ListPromptsInput其中InstanceId设置为实例 ID、MaxResults固定为 60然后使用谓词函数过滤匹配条件为aws.ToString(v.Name) name——即按名称做精确匹配。分页拉取findPromptSummaries由于单个ListPrompts请求最多返回 60 条源码使用connect.NewListPromptsPaginator自动分页遍历PromptSummaryList对每一页逐条执行过滤并收集符合条件的项若 API 抛出ResourceNotFoundException则转换为retry.NotFoundError最终向上表现为“资源不存在”的诊断信息。唯一性断言findPromptSummary收集完所有匹配项后调用tfresource.AssertSingleValueResult断言结果必须恰好一条。这意味着如果实例内存在多个同名 Prompt或名称不匹配导致 0 条读取都会失败——前者会被视为歧义错误后者则是 NotFound 错误。这也解释了为什么文档强调按name“returns information on a specific Prompt”。这一链路也解释了该数据源的两个行为特征一是名称必须与实例内的 Prompt 完全一致如测试中使用的系统默认 Prompt 名Beep.wav二是读取失败时不会静默返回空数据而是产生明确的错误诊断。验收测试与可验证性仓库为该数据源提供了完整的验收测试用例testAccPromptDataSource_name位于 prompt_data_source_test.go。该测试主要验证ARN 格式正确性通过CheckResourceAttrRegionalARNFormat校验arn符合connect服务的instance/{instance_id}/prompt/{prompt_id}区域 ARN 模板字段回写正确性instance_id与aws_connect_instance.test的id一致TestCheckResourceAttrPairname为Beep.wavprompt_id非空TestCheckResourceAttrSet。测试基础设施使用acctest.Test、acctest.PreCheck、acctest.ErrorCheck(t, names.ConnectServiceID)与ProtoV5ProviderFactories执行环境与 terraform-provider-aws 的标准验收测试流程一致相关约定可参见 running-and-writing-acceptance-tests.md。注意事项与最佳实践名称精确匹配name参数按全名精确比对源码中为aws.ToString(v.Name) name不支持模糊匹配或通配符若不确定实例内有哪些 Prompt可先通过 AWS 控制台或ListPromptsAPI 确认。同名歧义会导致读取失败由于底层做唯一性断言同名 Prompt 存在多条记录时数据源会报错应确保查询名称在目标实例内唯一。region参数按需指定默认跟随 provider 的区域配置若 Connect 实例所在区域与 provider 默认区域不同应显式设置region否则查询会落在错误区域并可能得到 NotFound 结果。只读数据源不管理生命周期该数据源没有对应的管理资源适合引用“已存在”的 Prompt如实例自带的系统提示音若需要由 Terraform 管理 Prompt 的生命周期应等待或采用其他官方资源方案不要在配置中把数据源当作可写资源使用。复合 ID 语义数据源的 Terraform ID 格式为instance_id:prompt_id见promptCreateResourceID这与 Connect 服务中 Prompt 在实例内的层级归属关系一致可作为模块间传递与日志排查的参考。【免费下载链接】terraform-provider-awsThe AWS Provider enables Terraform to manage AWS resources.项目地址: https://gitcode.com/GitHub_Trending/te/terraform-provider-aws创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

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

免费获取报价