使用 Core Tools 在本機開發 Azure Functions

Azure Functions Core Tools 可讓您在本機電腦上開發和測試函式。 當您準備好時,您也可以使用 Core Tools 將程式代碼專案部署至 Azure,並使用應用程式設定。

您正在檢視本文的 C# 版本。 請務必選取文章頂端慣用的 Functions 程式設計語言。

如果您想要立即開始使用,請完成 Core Tools 快速入門文章

您正在檢視本文的 Java 版本。 請務必選取文章頂端慣用的 Functions 程式設計語言。

如果您想要立即開始使用,請完成 Core Tools 快速入門文章

您正在檢視本文的 JavaScript 版本。 請務必選取文章頂端慣用的 Functions 程式設計語言。

如果您想要立即開始使用,請完成 Core Tools 快速入門文章

您正在檢視本文的 PowerShell 版本。 請務必選取文章頂端慣用的 Functions 程式設計語言。

如果您想要立即開始使用,請完成 Core Tools 快速入門文章

您正在檢視本文的 Python 版本。 請務必選取文章頂端慣用的 Functions 程式設計語言。

如果您想要立即開始使用,請完成 Core Tools 快速入門文章

您正在檢視本文的 TypeScript 版本。 請務必選取文章頂端慣用的 Functions 程式設計語言。

如果您想要立即開始使用,請完成 Core Tools 快速入門文章

安裝 Azure Functions Core Tools

建議您依據本機開發電腦的作業系統來安裝 Core Tools。

下列步驟使用 Windows 安裝程式 (MSI) 來安裝 Core Tools v4.x。 如需其他套件型安裝程式的詳細資訊,請參閱 Core Tools 讀我檔案

根據您的 Windows 版本,下載並執行 Core Tools 安裝程式:

如果您之前使用 Windows 安裝程式 (MSI) 在 Windows 上安裝 Core Tools,則應該先從 [新增移除程式] 解除安裝舊版本,再安裝最新版本。

如需版本相關問題的說明,請參閱 Core Tools 版本

建立本機專案

重要

針對 Python,您必須在虛擬環境中執行 Core Tools 命令。 如需詳細資訊,請參閱 快速入門:從命令行在 Azure 中建立 Python 函式。

在終端機視窗中,或從命令提示字元執行下列命令,以在 MyProjFolder 資料夾中建立專案:

func init MyProjFolder --worker-runtime dotnet-isolated 

根據預設,此命令會建立一個專案,在目前的 .NET Core 長期支援 (LTS) 版本中,使用 Functions 主機執行同進程。 您可以使用 --target-framework 選項,以特定支援的 .NET 版本為目標,包括 .NET Framework。 如需詳細資訊,請參閱 func init 參考。

如需兩個 .NET 進程模型之間的比較,請參閱 程式模式比較一文

Java 會使用 Maven 原型來建立本機專案,以及您的第一個 HTTP 觸發函式。 您應該改為遵循命令列快速入門中的步驟,而不是使用 func initfunc new

func init MyProjFolder --worker-runtime javascript --model V4

此命令會建立使用所需 程序設計模型版本的 JavaScript 專案。

func init MyProjFolder --worker-runtime typescript --model V4

此命令會建立使用所需 程序設計模型版本的 TypeScript 專案。

func init MyProjFolder --worker-runtime powershell
func init MyProjFolder --worker-runtime python --model V2

此命令會建立使用所需 程序設計模型版本的 Python 專案。

當您在沒有 選項的情況下--worker-runtime執行func init時,系統會提示您選擇項目語言。 若要深入瞭解命令的可用選項 func init ,請參閱 func init 參考。

建立函式

若要將函式新增至專案, func new 請使用 --template 選項執行 命令來選取您的觸發程式範本。 下列範例會建立名為 MyHttpTrigger的 HTTP 觸發程式:

func new --template "Http Trigger" --name MyHttpTrigger

此範例會建立名為 MyQueueTrigger的佇列 儲存體 觸發程式:

func new --template "Azure Queue Storage Trigger" --name MyQueueTrigger

新增函式時適用下列考慮:

  • 當您在沒有 選項的情況下--template執行func new時,系統會提示您選擇範本。

  • func templates list使用 命令來查看語言可用範本的完整清單。

  • 當您新增連線至服務的觸發程式時,您也需要將參考 連接字串 或受控識別的應用程式設定新增至local.settings.json檔案。 以這種方式使用應用程式設定可防止您在程式碼中內嵌認證。 如需詳細資訊,請參閱 在本機使用應用程式設定。

  • Core Tools 也會將特定系結延伸模組的參考新增至 C# 專案。

若要深入瞭解命令的可用選項 func new ,請參閱 func new 參考。

將系結新增至函式

Functions 提供一組服務特定的輸入和輸出系結,可讓您的函式更輕鬆地連線到其他 Azure 服務,而不需要使用服務特定的用戶端 SDK。 如需詳細資訊,請參閱 Azure Functions 觸發程序和繫結概念

若要將輸入或輸出系結新增至現有的函式,您必須手動更新函式定義。

下列範例顯示將佇列 儲存體 輸出系結新增HTTP 觸發函式之後的函式定義:

因為 HTTP 觸發的函式也會傳回 HTTP 回應,因此函式會傳回 MultiResponse 物件,此物件同時代表 HTTP 和佇列輸出。

[Function("HttpExample")]
public static MultiResponse Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req,
    FunctionContext executionContext)
{

這個範例是包含輸出系結之 MultiResponse 物件的定義:

public class MultiResponse
{
    [QueueOutput("outqueue",Connection = "AzureWebJobsStorage")]
    public string[] Messages { get; set; }
    public IActionResult HttpResponse { get; set; }
}

將該範例套用至您自己的專案時,您可能需要變更 HttpRequestHttpRequestDataIActionResultHttpResponseData視您是否使用 ASP.NET Core 整合 而定。

當函式完成時,訊息會傳送至佇列。 定義輸出系結的方式取決於您的進程模型。 如需詳細資訊,包括您可以參考的範例系結程式代碼連結,請參閱 將系結新增至函式

@FunctionName("HttpExample")
public HttpResponseMessage run(
        @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) 
        HttpRequestMessage<Optional<String>> request, 
        @QueueOutput(name = "msg", queueName = "outqueue", 
        connection = "AzureWebJobsStorage") OutputBinding<String> msg, 
        final ExecutionContext context) {

如需詳細資訊,包括您可以參考的範例系結程式代碼連結,請參閱 將系結新增至函式

尚未提供Node.js模型 v4 的範例系結。

您定義輸出系結的方式取決於Node.js模型的版本。 如需詳細資訊,包括您可以參考的範例系結程式代碼連結,請參閱 將系結新增至函式

$outputMsg = $name
Push-OutputBinding -name msg -Value $outputMsg

如需詳細資訊,包括您可以參考的範例系結程式代碼連結,請參閱 將系結新增至函式

@app.route(route="HttpExample")
@app.queue_output(arg_name="msg", queue_name="outqueue", connection="AzureWebJobsStorage")
def HttpExample(req: func.HttpRequest, msg: func.Out [func.QueueMessage]) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

您定義輸出系結的方式取決於 Python 模型的版本。 如需詳細資訊,包括您可以參考的範例系結程式代碼連結,請參閱 將系結新增至函式

尚未提供Node.js模型 v4 的範例系結。

您定義輸出系結的方式取決於Node.js模型的版本。 如需詳細資訊,包括您可以參考的範例系結程式代碼連結,請參閱 將系結新增至函式

將系結新增至函式時,適用下列考慮:

  • 對於使用 function.json 組態檔定義函式的語言,Visual Studio Code 可簡化將系結新增至現有函式定義的程式。 如需詳細資訊,請參閱使用系結將函式 連線 至 Azure 服務。
  • 當您新增連接到服務的系結時,也必須將參考 連接字串 或受控識別的應用程式設定新增至local.settings.json檔案。 如需詳細資訊,請參閱 在本機使用應用程式設定。
  • 當您新增支援的系結時,當您的應用程式使用擴充功能套件組合時,應該已安裝延伸模組。 如需詳細資訊,請參閱 延伸模組套件組合。
  • 當您新增需要新系結延伸模組的系結時,也必須在 C# 專案中加入該特定系結延伸模組的參考。

如需詳細資訊,包括您可以參考的範例系結程式代碼連結,請參閱 將系結新增至函式

如需詳細資訊,包括您可以參考的範例系結程式代碼連結,請參閱 將系結新增至函式

如需詳細資訊,包括您可以參考的範例系結程式代碼連結,請參閱 將系結新增至函式

如需詳細資訊,包括您可以參考的範例系結程式代碼連結,請參閱 將系結新增至函式

如需詳細資訊,包括您可以參考的範例系結程式代碼連結,請參閱 將系結新增至函式

如需詳細資訊,包括您可以參考的範例系結程式代碼連結,請參閱 將系結新增至函式

啟動 Functions 執行時間

您必須先從專案的根目錄啟動 Functions 主機,才能執行或偵錯專案中的函式。 主機會啟用專案中所有函式的觸發程式。 使用此指令啟動本機執行時間:

mvn clean package 
mvn azure-functions:run
func start
npm install
npm start     

此命令必須在 虛擬環境中執行。

當 Functions 主機啟動時,它會輸出專案中的函式清單,包括任何 HTTP 觸發函式的 URL,如下列範例所示:

Found the following functions:
Host.Functions.MyHttpTrigger

Job host started
Http Function MyHttpTrigger: http://localhost:7071/api/MyHttpTrigger

在本機執行函式時,請記住下列考慮:

  • 根據預設,不會針對 HTTP 端點在本機強制執行授權。 這表示所有本機 HTTP 要求都會以 來處理 authLevel = "anonymous"。 如需詳細資訊,請參閱 HTTP 系結一文。 您可以使用 --enableAuth 選項在本機執行時要求授權。 如需詳細資訊,請參閱 func start

  • 您可以在本機執行需要存取 Azure 儲存體 服務的函式時,使用本機 Azurite 模擬器(佇列 儲存體、Blob 儲存體 和數據表 儲存體),而不需要連線到 Azure 中的這些服務。 使用本機模擬時,請務必先啟動 Azurite,再啟動本機主機(func.exe)。 如需詳細資訊,請參閱 本機記憶體模擬

  • 您可以使用本機 Azurite 模擬來符合 Python v2 背景工作角色的儲存需求。
  • 您可以在本機觸發非 HTTP 函式,而不需連線到實時服務。 如需詳細資訊,請參閱 執行本機函式

  • 當您在local.settings.json檔案中包含Application Insights 連線資訊時,本機記錄數據會寫入特定的Application Insights 實例。 若要將本機遙測數據與生產數據分開,請考慮使用個別的ApplicationInsights實例進行開發和測試。

  • 使用 Core Tools 1.x 版時,請改用 func host start 命令來啟動本機運行時間。

執行本機函式

當您的本機 Functions 主機 (func.exe) 執行時,您現在可以觸發個別函式來執行和偵錯函式程式代碼。 您執行個別函式的方式取決於其觸發程序類型。

注意

本主題中的範例會使用 cURL 工具,從終端機或命令提示字元傳送 HTTP 要求。 您可以使用您選擇的工具來將 HTTP 要求傳送至本地伺服器。 根據預設,cURL 工具適用於以 Linux 為基礎的系統和 Windows 10 組建 17063 和更新版本。 在較舊的 Windows 上,您必須先下載並安裝 cURL 工具

HTTP 觸發程式是透過將 HTTP 要求傳送至本機端點和埠,如func.exe輸出所示,其格式如下:

http://localhost:<PORT>/api/<FUNCTION_NAME>

在此 URL 範本機埠, <FUNCTION_NAME> 是函式或路由的名稱,而 <PORT> 是func.exe接聽的本機埠。

例如,這個 cURL 命令會從 GET 要求觸發 MyHttpTrigger 快速入門函式,其中包含 傳入查詢字串中的 name 參數:

curl --get http://localhost:7071/api/MyHttpTrigger?name=Azure%20Rocks

此範例與 Bash 殼層和 Windows 命令行中傳遞 名稱 的 POST 要求所呼叫的函式相同:

curl --request POST http://localhost:7071/api/MyHttpTrigger --data '{"name":"Azure Rocks"}'
curl --request POST http://localhost:7071/api/MyHttpTrigger --data "{'name':'Azure Rocks'}"

在本機呼叫 HTTP 端點時,適用下列考慮:

  • 您可以從瀏覽器提出 GET 要求,以在查詢字串中傳遞數據。 對於所有其他 HTTP 方法,您必須使用 cURL、Fiddler、Postman 或類似支援 POST 要求的 HTTP 測試工具。

  • 請務必使用 Functions 主機正在接聽的相同伺服器名稱和埠。 您在啟動函式主機時所產生的輸出中看到如下的端點。 您可以使用觸發程式所支援的任何 HTTP 方法呼叫此 URL。

發佈至 Azure

Azure Functions Core Tools 支援三種類型的部署:

部署類型 Command 描述
專案檔 func azure functionapp publish 使用 zip 部署,將函式項目檔直接部署至函式應用程式。
Azure 容器應用程式 func azurecontainerapps deploy 將容器化函式應用程式部署至現有的 Container Apps 環境。
Kubernetes 叢集 func kubernetes deploy 將 Linux 函式應用程式部署為自訂 Docker 容器至 Kubernetes 叢集。

您必須在 本機安裝 Azure CLIAzure PowerShell ,才能從 Core Tools 發佈至 Azure。 根據預設,Core Tools 會使用這些工具向 Azure 帳戶進行驗證。

如果您沒有安裝這些工具,您必須改為 取得部署期間要使用的有效存取令牌 。 您可以使用部署命令中的 選項來呈現存取令牌 --access-token

部署項目檔

若要將本機程式代碼發佈至 Azure 中的函式應用程式,請使用 func azure functionapp publish publish 命令,如下列範例所示:

func azure functionapp publish <FunctionAppName>

此命令會將項目檔從目前目錄發佈至 <FunctionAppName> ,做為.zip部署套件。 如果專案需要編譯,則會在部署期間從遠端完成。

Java 使用 Maven 將本機項目發佈至 Azure,而不是 Core Tools。 使用下列 Maven 命令將項目發佈至 Azure:

mvn azure-functions:deploy

當您執行此命令時,Azure 資源會在初始部署期間根據pom.xml檔案中的設定來建立。 如需詳細資訊,請參閱 將函式專案部署至 Azure

下列考慮適用於這類部署:

  • 發佈會覆寫遠端函式應用程式部署中的現有檔案。

  • 您必須已在 Azure 訂用帳戶中建立函式應用程式。 Core Tools 會將您的專案程式代碼部署至此函式應用程式資源。 若要瞭解如何使用 Azure CLI 或 Azure PowerShell 從命令提示字元或終端機視窗建立函式應用程式,請參閱 建立無伺服器執行的函式應用程式。 您也可以在 Azure 入口網站 中建立這些資源。 當您嘗試發佈至 <FunctionAppName> 訂用帳戶中不存在的 時,您會收到錯誤。

  • 項目資料夾可能包含不應發行的語言特定檔案和目錄。 排除的專案會列在根項目資料夾中的 .funcignore 檔案中。

  • 根據預設,您的專案會部署, 以便從部署套件執行。 若要停用此建議的部署模式,請使用 --nozip 選項

  • 遠端建置會在已編譯的專案上執行。 這可以使用 選項來控制--no-build

  • --publish-local-settings使用 選項,根據local.settings.json檔案中的值,在函式應用程式中自動建立應用程式設定。

  • 若要發佈至函式應用程式中的特定具名位置,請使用 --slot 選項

部署容器

Core Tools 可讓您將 容器化函式應用程式 部署至受控 Azure Container Apps 環境和您所管理的 Kubernetes 叢集。

使用下列 func azurecontainerapps deploy 命令將現有的容器映射部署至 Container Apps 環境:

func azurecontainerapps deploy --name <APP_NAME> --environment <ENVIRONMENT_NAME> --storage-account <STORAGE_CONNECTION> --resource-group <RESOURCE_GROUP> --image-name <IMAGE_NAME> [--registry-password] [--registry-server] [--registry-username]

當您部署至 Azure Container Apps 環境時,適用下列考慮:

  • 環境和記憶體帳戶必須已經存在。 您提供的記憶體帳戶 連接字串 是由已部署的函式應用程式使用。

  • 部署至 Container Apps 時,您不需要建立個別的函式應用程式資源。

  • 儲存體 連接字串 和其他服務認證是重要的秘密。 請務必使用 func azurecontainerapps deploy 安全地儲存任何腳本檔案,而且不會將它們儲存在任何可公開存取的原始檔控制系統中。 您可以 加密local.settings.json檔案 ,以取得新增的安全性。

如需詳細資訊,請參閱 裝載 Azure Functions 的 Azure Container Apps。

在本機使用應用程式設定

在 Azure 中的函數應用程式中執行時,函式所需的設定安全地儲存在應用程式設定中。 在本機開發期間,這些設定會改為新增至 local.settings.json 檔案中的 Values 集合。 local.settings.json 檔案也儲存本機開發工具使用的設定。

專案 local.settings.json 檔案中 Values 集合中的項目,是用來反映在 Azure 中鏡像函數應用程式應用程式設定中的項目。

使用本機配置檔時,適用下列考慮:

  • 因為local.settings.json可能包含秘密,例如 連接字串,所以您不應該將它儲存在遠端存放庫中。 Core Tools 可協助您加密此本機配置檔案,以改善安全性。 如需詳細資訊,請參閱本機設定檔。 您也可以 加密local.settings.json檔案 ,以取得新增的安全性。

  • 根據預設,當專案發佈至 Azure 時,不會自動移轉本機設定。 --publish-local-settings當您發佈項目檔以確保這些設定已新增至 Azure 中的函式應用程式時,請使用 選項。 ConnectionStrings區段中的值永遠不會發佈。 您也可以 隨時從local.settings.json檔案 上傳設定。

  • 您可以使用 Azure 中函式應用程式的設定,在local.settings.json檔案中下載和覆寫設定。 如需詳細資訊,請參閱 下載應用程式設定

  • 函式應用程式設定值也可以在程式碼中讀取為環境變數。 如需詳細資訊,請參閱環境變數
  • 函式應用程式設定值也可以在程式碼中讀取為環境變數。 如需詳細資訊,請參閱環境變數
  • 函式應用程式設定值也可以在程式碼中讀取為環境變數。 如需詳細資訊,請參閱環境變數
  • 函式應用程式設定值也可以在程式碼中讀取為環境變數。 如需詳細資訊,請參閱環境變數
  • 函式應用程式設定值也可以在程式碼中讀取為環境變數。 如需詳細資訊,請參閱環境變數

下載應用程式設定

從專案根目錄中,使用下列命令,從 myfunctionapp12345 Azure 中的應用程式下載所有應用程式設定:

func azure functionapp fetch-app-settings myfunctionapp12345

此命令會以來自 Azure 的值覆寫local.settings.json檔案中的任何現有設定。 當尚未出現時,會將新專案新增至集合。 如需詳細資訊,請參閱 func azure functionapp fetch-app-settings 命令。

下載記憶體 連接字串

核心工具也可讓您輕鬆地取得您有權存取的任何記憶體帳戶 連接字串。 從專案根目錄中,使用下列命令,從名為mystorage12345的記憶體帳戶下載 連接字串。

func azure storage fetch-connection-string mystorage12345

此命令會將名為 mystorage12345_STORAGE 的設定新增至 local.settings.json 檔案,其中包含帳戶的 連接字串mystorage12345。 如需詳細資訊,請參閱 func azure storage fetch-connection-string 命令。

若要改善開發期間的安全性,請考慮 加密local.settings.json檔案

將本機設定上傳至 Azure

當您不使用 --publish-local-settings 選項將專案檔發佈至 Azure 時,函式應用程式中不會設定local.settings.json檔案中的設定。 您一律可以使用 選項重新執行 func azure functionapp publish--publish-settings-only ,只上傳設定,而不重新發佈項目檔。

下列範例只會將 Values local.settings.json 檔案中的設定上傳至 Azure 中名為 myfunctionapp12345的函式應用程式:

func azure functionapp publish myfunctionapp12345 --publish-settings-only

加密本機配置檔案

為了改善本機設定中 連接字串 和其他重要數據的安全性,Core Tools 可讓您加密local.settings.json檔案。 當此檔案加密時,運行時間會在需要時自動解密設定,就像 Azure 中的應用程式設定一樣。 您也可以將本機加密的檔案解密,以使用設定。

使用下列命令來加密項目的本機設定檔:

func settings encrypt

使用下列命令來解密加密的本機設定,讓您可以使用它:

func settings decrypt

當配置檔案加密和解密時,檔案的 IsEncrypted 設定也會更新。

設定系結延伸模組

函式觸發程式和系結 會實作為 .NET 延伸模組 (NuGet) 套件。 若要能夠使用特定的系結延伸模組,該延伸模組必須安裝在專案中。

本節不適用於 Functions 運行時間 1.x 版。 在 1.x 版中,核心產品延伸模組中包含支持的系結。

針對 C# 類別庫專案,針對函式所需的系結延伸模組,新增特定 NuGet 套件的參考。 C# 文稿 (.csx) 項目必須使用 延伸模組套件組合。

函式提供 延伸模組套件 組合,可讓您輕鬆地在專案中使用系結延伸模組。 擴充功能套件組合,這些套件組合是在 host.json 檔案中設定版本和定義的,請為您的應用程式安裝一組完整的相容系結延伸模組套件。 您的host.json應該已啟用延伸模組套件組合。 如果基於某些原因,您需要在host.json檔案中新增或更新延伸模組套件組合,請參閱 延伸模組套件組合

如果您必須使用系結延伸模組或不支援套件組合中的擴充功能版本,則必須手動安裝擴充功能。 如需這類罕見的情況,請參閱 func extensions install 命令。

Core Tools 版本

Azure Functions Core Tools 的主要版本會連結到 Azure Functions 運行時間的特定主要版本。 例如,Core Tools 4.x 版支援 Functions 運行時間 4.x 版。 此版本是 Functions 運行時間和 Core Tools 的建議主要版本。 您可以在 Azure Functions Core Tools 存放庫中判斷最新版的 Core Tools

執行下列命令來判斷您目前 Core Tools 安裝的版本:

func --version

除非另有說明,否則本文中的範例適用於 4.x 版。

下列考慮適用於 Core Tools 安裝:

  • 您只能在指定的電腦上安裝一個版本的 Core Tools。

  • 升級至最新版本的 Core Tools 時,您應該使用用於原始安裝來執行升級的相同方法。 例如,如果您在 Windows 上使用 MSI,請卸載目前的 MSI 並安裝最新的 MSI。 或者,如果您使用 npm,請重新執行 npm install command

  • Core Tools 2.x 和 3.x 版搭配 2.x 和 3.x 版的 Functions 運行時間使用,這些版本已終止支援。 如需詳細資訊,請參閱 Azure Functions 執行階段版本概觀

  • 使用仍然支援的 Functions 運行時間 1.x 版時,需要 Core Tools 1.x 版。 此版本的 Core Tools 只能在 Windows 電腦上本機執行。 如果您目前在 1.x 版上執行,您應該考慮 今天將應用程式移轉至 4.x 版。

下一步

瞭解如何 使用 Azure Functions 核心工具來開發、測試及發佈 Azure 函式。 Azure Functions Core Tools 開放原始碼 並裝載於 GitHub 上。 若要提出 Bug 或功能要求, 請開啟 GitHub 問題