Azure Functions GET /metadata/instance取消的调用

ssgvzors  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(105)

我们正在使用C#编写的v4函数在Linux Consumption Plan示例上运行许多Azure函数。代码使用GitHub Actions部署,所有代码都使用Microsoft.Azure.Functions.Worker.Sdk Version 1.14.1
其中一个函数使用CosmosDB Change Trigger来激活,另一个函数使用Timer Trigger设置为每五分钟执行一次。
我们对这些函数的应用程序洞察显示,每五分钟就有一次GET: {ipAddress}/metadata/instance调用,每次调用的平均持续时间为1.1分钟,并且总是导致Cancelled状态。
这些电话是在哪里打的,为什么打,可以做些什么来避免这种情况?这似乎会给服务增加不必要的开销?

0dxa2lsx

0dxa2lsx1#

此调用由Azure Cosmos DB SDK进行,以捕获Azure VM元数据信息。参考:https://learn.microsoft.com/azure/virtual-machines/instance-metadata-service?tabs=windows
此调用在客户端初始化期间进行**,并且对于Cosmos DB客户端而言,失败并不严重。其目的是,对于您遇到问题并发出遥测的情况,它会添加信息,例如Azure VM的位置,并帮助识别您有多个客户端示例的情况。
重要的是,这应该只在客户端初始化期间发生。CosmosDBTrigger创建客户端一次并重用它,如果你每5分钟看到它一次,这意味着:

  • 您正在使用Azure Functions消费计划,并且在一段时间不活动后,Functions运行时正在终止该函数。因此,每当有新的更改时,运行时就会重新启动,因此需要创建一个新的客户端。参考:https://azure.microsoft.com/blog/understanding-serverless-cold-start/
  • 如果您没有使用消费计划,则项目中的代码可能正在使用CosmosClient对Azure Cosmos DB容器执行某些操作,并且您没有遵循Singleton模式(例如,为每次执行在TimerTrigger上创建新的CosmosClient)。这是一个反模式。参考:https://learn.microsoft.com/azure/azure-functions/manage-connections?tabs=csharp#static-clients。如果您是这种情况,我建议查看此示例项目,该项目利用Azure Functions Dependency Injection来生成Singleton CosmosClient:https://github.com/Azure/azure-cosmos-dotnet-v3/tree/master/Microsoft.Azure.Cosmos.Samples/Usage/AzureFunctions

相关问题