逻辑应用程序中的MS Graph分页,Azure Blob存储中的结果导出



我要做的事情:

我正在尝试检索所有用户最后24小时的登录日志,并将其保存在blob存储中。在第一个结果集创建blob之后,下一个结果集将使用下一个剩余结果更新blob文件。

考虑使用blob存储和MS Graph,因为Graph输出包含了我想要的所有细节,而不必在Powershell中跳过各种关卡来扩展某些属性,而且结果大小巨大(通过Powershell中的Export CSV超过1GB(。

我是如何尝试的

一个计划运行,它使用经过最后24小时过滤的Graph查询来执行HTTP请求,从而创建一个以HTTP Body为内容的块。在创建Blob之后,我添加了一个(Do(Until控件,该控件一直运行到HTTP正文不包含@odata.nextLink并更新Blob文件。

问题:

  1. 第一个问题是Until循环在6秒内完成
  2. 第二个问题是blob文件只包含第一个结果集,大小通常为9.3MB。这意味着下一个结果集不会被访问并附加到现有的blob文件中

我的研究

我试过启用分页&禁用,各种分页阈值,自定义函数,但没有任何意义(至少对我来说(,我正在努力遵循KISS模型。

我仔细看了看,试图以一种形式应用以下S.O.问题的答案:逻辑应用程序中的图形分页|使用oauth azure数据工厂进行分页| Microsoft图形,批处理请求';s nextLink|https://learn.microsoft.com/en-us/graph/paging;

我正在尝试的代码

{
"definition": {
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
"actions": {
"Create_blob": {
"inputs": {
"body": "@body('fRequest')",
"host": {
"connection": {
"name": "@parameters('$connections')['azureblob']['connectionId']"
}
},
"method": "post",
"path": "/datasets/default/files",
"queries": {
"folderPath": "/graph",
"name": "DoUntil",
"queryParametersSingleEncoded": true
}
},
"runAfter": {
"fRequest": [
"Succeeded"
]
},
"runtimeConfiguration": {
"contentTransfer": {
"transferMode": "Chunked"
}
},
"type": "ApiConnection"
},
"Until": {
"actions": {
"Update_blob": {
"inputs": {
"body": "@body('fRequest')",
"host": {
"connection": {
"name": "@parameters('$connections')['azureblob']['connectionId']"
}
},
"method": "put",
"path": "/datasets/default/files/@{encodeURIComponent(encodeURIComponent('/graph/DoUntil'))}"
},
"runAfter": {},
"type": "ApiConnection"
}
},
"expression": "@not(contains(body('fRequest'), '@odata.nextLink'))",
"limit": {
"count": 60,
"timeout": "PT1H"
},
"runAfter": {
"Create_blob": [
"Succeeded"
]
},
"type": "Until"
},
"fRequest": {
"inputs": {
"authentication": {
"audience": "https://graph.microsoft.com",
"clientId": "registered_app",
"secret": "app_secret",
"tenant": "tenant_id",
"type": "ActiveDirectoryOAuth"
},
"method": "GET",
"uri": "https://graph.microsoft.com/beta/auditLogs/signIns?$filter=createdDateTime gt @{addDays(utcNow(),-1)}"
},
"runAfter": {},
"runtimeConfiguration": {
"paginationPolicy": {
"minimumItemCount": 500
}
},
"type": "Http"
}
},
"contentVersion": "1.0.0.0",
"outputs": {},
"parameters": {
"$connections": {
"defaultValue": {},
"type": "Object"
}
},
"triggers": {
"Recurrence": {
"recurrence": {
"frequency": "Week",
"interval": 7,
"schedule": {
"hours": [
"7"
],
"minutes": [
0
]
}
},
"type": "Recurrence"
}
}
},
"parameters": {
"$connections": {
"value": {
"azureblob": {
"connectionId": "/subscriptions/subscription_id/resourceGroups/Apps/providers/Microsoft.Web/connections/azureblob",
"connectionName": "azureblob",
"id": "/subscriptions/subscription_id/providers/Microsoft.Web/locations/eastus/managedApis/azureblob"
}
}
}
}

}

我做错了什么或错过了什么?提前感谢!

我设法将分页阈值提高到20000,现在我的文件不再是9MB,它们的大小达到了200MB。我还删除了";Do"环现在我只需要创建一个中断来避免阈值,然后继续收集剩余的结果页面。

相关内容

  • 没有找到相关文章

最新更新