要求 创建一个Azure功能,该功能可监视对IoT中心的所有传入消息,并对消息进行一些修改后将其发送到Cosmos数据库
建筑
问题:无法创建Azure功能,该功能将传入的消息读取到IoT中心并发送到Cosmos DB
已执行的步骤
我已按照以下步骤使用Azure Function App
创建和部署Visual Studio Code
转到Azure Extension Panel
选择了C#
语言
它创建了以下文件
现在,我单击了Visual Studio Code
中的“创建功能”按钮,并选择了CosmosDBTrigger
并映射了已经在Azure门户中创建的CosmoDB
。在c#类下生成的
namespace Company.Function
{
public static class CosmosDBTriggerCSharp
{
[FunctionName("CosmosDBTriggerCSharp")]
public static void Run([CosmosDBTrigger(
databaseName: "databaseName",
collectionName: "collectionName",
ConnectionStringSetting = "dev-test-cosmo-db_DOCUMENTDB",
LeaseCollectionName = "leases")]IReadOnlyList<Document> input, ILogger log)
{
if (input != null && input.Count > 0)
{
log.LogInformation("Documents modified " + input.Count);
log.LogInformation("First document Id " + input[0].Id);
}
}
}
}
现在,我已经通过执行(Ctrl + Shift + P)来部署该功能,方法是键入“部署到功能应用程序”并运行 Azure功能:部署至功能应用程序命令。
我在Visual Studio代码Success
中看到了Terminal
消息
3:09:06 PM liveConnectMessageEnhancefunapp: Creating zip package...
3:09:07 PM liveConnectMessageEnhancefunapp: Starting deployment...
3:09:18 PM liveConnectMessageEnhancefunapp: Updating submodules.
3:09:19 PM liveConnectMessageEnhancefunapp: Preparing deployment for commit id 'f58cf57151'.
3:09:21 PM liveConnectMessageEnhancefunapp: Skipping build. Project type: Run-From-Zip
3:09:21 PM liveConnectMessageEnhancefunapp: Skipping post build. Project type: Run-From-Zip
3:09:24 PM messageEnhancefunapp: Syncing 0 function triggers with payload size 2 bytes successful.
3:09:25 PM messageEnhancefunapp: Updating D:\home\data\SitePackages\packagename.txt with deployment 20190110093910.zip
3:09:25 PM messageEnhancefunapp: Deployment successful.
Deployment to "messageEnhancefunapp" completed.
警告
C:\ Users \ deeku.nuget \ packages \ microsoft.net.sdk.functions \ 1.0.24 \ build \ netstandard1.0 \ Microsoft.NET.Sdk.Functions.Build.targets(41,5):警告:函数[CosmosDBTriggerCSharp]:在local.settings.json中缺少AzureWebJobsStorage的值。除HTTP之外,所有其他触发器均需要此设置。 [C:\ FunctionApps \ FunctionApps.csproj] C:\ Users \ deeku.nuget \ packages \ microsoft.net.sdk.functions \ 1.0.24 \ build \ netstandard1.0 \ Microsoft.NET.Sdk.Functions.Build.targets(41,5):警告:[C :\ FunctionApps \ FunctionApps.csproj]
但是当我导航到Azure Portal
时,我看到以下消息
您的应用当前处于只读模式,因为您正在从程序包文件中运行。从程序包运行时,文件系统是只读的,无法对文件进行任何更改。要进行任何更改,请更新zip文件和WEBSITE_RUN_FROM_PACKAGE应用程序设置中的内容。
答案 0 :(得分:1)
在您的示例中,您正在创建一个CosmosDBTrigger,如果您想捕获您的cosmos DB中的更改,可以使用它。但是,根据您的描述,您想捕获IoT中心中的更改。
我没有在Visual Studio Code中找到IoT Hub触发器,但是如果您使用的是Visual Studio完整版,则可以在此处找到IoT Hub触发器:
您只需要在此屏幕上设置连接,在该方法中,您将收到来自IoT中心的消息,您可以根据需要对其进行修改,并将其保存到Cosmos DB。
以下是关于同一主题的类似博客文章: https://medium.com/@avirup171/azure-iot-hub-azure-function-azure-cosmos-db-walkthrough-cc30d12d1055