如何使用Azure PowerShell Runbook连接Azure CosmosDB并执行查询取数
步骤1:前置配置准备
- 为你的Azure自动化Runbook启用系统分配托管身份:进入自动化账户 → 身份 → 系统分配 → 状态设为「启用」,保存后记录生成的服务主体ID
- 为托管身份分配CosmosDB数据访问权限:进入目标CosmosDB账户 → 访问控制(IAM) → 角色分配 → 添加角色分配,根据业务需求选择对应权限角色:
- 仅需查询数据:选择
Cosmos DB 数据读取者 - 需增删改操作:选择
Cosmos DB 数据参与者
分配范围选择该CosmosDB账户,主体选择刚才启用的Runbook托管身份,完成分配
- 仅需查询数据:选择
- 在自动化账户中导入依赖PowerShell模块:进入自动化账户 → 模块 → 浏览库,搜索并导入
Az.Accounts、Az.CosmosDB两个模块,选择与你Runbook运行环境匹配的版本(推荐PowerShell 7.1及以上运行环境)
步骤2:Runbook中建立CosmosDB连接
在Runbook编辑页添加以下身份验证代码,完成连接初始化:
# 使用Runbook托管身份登录Azure,跨租户场景需额外添加 -TenantId "目标租户ID" 参数 Connect-AzAccount -Identity # 替换为你实际的CosmosDB配置参数 $cosmosAccountName = "你的CosmosDB账户名" $resourceGroupName = "CosmosDB所在资源组名" $databaseName = "目标数据库名" $containerName = "目标容器名"
步骤3:执行任意CosmosDB查询操作
方式1:使用Az.CosmosDB模块执行SQL查询(SQL API场景推荐)
适配SQL API类型的CosmosDB,可直接执行任意符合CosmosDB SQL语法的查询语句:
# 编写自定义查询语句,支持聚合、筛选、分页等所有CosmosDB SQL语法 $query = "SELECT c.id, c.name, c.createTime FROM c WHERE c.status = 'active' OFFSET 0 LIMIT 100" # 执行查询获取结果 $queryResult = Get-AzCosmosDBSqlItem ` -ResourceGroupName $resourceGroupName ` -AccountName $cosmosAccountName ` -DatabaseName $databaseName ` -ContainerName $containerName ` -Query $query # 处理/输出查询结果 $queryResult
注意:如果需要避免SQL注入风险,可通过
-QueryParameter参数传入动态参数,示例:-QueryParameter @(@{name="@status"; value="active"}),对应查询语句写为SELECT * FROM c WHERE c.status = @status
方式2:调用REST API执行查询(兼容所有API类型)
适配Mongo API、Gremlin API等非SQL API场景,或有自定义请求头需求的场景:
# 获取CosmosDB数据平面访问令牌 $token = (Get-AzAccessToken -ResourceUrl "https://cosmos.azure.com").Token $headers = @{ "Authorization" = "Bearer $token" "x-ms-version" = "2021-04-15" "x-ms-documentdb-isquery" = "True" "Content-Type" = "application/query+json" } # 构造查询请求体 $requestBody = @{ query = "SELECT * FROM c WHERE c.createTime >= '2024-01-01'" parameters = @() } | ConvertTo-Json # 构造请求地址并发送请求 $requestUrl = "https://$cosmosAccountName.documents.azure.com/dbs/$databaseName/colls/$containerName/docs" $restResult = Invoke-RestMethod -Method Post -Uri $requestUrl -Headers $headers -Body $requestBody # 输出查询返回的文档列表 $restResult.Documents
内容的提问来源于stack exchange,提问作者Mano
相关产品推荐
相关产品推荐

