如何在Terraform中获取Azure Notification Hub的连接字符串?
问题
已通过Terraform创建Azure Notification Hub,需要在Azure Function的应用设置中配置格式为Endpoint=<endpoint_with_sb_protocol>;SharedAccessKeyName=<notification_hub_auth_rule_name>;SharedAccessKey=<access_key>的连接字符串,但现有两种获取方式均不符合要求:
- 使用
azurerm_notification_hub_authorization_rule.notifications-ntf-carriers-rules.primary_access_key仅得到签名密钥 - 使用
azurerm_notification_hub_namespace.notifications_ntfns.servicebus_endpoint仅得到HTTPS协议的端点
相关Terraform资源(命名空间、通知中心、授权规则)已创建完成,需生成符合要求的连接字符串。
解决方案
AzureRM Terraform Provider未直接提供拼接好的目标格式连接字符串,但可通过字符串插值+协议替换手动构建:
核心逻辑:
- 将命名空间的
servicebus_endpoint中的https协议替换为sb协议 - 拼接授权规则的名称、主访问密钥,组合成目标格式
修改Azure Function的app_settings配置如下:
resource "azurerm_linux_function_app" "notifications_func_push" { # 保留原有配置不变 app_settings = { # 保留其他应用设置不变 Notification_HubConnectionString = "Endpoint=${replace(azurerm_notification_hub_namespace.notifications_ntfns.servicebus_endpoint, "https://", "sb://")};SharedAccessKeyName=${azurerm_notification_hub_authorization_rule.notifications-ntf-carriers-rules.name};SharedAccessKey=${azurerm_notification_hub_authorization_rule.notifications-ntf-carriers-rules.primary_access_key}" Notification_HubName = azurerm_notification_hub.notifications_ntf-carriers.name } # 保留原有配置不变 }
关键细节说明
replace(..., "https://", "sb://"):将命名空间端点的HTTPS协议替换为Notification Hub要求的SB协议- 直接引用授权规则的
name字段作为SharedAccessKeyName - 引用授权规则的
primary_access_key字段作为SharedAccessKey
通过以上配置即可自动生成符合要求的连接字符串,无需手动拼接。
内容的提问来源于stack exchange,提问作者Simone
相关产品推荐
相关产品推荐

