我想在我的本地开发环境(Node,OS X)中执行一个定时器触发的函数,但似乎需要对我的HTTP触发函数设置进行一些更改。
下面是到目前为止与timer函数相关的代码:/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.
3条答案
按热度按时间kd3sttzy1#
经过一些研究,我想出了一个工作设置,我想我应该分享。
我的原始设置存在的问题是:
local.settings.json
中没有"AzureWebJobsStorage": "UseDevelopmentStorage=true"
。我已经有了一个HTTP触发函数并运行,但计时器触发器似乎需要该设置。对于使用存储模拟器时的本地开发,可以使用UseDevelopmentStorage=true
快捷方式。1.未安装Storage Emulator。在Windows上,它似乎是Microsoft Azure SDK的一部分,并且/或者可以作为独立工具安装。它不适用于Mac和Linux。然而,有一个开源的替代方案可用:Azurite,也就是replace the Storage Emulator。
作为参考,我创建了一个Typescript starter存储库,可以扩展它来编写自己的Azure Timer触发函数:azure-timer-function-starter-typescript
mlmc2os52#
要在Mac上本地运行Azure Timer函数,您可以在local.settings.json中为AzureWebJobsStorage提供存储帐户连接字符串。设置
"AzureWebJobsStorage": "<storage account connection string>"
您可以从Azure门户获取存储帐户连接字符串。在Azure门户中创建存储帐户。转到存储帐户访问密钥并复制连接字符串。
在Windows上,设置
"AzureWebJobsStorage": "UseDevelopmentStorage=true"
或"AzureWebJobsStorage": "<storage account connection string>"
都可以工作。dfty9e193#
在本地启动Azure函数后,您可以通过发送以下POST请求来执行它。此方法不适用于HTTP和事件网格触发器。
网址:
http://localhost:<your port>/admin/functions/<your function name>
车身有效载荷:
{ "input": "test" }
in application/json你可以从官方文件中读到更多。https://learn.microsoft.com/en-us/azure/azure-functions/functions-manually-run-non-http