Функция Azure перестает работать, когда я использую зависимости, работает локально

#c# #azure-functions #azure-function-app #azure-functions-runtime #azure-storage-queues

#c# #azure-функции #azure-функция-приложение #azure-функции-среда выполнения #azure-storage-очереди

Вопрос:

Я пытаюсь настроить функцию Azure, основанную на Linux, в режиме потребления, запуск очереди. Он отлично работает локально при отладке (сказал каждый программист когда-либо), но при развертывании ничего не происходит. Я не могу найти никаких журналов.

Я начал сначала, загрузил пустую функцию — она работала, но как только я добавил свои собственные библиотеки, она перестала работать.

Затем я попытался удалить свои библиотеки и повторно загрузить функцию «hello world», но она по-прежнему не работает.

Это host.json:

    {
  "logging": {
    "fileLoggingMode": "always",
    "logLevel": {
      "default": "Information",
      "Host.Results": "Information",
      "Function": "Information",
      "Host.Aggregator": "Information"
    },
    "applicationInsights": {
      "samplingExcludedTypes": "Request",
      "samplingSettings": {
        "isEnabled": true
      }
    },
    "console": {
      "isEnabled": "true"
    }
  },
  "Values": {
    "AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=****;AccountKey=*****;BlobEndpoint=https://***.blob.core.windows.net/;TableEndpoint=https://*****.table.core.windows.net/;QueueEndpoint=https://****.queue.core.windows.net/;FileEndpoint=https://****.file.core.windows.net/",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet"
  },
  "version": "2.0"
}
  

Код функции (без моих библиотек) работает только при первой загрузке.

 [FunctionName("EmailQueueWorker")]
        //public static async Task Run(
        public static async Task Run(
            [QueueTrigger(queueName: "email", Connection = "AzureWebJobsStorage")] string queueItem,
            ILogger log
        )
        {
            log.LogWarning("Start run()");
        }
  

Что я делаю не так (или где я могу найти журналы? информация о приложении пуста)? Спасибо

Ответ №1:

Я столкнулся с той же проблемой неделю или две назад; Я бы поставил хорошие деньги, проблема в вашем подключении к очереди. Для сравнения, это мой полный и завершенный файл host.json для моей (рабочей) функции запуска очереди:

 {
    "version": "2.0",
    "logging": {
        "applicationInsights": {
            "samplingSettings": {
                "isEnabled": true
            }
        },
        "fileLoggingMode": "always",
        "logLevel": {
            "default": "Information",
            "Host.Results": "Error",
            "Function": "Trace",
            "Host.Aggregator": "Trace"
        }
    }
}
  

Строка подключения

Наш раздел LogLevel немного отличается, и вы заметите, что там нет никаких строк подключения. Я все еще новичок в Azure, но из того, что я узнал, это не то, куда они идут.

В Visual Studio 2019 щелкните правой кнопкой мыши на проекте, затем опубликуйте. В разделе Действия нажмите Управление настройками службы приложений Azure. Там вы можете добавить любые необходимые настройки строки подключения. Если вам нужно указать учетную запись хранилища, имя параметра должно быть именем учетной записи хранилища плюс «_STORAGE». Например, если ваша учетная запись хранилища была названа myVault, тогда имя параметра будет MyVault_STORAGE .

В VS Code это немного по-другому. Вы должны заглянуть в раздел Azure, Функции, а затем убедиться, что вы выбрали свою подписку Azure (не локальную копию!) и перейти к функции, Настройки приложения, где вы можете добавлять / редактировать.

На портале Azure вы можете управлять настройками приложения таким образом.

Журналы

На портале Azure начните с перехода в функциональное приложение. Нажмите на имя вашей основной функции. Теперь в новом меню для этой функции в подменю «Функции» нажмите «Функции». Теперь вы увидите список всех различных функций, составляющих вашу функцию запуска очереди. Среди них должно быть EmailQueueWorker — щелкните по нему. Теперь вы должны увидеть количество выполнений, и вы можете нажать на Монитор в меню левой руки, а затем войти в среднюю область. Вы можете запускать / останавливать / очищать по мере необходимости.

По какой-то причине я обнаружил, что вижу фактические данные журнала намного быстрее, когда я использую Visual Studio 2019 или VS Code для их потоковой передачи, а не веб-консоль. Иногда, похоже, возникает небольшая задержка с веб-консолью.