Azure Functions 開發人員指南

在 Azure Functions 中,不論您慣用的語言或開發環境為何,所有函式都會共用一些核心技術概念和元件。 本文為特定語言。 選擇文章頂端的慣用語言。

本文假設您已閱讀 Azure Functions 概觀

如果您想要直接進入,您可以使用 Visual Studio、Visual Studio Code 或從命令提示字元完成快速入門教學課程。

如果您想要直接進入,您可以使用 Maven (命令行)、Eclipse、IntelliJ IDEA、GradleQuarkusSpring Cloud 或 Visual Studio Code 完成快速入門教學課程。

如果您想要直接進入,您可以使用 Visual Studio Code 或從命令提示字元完成快速入門教學課程。

如果您想要直接進入,您可以使用 Visual Studio Code 或從命令提示字元完成快速入門教學課程。

如果您想要直接進入,您可以使用 Visual Studio Code 或從命令提示字元完成快速入門教學課程。

如果您想要直接進入,您可以使用 Visual Studio Code 或從命令提示字元完成快速入門教學課程。

程式代碼專案

Azure Functions 的核心是語言特定的程式代碼專案,可實作一或多個稱為 式的程式碼執行單位。 函式只是根據事件、回應 HTTP 要求或排程在 Azure 雲端中執行的方法。 將 Azure Functions 程式代碼專案視為在 Azure 中執行時,組織、部署及共同管理專案中個別函式的機制。 如需詳細資訊,請參閱 組織您的函式

您設定程式代碼專案的方式,以及指出專案中哪些方法是函式的方式,取決於您專案的開發語言。 如需詳細的語言特定指引,請參閱 C# 開發人員指南

您設定程式代碼專案的方式,以及指出專案中哪些方法是函式的方式,取決於您專案的開發語言。 如需特定語言的指引,請參閱 Java開發人員指南

您設定程式代碼專案的方式,以及指出專案中哪些方法是函式的方式,取決於您專案的開發語言。 如需特定語言的指引,請參閱 Node.js 開發人員指南

您設定程式代碼專案的方式,以及指出專案中哪些方法是函式的方式,取決於您專案的開發語言。 如需特定語言的指引,請參閱 PowerShell 開發人員指南

您設定程式代碼專案的方式,以及指出專案中哪些方法是函式的方式,取決於您專案的開發語言。 如需特定語言的指引,請參閱 Python 開發人員指南

所有函式都必須有觸發程式,其會定義函式的啟動方式,並且可以提供函式的輸入。 您的函式可以選擇性地定義輸入和輸出系結。 這些系結可簡化與其他服務的連線,而不需要使用用戶端 SDK。 如需詳細資訊,請參閱 Azure Functions 觸發程序和繫結概念

Azure Functions 提供一組語言特定的專案和函式範本,可讓您輕鬆地建立新的程式碼專案,並將函式新增至您的專案。 您可以使用任何支援 Azure Functions 開發的工具,使用這些範本來產生新的應用程式和函式。

開發工具

下列工具會以慣用的語言提供 Azure Functions 的整合開發和發佈體驗:

這些工具與 Azure Functions Core Tools 整合,讓您可以使用 Functions 運行時間在本機電腦上執行和偵錯。 如需詳細資訊,請參閱 在本機撰寫和測試 Azure Functions。

Azure 入口網站 也有一個編輯器,可讓您直接在入口網站中更新程式代碼和 function.json 定義檔。 您應該只使用此編輯器進行小型變更,或建立概念證明函式。 您應該盡可能在本機開發函式。 如需詳細資訊,請參閱在 Azure 入口網站 中建立您的第一個函式

只有使用 function.json 檔案的 Node.js 第 3 版才支援入口網站編輯。

只有使用 function.json 檔案的 Python 第 1 版才支援入口網站編輯。

部署

當您將程式代碼專案發佈至 Azure 時,基本上會將專案部署到現有的函式應用程式資源。 函數應用程式在 Azure 中提供函式執行所在的執行內容。 這是部署及管理函式的單位。 從 Azure 資源的觀點來看,函式應用程式相當於 Azure App 服務 中的網站資源 (Microsoft.Web/sites),這相當於 Web 應用程式。

函數應用程式是由一或多個共同管理、部署和調整的個別函式所組成。 函式應用程式中的所有函式都會共用相同的定價方案部署方法和運行時間版本。 如需詳細資訊,請參閱 如何管理函式應用程式

當函式應用程式和任何其他必要資源尚未存在於 Azure 中時,您必須先建立這些資源,才能部署項目檔。 您可以使用下列其中一種方式來建立這些資源:

除了以工具為基礎的發佈之外,Functions 還支援將原始程式碼部署到現有函式應用程式的其他技術。 如需詳細資訊,請參閱 Azure Functions 中的部署技術。

服務 連線

任何雲端式計算服務的主要需求是讀取數據,並將數據寫入其他雲端服務。 函式提供一組廣泛的系結,可讓您更輕鬆地連線到服務,而不需要使用用戶端 SDK。

不論您使用 Functions 所提供的系結延伸模組,還是直接使用用戶端 SDK,您都會安全地儲存連線數據,而且不會包含在程式碼中。 如需詳細資訊,請參閱 連線。

繫結

Functions 提供許多 Azure 服務和少數第三方服務的系結,這些服務會實作為延伸模組。 如需詳細資訊,請參閱 支援系結的完整清單。

系結延伸模組可以同時支援輸入和輸出,而且許多觸發程式也會做為輸入系結。 系結可讓您設定與服務的連線,讓 Functions 主機可以為您處理資料存取。 如需詳細資訊,請參閱 Azure Functions 觸發程序和繫結概念

如果您在系結發生錯誤時發生問題,請參閱 Azure Functions 系結錯誤碼 檔。

用戶端 SDK

雖然 Functions 提供系結來簡化函式程式代碼中的數據存取,但如果您偏好的話,您仍然可以在專案中使用用戶端 SDK 直接存取指定的服務。 如果函式需要系結延伸模組不支援的基礎 SDK 功能,您可能需要直接使用用戶端 SDK。

使用用戶端 SDK 時,您應該使用相同的程式來儲存和存取系結延伸模組所使用的 連接字串

當您在函式中建立用戶端 SDK 實例時,應該會從 環境變數取得用戶端所需的連線資訊。

當您在函式中建立用戶端 SDK 實例時,應該會從 環境變數取得用戶端所需的連線資訊。

當您在函式中建立用戶端 SDK 實例時,應該會從 環境變數取得用戶端所需的連線資訊。

當您在函式中建立用戶端 SDK 實例時,應該會從 環境變數取得用戶端所需的連線資訊。

當您在函式中建立用戶端 SDK 實例時,應該會從 環境變數取得用戶端所需的連線資訊。

連線

作為安全性最佳做法,Azure Functions 會利用 Azure App 服務 的應用程式設定功能,協助您更安全地儲存連線至其他服務所需的字串串、密鑰和其他令牌。 Azure 中的應用程式設定會加密儲存,而且可在運行時間由您的應用程式存取為環境變數 namevalue 組。 針對需要連接屬性的觸發程式和系結,您可以設定應用程式設定名稱,而不是實際的 連接字串。 您無法直接使用 連接字串 或索引鍵來設定系結。

例如,請考慮具有 屬性的 connection 觸發程序定義。 您不是 連接字串,而是設定connection為包含 連接字串 的環境變數名稱。 使用此秘密存取策略可讓應用程式更安全,並讓您更輕鬆地變更環境之間的連線。 為了獲得更高的安全性,您可以使用身分識別型連線。

預設設定提供者會使用環境變數。 這些變數是在 Azure 中執行時,以及在本機開發時的本機配置檔中定義於應用程式設定中。

連接值

連接名稱解析為單一確切值時,執行時間會將此值視為連接字串,這通常包含秘密。 連接字串 的詳細數據取決於您連線的服務。

不過,聯機名稱也可以參考多個組態專案的集合,這對於設定 身分識別型連線很有用。 您可以使用以雙底線 __ 結尾的共用前置詞,將環境變數當作集合。 接著,可以將連接名稱設定為這個前置詞來參考群組。

例如, connection Azure Blob 觸發程式定義的 屬性可能是 Storage1。 只要沒有名為的環境變數所設定的單一字串值,就可以使用名為 Storage1Storage1__blobServiceUri 的環境變數來通知blobServiceUri連線的屬性。 每個服務的連接屬性不同。 請參閱使用連線之元件的檔。

注意

使用 Azure 應用程式組態金鑰保存庫 來提供受控識別連線的設定時,設定名稱應該使用有效的索引鍵分隔符,例如 :/ 取代 __ ,以確保正確解析名稱。

例如: Storage1:blobServiceUri

設定以身分識別為基礎的連接

Azure Functions 中的某些連線可以設定為使用身分識別,而不是秘密。 支援取決於使用連接的延伸模組。 在某些情況下,即使您連線的服務支援以身分識別為基礎的連線,Functions 中仍可能需要連接字串。 如需使用受控識別設定函式應用程式的教學課程,請參閱 使用身分識別型連線建立函式應用程式教學課程

注意

在取用或彈性 進階版 方案中執行時,您的應用程式WEBSITE_AZUREFILESCONNECTIONSTRING會在函式應用程式所使用的記憶體帳戶上連線到 Azure 檔案儲存體 時使用和 WEBSITE_CONTENTSHARE 設定。 存取檔案共享時,Azure 檔案儲存體 不支援使用受控識別。 如需詳細資訊,請參閱 Azure 檔案儲存體 支持的驗證案例

下列元件支援身分識別型連線:

連線 來源 支援的方案 深入了解
Azure Blob 觸發程式和系結 全部 Azure Blob 擴充功能 5.0.0 版或更新版本
延伸模組套件組合 3.3.0 或更新版本
Azure 隊列觸發程式和系結 全部 Azure 隊列擴充功能 5.0.0 版或更新版本
延伸模組套件組合 3.3.0 或更新版本
Azure 數據表 (使用 Azure 儲存體 時) 全部 Azure 數據表擴充功能 1.0.0 版或更新版本
延伸模組套件組合 3.3.0 或更新版本
Azure SQL Database 全部 使用受控識別和 SQL 系結將函式應用程式 連線 至 Azure SQL
Azure 事件中樞 觸發程式和系結 全部 Azure 事件中樞 5.0.0 版或更新版本
延伸模組套件組合 3.3.0 或更新版本
Azure 服務匯流排 觸發程式和系結 全部 Azure 服務匯流排 5.0.0 版或更新版本
延伸模組套件組合 3.3.0 或更新版本
Azure 事件方格 輸出系結 全部 Azure 事件方格 3.3.0 版或更新版本
延伸模組套件組合 3.3.0 或更新版本
Azure Cosmos DB 觸發程式和系結 全部 Azure Cosmos DB 擴充功能 4.0.0 版或更新版本
延伸模組套件組合 4.0.2 或更新版本
Azure SignalR 觸發程式和系結 全部 Azure SignalR 擴充功能 1.7.0 版或更新版本
延伸模組套件組合 3.6.1 或更新版本
Durable Functions 儲存提供者 (Azure 儲存體) 全部 Durable Functions 擴充功能 2.7.0 版或更新版本
延伸模組套件組合 3.3.0 或更新版本
需要主機的記憶體 (“AzureWebJobs 儲存體”) 全部 使用身分識別 連線裝載記憶體

主控於 Azure Functions 服務時,以身分識別為基礎的連接會使用受控識別。 雖然可以使用 credentialclientID 屬性指定使用者指派的身分識別,但預設會使用系統指派的身分識別。 請注意,不支援使用資源標識符設定使用者指派的身分識別。 在其他內容中執行時,例如本機開發,會改用您的開發人員身分識別,但您可以自定義此身分識別。 請參閱 使用身分識別型連線進行本機開發。

授與權限給身分識別

正在使用的任何身分識別,都必須具有執行預期動作的權限。 對於大部分的 Azure 服務,這表示您必須 使用內建或自定義角色,在 Azure RBAC 中指派角色,以提供這些許可權。

重要

部分權限可能會由所有內容都不需要的目標服務公開。 可以的話,請遵循最低權限原則,只授與身分識別所需的權限。 例如,如果應用程式只需要能夠從數據源讀取,請使用只有讀取許可權的角色。 指派也允許寫入該服務的角色是不適當的,因為這會是讀取作業的過度許可權。 同樣地,您會想要確保角色指派的範圍僅限於需要讀取的資源。

選擇下列其中一個索引標籤,以瞭解每個元件的權限:

您必須建立角色指派,以在運行時間提供 Blob 容器的存取權。 擁有者之類的管理角色是不夠的。 下表顯示一般作業中使用 Blob 儲存體 擴充功能時建議的內建角色。 您的應用程式可能需要根據您撰寫的程式代碼進一步許可權。

繫結類型 範例內建角色
觸發程序 儲存體 Blob 數據擁有者and 儲存體 佇列數據參與者1

也必須將額外的許可權授與 AzureWebJobs 儲存體 連線。2
輸入繫結 儲存體 Blob 資料讀者
輸出繫結 儲存體 Blob 資料擁有者

1 Blob 觸發程式會藉由將有害 Blob 寫入連線所指定的記憶體帳戶上的佇列,來處理多個重試失敗。

2 AzureWebJobs 儲存體 聯機會在內部用於啟用觸發程式的 Blob 和佇列。 如果設定為使用身分識別型連線,則需要超出預設需求的額外許可權。 儲存體 Blob 數據擁有者、儲存體 佇列數據參與者和 儲存體 帳戶參與者角色涵蓋所需的許可權。 若要深入瞭解,請參閱使用身分識別 連線 裝載記憶體。

身分識別型連線的通用屬性

Azure 服務的身分識別型聯機會接受下列通用屬性,其中 <CONNECTION_NAME_PREFIX> 是觸發程式或系結定義中屬性的值 connection

屬性 環境變數範本 描述
令牌認證 <CONNECTION_NAME_PREFIX>__credential 定義應如何取得連線的令牌。 如果您已部署的 Azure 函式想要使用受控識別驗證,則此設定應設定 managedidentity 為 。 只有在裝載環境中有受控識別可用時,這個值才有效。
Client ID <CONNECTION_NAME_PREFIX>__clientId 當 設定為 managedidentitycredential,這個屬性可以設定為指定取得令牌時要使用的使用者指派身分識別。 屬性會接受對應至指派給應用程式之使用者指派身分識別的用戶端標識碼。 指定資源識別碼和用戶端識別碼無效。 如果未指定,則會使用系統指派的身分識別。 當不應該設定時credential,本機開發案例以不同的方式使用這個屬性。
資源識別碼 <CONNECTION_NAME_PREFIX>__managedIdentityResourceId 當 設定為 managedidentitycredential,這個屬性可以設定為指定要在取得令牌時使用的資源標識碼。 屬性會接受對應至使用者定義受控識別之資源標識碼的資源識別碼。 指定資源識別碼和用戶端識別碼無效。 如果未指定這兩個身分識別,則會使用系統指派的身分識別。 當不應該設定時credential,本機開發案例以不同的方式使用這個屬性。

特定連接類型可能支援其他選項。 請參閱建立連線之元件的檔。

使用身分識別型連線進行本機開發

注意

使用身分識別型連線的本機開發需要 Azure Functions Core Tools 版本4.0.3904或更新版本。

當您在本機執行函式專案時,上述設定會告知運行時間使用本機開發人員身分識別。 聯機會依序嘗試從下列位置取得令牌:

  • Microsoft 應用程式之間共用的本機快取
  • Visual Studio 中目前的用戶內容
  • Visual Studio Code 中的目前用戶內容
  • Azure CLI 中的目前用戶內容

如果這些選項都沒有成功,就會發生錯誤。

您的身分識別可能已經有一些針對用於開發之 Azure 資源的角色指派,但這些角色可能無法提供必要的數據存取。 擁有者之類的管理角色是不夠的。 請仔細檢查每個元件連線所需的許可權,並確定您已將其指派給自己。

在某些情況下,您可能想要指定使用不同的身分識別。 您可以根據 Microsoft Entra 服務主體的用戶端識別碼和客戶端密碼,為指向替代身分識別的連線新增組態屬性。 在 Azure Functions 服務中裝載時,不支援此組態選項。 若要在本機電腦上使用識別碼和秘密,請使用下列額外屬性來定義連線:

屬性 環境變數範本 描述
租用戶識別碼 <CONNECTION_NAME_PREFIX>__tenantId Microsoft Entra 租使用者 (目錄) 識別符。
Client ID <CONNECTION_NAME_PREFIX>__clientId 租用戶中應用程式註冊的用戶端(應用程式)標識碼。
用戶端密碼 <CONNECTION_NAME_PREFIX>__clientSecret 針對應用程式註冊所產生的客戶端密碼。

以下是 Azure Blob 身分識別型連線所需的屬性範例 local.settings.json

{
  "IsEncrypted": false,
  "Values": {
    "<CONNECTION_NAME_PREFIX>__blobServiceUri": "<blobServiceUri>",
    "<CONNECTION_NAME_PREFIX>__queueServiceUri": "<queueServiceUri>",
    "<CONNECTION_NAME_PREFIX>__tenantId": "<tenantId>",
    "<CONNECTION_NAME_PREFIX>__clientId": "<clientId>",
    "<CONNECTION_NAME_PREFIX>__clientSecret": "<clientSecret>"
  }
}

使用身分識別 連線裝載記憶體

Azure Functions 主機會使用 中 AzureWebJobsStorage 設定的記憶體連線來啟用核心行為,例如協調定時器觸發程式和預設應用程式密鑰記憶體的單一執行。 此連線也可以設定為使用身分識別。

警告

Functions 中的其他元件依賴 AzureWebJobsStorage 預設行為。 如果您使用不支援這類連線的舊版擴充功能,則不應該將它移至以身分識別為基礎的連線,包括 Azure Blob、事件中樞和 Durable Functions 的觸發程式和系結。 同樣地,在Linux取用中使用伺服器端組建時, AzureWebJobsStorage 會用於部署成品,如果您啟用此功能,則必須透過 外部部署套件進行部署。

此外,您的函式應用程式可能會重複使用 AzureWebJobsStorage 其觸發程式、系結和/或函式程式代碼中的其他記憶體連線。 請確定 的所有用法AzureWebJobsStorage都能夠使用身分識別型連線格式,再從 連接字串 變更此連線。

若要針對 AzureWebJobsStorage使用身分識別型連線,請設定下列應用程式設定:

設定 描述 範例值
AzureWebJobsStorage__blobServiceUri 記憶體帳戶 Blob 服務的數據平面 URI,使用 HTTPS 配置。 https://< storage_account_name.blob.core.windows.net>
AzureWebJobsStorage__queueServiceUri 記憶體帳戶佇列服務的數據平面 URI,使用 HTTPS 配置。 <https:// storage_account_name.queue.core.windows.net>
AzureWebJobsStorage__tableServiceUri 記憶體帳戶數據表服務的數據平面 URI,使用 HTTPS 配置。 https://< storage_account_name.table.core.windows.net>

也可以設定身分識別型連線 的通用屬性。

如果您要 AzureWebJobsStorage 使用使用全域 Azure 的預設 DNS 後綴和服務名稱的記憶體帳戶進行設定, https://<accountName>.[blob|queue|file|table].core.windows.net 請遵循格式,改為將 設定 AzureWebJobsStorage__accountName 為記憶體帳戶的名稱。 系統會針對此帳戶推斷每個記憶體服務的端點。 當記憶體帳戶位於主權雲端或具有自定義 DNS 時,這無法運作。

設定 描述 範例值
AzureWebJobsStorage__accountName 儲存體帳戶的帳戶名稱,只有在帳戶不在主權雲端且沒有自定義 DNS 時才有效。 此語法對其他身分識別型連線而言是唯 AzureWebJobsStorage 一的,無法用於。 <storage_account_name>

您必須建立角色指派,以在運行時間為 “AzureWebJobs 儲存體” 提供記憶體帳戶的存取權。 擁有者之類的管理角色不足。 儲存體 Blob 數據擁有者角色涵蓋 Functions 主機記憶體的基本需求 - 運行時間需要 Blob 的讀取和寫入存取權,以及建立容器的能力。 數個延伸模組會使用此聯機做為 Blob、佇列和數據表的預設位置,這些用途可能會如下表所述新增需求。 如果您使用 “AzureWebJobs 儲存體” 進行任何其他用途,您可能需要額外的許可權。

副檔名 所需的角色 說明
沒有擴充功能(僅限主機) 儲存體 Blob 資料擁有者 用於一般協調、預設金鑰存放區
Azure Blob(僅限觸發程式) 所有:
儲存體 帳戶參與者
儲存體 Blob 數據擁有者
儲存體 佇列數據參與者
Blob 觸發程式會在內部使用 Azure 佇列,並寫入 Blob 收據。 不論為觸發程式設定的連線為何,它都會針對這些使用 AzureWebJobs 儲存體。
Azure 事件中樞 (僅限觸發程式) ( 不改變預設需求 )
儲存體 Blob 資料擁有者
檢查點會使用 AzureWebJobs 儲存體 連線保存在 Blob 中。
計時器觸發程序 ( 不改變預設需求 )
儲存體 Blob 資料擁有者
為了確保每個事件執行一個,使用 AzureWebJobs 儲存體 連線來取得 Blob 鎖定。
長期函式 所有:
儲存體 Blob 數據參與者
儲存體 佇列數據參與者
儲存體 數據表數據參與者
Durable Functions 會使用 Blob、佇列和數據表來協調活動函式並維護協調流程狀態。 它預設會針對所有這些專案使用 AzureWebJobs 儲存體 連線,但您可以在 Durable Functions 擴充功能組態指定不同的連線。

回報問題

項目 說明 連結
執行階段 腳本主機、觸發程式和系結、語言支援 提出問題
範本 建立範本的程式代碼問題 提出問題
入口網站 使用者介面或體驗問題 提出問題

開放原始碼存放庫

Azure Functions 的程序代碼 開放原始碼,您可以在下列 GitHub 存放庫中找到重要元件:

下一步

如需詳細資訊,請參閱以下資源: