使用Terraform通过Azure流分析托管标识访问SQL数据库
使用Terraform为Azure流分析作业的SQL引用输入配置托管标识
问题背景
可以通过Terraform的azurerm_stream_analytics_job资源的identity块为流分析作业创建托管标识,也能借助托管标识实现数据库输出连接,但暂未找到直接通过azurerm_stream_analytics_reference_input_mssql资源配置托管标识来创建SQL引用输入的方法。
明确需求
需要完成以下两项配置:
- 将SQL引用输入的身份验证模式设置为「托管标识」
- 在连接属性中,选择使用流分析作业的系统分配托管标识完成身份验证
解决方案
目前azurerm_stream_analytics_reference_input_mssql资源暂不直接支持Terraform层面配置托管标识认证,可通过以下两种方式实现需求:
方式1:通过Terraform调用ARM模板部署
借助ARM模板配置支持托管标识的SQL引用输入,示例代码如下:
resource "azurerm_resource_template_deployment" "sql_ref_input" { name = "sql-reference-input-deploy" resource_group_name = azurerm_resource_group.example.name template_content = <<JSON { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "resources": [ { "type": "Microsoft.StreamAnalytics/streamingjobs/inputs", "apiVersion": "2020-03-01", "name": "${azurerm_stream_analytics_job.example.name}/SqlReferenceInput", "properties": { "type": "Reference", "datasource": { "type": "Microsoft.Sql/Server/Database", "properties": { "server": "你的SQL服务器名.database.windows.net", "database": "你的数据库名", "table": "你的引用表名", "authenticationMode": "Msi" } } } } ] } JSON }
方式2:Terraflow配置托管标识后,用Azure CLI补充输入配置
- 先通过Terraform创建带系统分配托管标识的流分析作业:
resource "azurerm_stream_analytics_job" "example" { name = "example-stream-job" resource_group_name = azurerm_resource_group.example.name location = azurerm_resource_group.example.location compatibility_level = "1.2" data_locale = "en-US" events_late_arrival_max_delay_in_seconds = 60 events_out_of_order_max_delay_in_seconds = 5 events_out_of_order_policy = "Adjust" identity { type = "SystemAssigned" } }
- 执行Azure CLI命令添加托管标识认证的SQL引用输入:
az stream-analytics input create \ --resource-group <你的资源组名> \ --job-name <你的流分析作业名> \ --name SqlReferenceInput \ --type Reference \ --datasource '{ "type": "Microsoft.Sql/Server/Database", "properties": { "server": "你的SQL服务器名.database.windows.net", "database": "你的数据库名", "table": "你的引用表名", "authenticationMode": "Msi" } }'
注意事项
- 需为流分析作业的系统分配托管标识授予SQL数据库的
db_datareader角色权限,否则无法读取引用表数据 - 若使用用户分配托管标识,需在ARM模板或CLI命令中额外指定
userAssignedIdentityResourceId属性
内容的提问来源于stack exchange,提问作者JoeBloggs
相关产品推荐
相关产品推荐

