撰寫 Azure Functions 並在本機進行測試

雖然您可以在 Azure 入口網站開發和測試 Azure Functions,但許多開發人員偏好本機開發體驗。 當您使用 Functions 時,使用您慣用的程式代碼編輯器和開發工具,在本機電腦上建立及測試函式會變得更容易。 您的本機函式可以連線到即時 Azure 服務,且您可以使用完整的 Functions 執行階段在本機電腦上進行偵錯。

本文提供您慣用語言的特定開發環境連結。 它也提供一些本機開發的共用指引,例如使用 local.settings.json 檔案

本機開發環境

您在本機電腦上開發函式的方式取決於您 的語言 和工具喜好設定。 下表中的環境支援本機開發:

Environment 語言 描述
Visual Studio Code C# (處理中)
C# (隔離的背景工作行程)
JavaScript
PowerShell
Python
適用於 VS CodeAzure Functions 擴充功能會將 Functions 支援新增至 VS Code。 需要核心工具。 使用 Core Tools 2.x 版時,支援在 Linux、macOS 和 Windows 上進行開發。 若要深入瞭解,請參閱 使用Visual Studio Code 建立您的第一個函式。
命令提示字元或終端機 C# (處理中)
C# (隔離的背景工作行程)
JavaScript
PowerShell
Python
Azure Functions Core Tools 提供核心運行時間和範本來建立可啟用本機開發的函式。 2.x 版支援 Linux、macOS 和 Windows 上的開發。 所有環境都依賴本機 Functions 運行時間的核心工具。
Visual Studio C# (處理中)
C# (隔離的背景工作行程)
從 Visual Studio 2019 開始,Azure Functions 工具包含在 Visual StudioAzure 開發工作負載中。 可讓您在類別庫中編譯函式,並將.dll發佈至 Azure。 包含用於本機測試的核心工具。 若要深入瞭解,請參閱 使用Visual Studio開發 Azure Functions。
馬文 (各種) Java Maven 原型支援 Core Tools,以啟用 Java 函式的開發。 2.x 版支援 Linux、macOS 和 Windows 上的開發。 若要深入瞭解,請參閱 使用 Java 和 Maven 建立您的第一個函式。 也支援使用 EclipseIntelliJ IDEA 進行開發。

注意

由於在 Azure 入口網站 中編輯函式程式碼的限制,您應該在本機開發函式,並將程式代碼專案發佈至 Azure 中的函式應用程式。 如需詳細資訊,請參閱 Azure 入口網站 中的開發限制

每個本機開發環境都可讓您建立函式應用程式專案,並使用預先定義的函式範本來建立新的函式。 每個工具都會使用 Core Tools,讓您可以如同任何其他應用程式一樣,針對您自己的電腦上實際 Functions 運行時間測試及偵錯函式。 您也可以將函式應用程式專案從上述任何環境發佈至 Azure。

本機項目檔

Functions 專案目錄包含專案根資料夾中的下列檔案,不論語言為何:

檔案名稱 描述
host.json 若要深入瞭解,請參閱 host.json參考
local.settings.json 設定 Core Tools 在本機執行時使用,包括應用程式設定。 若要深入瞭解,請參閱本機配置檔。
gitignore。 防止不小心將local.settings.json檔案發佈到 Git 存放庫。 若要深入瞭解,請參閱本機配置檔。
.vscode\extensions.json 設定 在 Visual Studio Code 中開啟項目資料夾時所使用的檔案。

專案中的其他檔案取決於您的語言和特定函式。 如需詳細資訊,請參閱語言的開發人員指南。

本機配置檔案

local.settings.json檔案會儲存本機開發工具所使用的應用程式設定和設定。 只有在您在本機執行專案時,才會使用local.settings.json檔案中的 設定。 當您將專案發佈至 Azure 時,請務必將任何必要的設定新增至函式應用程式的應用程式設定。

重要

因為local.settings.json可能包含秘密,例如 連接字串,所以您不應該將它儲存在遠端存放庫中。 支援 Functions 的工具提供將local.settings.json檔案中的設定與 部署專案之函式應用程式中的應用程式設定 同步處理的方式。

本機配置檔案具有下列結構:

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "<language worker>",
    "AzureWebJobsStorage": "<connection-string>",
    "MyBindingConnection": "<binding-connection-string>",
    "AzureWebJobs.HttpExample.Disabled": "true"
  },
  "Host": {
    "LocalHttpPort": 7071,
    "CORS": "*",
    "CORSCredentials": false
  },
  "ConnectionStrings": {
    "SQLConnectionString": "<sqlclient-connection-string>"
  }
}

當您在本機執行專案時,支援這些設定:

設定 描述
IsEncrypted 當此設定設為 true時,所有值都會使用本機計算機密鑰加密。 與命令搭配 func settings 使用。 預設值為 false。 當本機計算機上包含秘密時,您可能會想要加密本機電腦上的local.settings.json檔案,例如服務 連接字串。 主機會在執行時自動解密設定。 嘗試讀取本機加密設定之前, func settings decrypt 請先使用 命令。
Values 專案在本機執行時所使用的應用程式設定集合。 這些索引鍵/值 (string-string) 群組會對應至 Azure 中函式應用程式中的應用程式設定,例如 AzureWebJobsStorage。 許多觸發程式和系結都有參考 連接字串 應用程式設定的屬性,例如 ConnectionBlob 記憶體觸發程式。 針對這些屬性,您需要在陣列中 Values 定義的應用程式設定。 如需常用設定的清單,請參閱後續數據表。
值必須是字串,而不是 JSON 對象或陣列。 設定名稱不能包含雙底線 (__), 不應該包含冒號 (:)。 運行時間會保留雙底線字元,並保留冒號以支援 相依性插入
Host 本節中的 設定 會在本機執行專案時自定義 Functions 主機進程。 這些設定與host.json設定不同,當您在 Azure 中執行專案時,也會套用這些設定。
LocalHttpPort 設定執行本機 Functions 主機 (func host startfunc run) 時所使用的預設埠。 --port命令行選項的優先順序高於此設定。 例如,在 Visual Studio IDE 中執行時,您可以流覽至 [項目屬性 -> 偵錯] 視窗,並在可在 [Application Arguments] 字段中提供的命令中明確指定埠號碼,以變更埠號碼 host start --port <your-port-number>
CORS 定義允許 跨原始來源資源分享 (CORS) 的來源。 原始來源會以逗號分隔清單的形式提供,不含空格。 支援通配符值 \ ,允許來自任何來源的要求。
CORSCredentials 當設定為 true時,允許 withCredentials 要求。
ConnectionStrings 集合。 請勿將此集合用於函式系結所使用的 連接字串。 此集合只供通常從ConnectionStrings組態檔的 區段取得 連接字串 的架構使用,例如 Entity Framework。 此物件中的 連線 字串會新增至具有 提供者類型的環境System.Data.SqlClient。 此集合中的專案不會與其他應用程式設定一起發佈至 Azure。 您必須明確地將這些值新增至 Connection strings 函式應用程式設定的集合。 如果您要在函式程式代碼中建立 SqlConnection ,您應該將 連接字串 值與其他連線儲存在入口網站中的 Application 設定

在本機執行時,陣列中可以包含 Values 下列應用程式設定:

設定 描述
AzureWebJobsStorage 儲存體 帳戶 連接字串 或
UseDevelopmentStorage=true
包含 Azure 記憶體帳戶的 連接字串。 使用 HTTP 以外的觸發程式時需要 。 如需詳細資訊,請參閱 AzureWebJobsStorage 參考。
當您在 本機安裝 Azurite 模擬器 並設定 AzureWebJobsStorageUseDevelopmentStorage=true時,Core Tools 會使用模擬器。 如需詳細資訊,請參閱 本機記憶體模擬器
AzureWebJobs.<FUNCTION_NAME>.Disabled true|false 若要在本機執行時停用函式,請將 新增 "AzureWebJobs.<FUNCTION_NAME>.Disabled": "true" 至集合,其中 <FUNCTION_NAME> 是函式的名稱。 若要深入瞭解,請參閱 如何在 Azure Functions 中停用函式。
FUNCTIONS_WORKER_RUNTIME dotnet
dotnet-isolated
node
java
powershell
python
指出 Functions 執行時間的目標語言。 Functions 運行時間 2.x 版和更新版本的必要專案。 Core Tools 會為您的項目產生此設定。 若要深入瞭解,請參閱 FUNCTIONS_WORKER_RUNTIME 參考。
FUNCTIONS_WORKER_RUNTIME_VERSION ~7 表示在本機執行時使用PowerShell 7。 如果未設定,則會使用 PowerShell Core 6。 只有在本機執行時,才會使用此設定。 PowerShell 運行時間版本是由 powerShellVersion 月臺組態設定所決定,在 Azure 中執行時,可在 入口網站中設定。

同步處理設定

當您在本機開發函式時,應用程式所需的任何本機設定也必須出現在部署程式碼之函式應用程式的應用程式設定中。 您可能也需要將目前的設定從函式應用程式下載到本機專案。 雖然您可以在 Azure 入口網站 中手動設定應用程式設定,但下列工具也可讓您同步處理應用程式設定與專案中的本機設定:

觸發和繫結

當您在本機開發函式時,必須考慮觸發程式和系結行為。 針對 HTTP 觸發程式,您可以使用 直接在本機電腦上 http://localhost/呼叫 HTTP 端點。 針對非 HTTP 觸發的函式,有數個選項可在本機執行:

  • 在本機開發期間測試系結的最簡單方式,就是使用以即時 Azure 服務為目標的 連接字串。 您可以在 local.settings.json 檔案的陣列中Values新增適當的 連接字串 設定,以即時服務為目標。 當您這樣做時,測試期間的本機執行會影響即時服務數據。 因此,請考慮在開發和測試期間設定不同的服務,然後在生產期間切換至不同的服務。
  • 針對記憶體型觸發程式,您可以使用本機 記憶體模擬器
  • 您可以使用特殊的系統管理員端點,手動執行非 HTTP 觸發程式函式。 如需詳細資訊,請參閱 手動執行非 HTTP 觸發的函式

在本機測試期間,您必須在本機執行 Core Tools (func.exe) 所提供的主機。 如需詳細資訊,請參閱 Azure Functions Core Tools

本機記憶體模擬器

在本機開發期間,您可以在測試具有 Azure 儲存體 系結的函式時使用本機 Azurite 模擬器(佇列 儲存體、Blob 儲存體 和數據表 儲存體),而不需要連線到遠端記憶體服務。 Azurite 與 Visual Studio Code 和 Visual Studio 整合,您也可以使用 npm 從命令提示字元執行它。 如需詳細資訊,請參閱使用 Azurite 模擬器進行本機 Azure 儲存體開發

local.settings.json檔案集合中的 Values 下列設定會告知本機 Functions 主機使用 Azurite 作為預設 AzureWebJobsStorage 連線:

"AzureWebJobsStorage": "UseDevelopmentStorage=true"

使用此設定值時,當做連線使用AzureWebJobsStorage做為其連線的任何 Azure 儲存體 觸發程式或系結,都會在本機執行時連接到 Azurite。 在本機執行期間使用記憶體模擬時,請記住這些考慮:

  • 您必須安裝並執行 Azurite。
  • 在發佈至 Azure 之前,您應該先測試與 Azure 服務的實際記憶體連線。
  • 當您發布項目時,請勿將 AzureWebJobsStorage 設定發佈為 UseDevelopmentStorage=true。 在 Azure 中,此AzureWebJobsStorage設定一律是函式應用程式所使用的記憶體帳戶 連接字串。 如需詳細資訊,請參閱AzureWebJobsStorage

下一步