如何在Visual Studio代码中创建和部署功能应用程序?

时间:2019-01-10 09:41:48

标签: c# azure visual-studio-code azure-functions

要求 创建一个Azure功能,该功能可监视对IoT中心的所有传入消息,并对消息进行一些修改后将其发送到Cosmos数据库

建筑

enter image description here

问题:无法创建Azure功能,该功能将传入的消息读取到IoT中心并发送到Cosmos DB

已执行的步骤

我已按照以下步骤使用Azure Function App创建和部署Visual Studio Code

  • 打开Visual Studio代码
  • 转到Azure Extension Panel

    enter image description here

  • 选择了C#语言

    enter image description here

  • 它创建了以下文件

    • .vscode
    • .gitignore
    • FunctionApps.csproj
    • host.json
    • localsettings.json
  • 现在,我单击了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应用程序设置中的内容。

1 个答案:

答案 0 :(得分:1)

在您的示例中,您正在创建一个CosmosDBTrigger,如果您想捕获您的cosmos DB中的更改,可以使用它。但是,根据您的描述,您想捕获IoT中心中的更改。

我没有在Visual Studio Code中找到IoT Hub触发器,但是如果您使用的是Visual Studio完整版,则可以在此处找到IoT Hub触发器:

Visual studio IoT Hub Trigger

您只需要在此屏幕上设置连接,在该方法中,您将收到来自IoT中心的消息,您可以根据需要对其进行修改,并将其保存到Cosmos DB。

以下是关于同一主题的类似博客文章: https://medium.com/@avirup171/azure-iot-hub-azure-function-azure-cosmos-db-walkthrough-cc30d12d1055