如何在 Mac 上本地 运行 定时器触发的 Azure Functions?
How to run Timer-triggered Azure Functions locally on Mac?
我想在我的本地开发环境(节点,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.
经过一些研究,我想出了一个我认为应该分享的工作设置。
我原来设置的问题是:
local.settings.json
中没有 "AzureWebJobsStorage": "UseDevelopmentStorage=true"
。我已经启动了 HTTP 触发功能 运行,但定时器触发器似乎需要该设置。本地开发使用存储模拟器时,可以使用UseDevelopmentStorage=true
shortcut
没有安装存储模拟器。它似乎在 Windows 上是 Microsoft Azure SDK and/or 的一部分,它可以作为独立工具安装。但它不适用于 Mac 和 Linux。然而,有一个 open-source 替代方案可用:Azurite, which is going to replace the Storage Emulator.
作为参考,我创建了一个 Typescript 入门存储库,可以对其进行扩展以编写您自己的 Azure Timer-triggered 函数:azure-timer-function-starter-typescript
要在 Mac 上本地 运行 Azure 计时器功能,您可以在 local.settings.json 中为 AzureWebJobsStorage 提供存储帐户连接字符串。设置 "AzureWebJobsStorage": "<storage account connection string>"
您可以从 Azure 门户获取存储帐户连接字符串。在 Azure 门户中创建存储帐户。转到存储帐户访问密钥并复制连接字符串。
在 Windows 上,设置 "AzureWebJobsStorage": "UseDevelopmentStorage=true"
或 "AzureWebJobsStorage": "<storage account connection string>"
都可以。
我想在我的本地开发环境(节点,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.
经过一些研究,我想出了一个我认为应该分享的工作设置。
我原来设置的问题是:
local.settings.json
中没有"AzureWebJobsStorage": "UseDevelopmentStorage=true"
。我已经启动了 HTTP 触发功能 运行,但定时器触发器似乎需要该设置。本地开发使用存储模拟器时,可以使用UseDevelopmentStorage=true
shortcut没有安装存储模拟器。它似乎在 Windows 上是 Microsoft Azure SDK and/or 的一部分,它可以作为独立工具安装。但它不适用于 Mac 和 Linux。然而,有一个 open-source 替代方案可用:Azurite, which is going to replace the Storage Emulator.
作为参考,我创建了一个 Typescript 入门存储库,可以对其进行扩展以编写您自己的 Azure Timer-triggered 函数:azure-timer-function-starter-typescript
要在 Mac 上本地 运行 Azure 计时器功能,您可以在 local.settings.json 中为 AzureWebJobsStorage 提供存储帐户连接字符串。设置 "AzureWebJobsStorage": "<storage account connection string>"
您可以从 Azure 门户获取存储帐户连接字符串。在 Azure 门户中创建存储帐户。转到存储帐户访问密钥并复制连接字符串。
在 Windows 上,设置 "AzureWebJobsStorage": "UseDevelopmentStorage=true"
或 "AzureWebJobsStorage": "<storage account connection string>"
都可以。