如何在Mac上本地运行计时器触发的Azure函数?

au9on6nz  于 2023-06-24  发布在  Mac
关注(0)|答案(3)|浏览(177)

我想在我的本地开发环境(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.
kd3sttzy

kd3sttzy1#

经过一些研究,我想出了一个工作设置,我想我应该分享。
我的原始设置存在的问题是:

  1. 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
mlmc2os5

mlmc2os52#

要在Mac上本地运行Azure Timer函数,您可以在local.settings.json中为AzureWebJobsStorage提供存储帐户连接字符串。设置"AzureWebJobsStorage": "<storage account connection string>"
您可以从Azure门户获取存储帐户连接字符串。在Azure门户中创建存储帐户。转到存储帐户访问密钥并复制连接字符串。
在Windows上,设置"AzureWebJobsStorage": "UseDevelopmentStorage=true""AzureWebJobsStorage": "<storage account connection string>"都可以工作。

dfty9e19

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

相关问题