Как создать и развернуть приложение функции в коде Visual Studio? - PullRequest
0 голосов
/ 10 января 2019

Требование Создайте функцию Azure, которая отслеживает все входящие сообщения в IoT Hub и отправляет ее в базу данных Cosmos после внесения некоторых изменений в сообщения

Архитектура

enter image description here

Проблема : невозможно создать функцию Azure, которая считывает входящие сообщения в IoT Hub и отправляет их в 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 и сопоставил CosmoDB, который уже создан на портале Azure. который генерируется ниже c # class

    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) , набрав «deploy to function app» и выполнив команду Azure Functions: Deploy to Function App .

И я вижу Success сообщение в Visual Studio Code 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]: отсутствует значение для AzureWebJobsStorage в local.settings.json. Это требуется для всех триггеров, кроме 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 голосов
/ 10 января 2019

В вашем примере вы создаете CosmosDBTrigger, который можно использовать, если вы хотите зафиксировать изменения в вашей базе данных cosmos. Но, основываясь на вашем описании, вы хотите зафиксировать изменения в IoT Hub.

Я не нашел триггер IoT Hub в коде Visual Studio, но если вы используете полную версию Visual Studio, вы можете найти там триггер IoT Hub:

Visual studio IoT Hub Trigger

Вам просто нужно настроить соединение на этом экране, и в этом методе у вас будет сообщение от IoT Hub, вы можете изменить его по своему усмотрению и сохранить в Cosmos DB.

Вот аналогичное сообщение в блоге на ту же тему: https://medium.com/@avirup171/azure-iot-hub-azure-function-azure-cosmos-db-walkthrough-cc30d12d1055

...