簡體   English   中英

如何在 Mac 本地運行 Timer-triggered Azure 函數?

[英]How to run Timer-triggered Azure Functions locally on Mac?

我想在本地開發環境(Node、OS X)中執行定時器觸發的 function,但它似乎需要對我擁有的 HTTP 觸發函數設置進行一些更改。

到目前為止,這是與定時器 function 相關的代碼:

/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": ""
  }
}

當我嘗試啟動 function 應用時:

 ~/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.

經過一番研究,我想出了一個我認為應該分享的工作設置。

我的原始設置的問題是:

  1. local.settings.json沒有"AzureWebJobsStorage": "UseDevelopmentStorage=true" 我已經啟動並運行了一個 HTTP 觸發功能,但似乎計時器觸發器需要該設置。 對於使用存儲模擬器時的本地開發,可以使用UseDevelopmentStorage=true 快捷方式

  2. 沒有安裝存儲模擬器。 在 Windows 上,它似乎是 Microsoft Azure SDK 的一部分和/或它可以作為獨立工具安裝。 但它不適用於 Mac 和 Linux。 但是,有一個開源替代方案可用: Azurite ,它將取代 Storage Emulator

作為參考,我創建了一個 Typescript 入門存儲庫,可以對其進行擴展以編寫自己的 Azure 計時器觸發函數: 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>"都可以。

在本地啟動 Azure function 后,您可以通過發送以下 POST 請求來執行它。 此方法適用於 HTTP 和事件網格觸發器。

URL: http://localhost:<your port>/admin/functions/<your function name>

正文有效負載: { "input": "test" }在應用程序/ json中

您可以從官方文檔中閱讀更多內容。 https://learn.microsoft.com/en-us/azure/azure-functions/functions-manually-run-non-http

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM