Как запускать запускаемые таймером функции Azure локально на Mac?

Я хочу выполнить функцию, запускаемую таймером, в моей локальной среде разработки (Node, OS X), но, похоже, это требует некоторых изменений в настройках функций, запускаемых по HTTP, которые у меня есть.

Вот код, связанный на данный момент с функцией таймера:

/cron-job/function.json определяет привязку ввода таймера, запускаемую каждую минуту. В нем также есть ссылка на точку входа в код (собранную из Typescript):

{
  "bindings": [
    {
      "type": "timerTrigger",
      "direction": "in",
      "name": "timer",
      "schedule": "0 */1 * * * *"
    }
  ],
  "scriptFile": "../dist/cron-job/index.js"
}

/cron-job/index.ts

import { AzureFunction, Context } from '@azure/functions'

const timerTrigger: AzureFunction = async function (
  context: Context,
  timer: any,
) {
  console.log('context', context)
  console.log('timer', timer)

  // move on with async calls...
}

export default timerTrigger

/local.settings.json

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "node",
    "AzureWebJobsStorage": ""
  }
}

Когда я пытаюсь запустить приложение-функцию:

 ~/Projects/test-api (dev) $ func start --verbose

Я получаю сообщение об ошибке:

Missing value for AzureWebJobsStorage in local.settings.json. This is required for all triggers other than httptrigger, kafkatrigger. You can run 'func azure functionapp fetch-app-settings <functionAppName>' or specify a connection string in local.settings.json.

Когда я добавляю параметр AzureWebJobsStorage в local.settings.json, я получаю еще одну ошибку:

The listener for function 'Functions.cron-job' was unable to start.
The listener for function 'Functions.cron-job' was unable to start. Microsoft.Azure.Storage.Common: Connection refused. System.Net.Http: Connection refused. System.Private.CoreLib: Connection refused.

person Max Ivanov    schedule 23.10.2020    source источник


Ответы (2)


После некоторого исследования я придумал рабочую установку, которой, как я решил, я должен поделиться.

Проблемы с моей исходной настройкой были:

  1. Не имея "AzureWebJobsStorage": "UseDevelopmentStorage=true" в local.settings.json. У меня уже была запущенная функция HTTP, но похоже, что для триггера таймера требуется эта настройка. Для локальной разработки при использовании эмулятора хранения UseDevelopmentStorage=true ярлык.

  2. Отсутствие установленного эмулятора хранилища. Похоже, что в Windows он является частью Microsoft Azure SDK и / или может быть установлен как отдельный инструмент. Однако он недоступен для Mac и Linux. Однако есть альтернатива с открытым исходным кодом: Azurite, которая собирается заменить эмулятор хранения.

В качестве справки я создал начальный репозиторий Typescript, который можно расширить для написания ваших собственных функций, запускаемых таймером Azure: azure-timer-function-starter-typescript

person Max Ivanov    schedule 23.10.2020

Чтобы запустить функцию таймера Azure локально на Mac, вы можете предоставить строку подключения учетной записи хранения в local.settings.json для AzureWebJobsStorage. Установить "AzureWebJobsStorage": "<storage account connection string>"

Строку подключения к учетной записи хранения можно получить на портале Azure. Создайте учетную запись хранения на портале Azure. Перейдите к ключам доступа к учетной записи хранения и скопируйте строку подключения.

В Windows оба параметра "AzureWebJobsStorage": "UseDevelopmentStorage=true" или "AzureWebJobsStorage": "<storage account connection string>" будут работать.

person Karan Inder Singh    schedule 19.05.2021