從 Azure Logic Apps 的工作流程呼叫 Azure Functions
適用於:Azure Logic Apps (使用量 + 標準)
若要在邏輯應用程式工作流程中執行執行特定作業的程式碼,您不需要建置完整的應用程式或基礎結構。 而可以改為建立和呼叫 Azure 函式。 Azure Functions 提供雲端的無伺服器運算,以及執行下列工作的功能:
- 執行使用 Node.js 或 C# 建立的函式,以擴充工作流程的行為。
- 在工作流程中執行計算。
- 在工作流程中套用進階格式設定或計算欄位。
本操作指南示範如何從使用量或標準工作流程呼叫現有的 Azure 函式。 若要在不使用 Azure Functions 的情況下執行程式碼,請參閱下列文件:
限制
只有使用量工作流程支援使用受控識別搭配 Microsoft Entra 驗證來驗證 Azure 函式呼叫。 如何對函式呼叫啟用驗證相關章節目前不支援標準工作流程。
Azure Logic Apps 不支援使用已啟用部署位置的 Azure Functions。 雖然此案例有時或許可行,但此行為無法預期,而且在工作流程嘗試呼叫 Azure 函式時,可能會導致授權問題。
必要條件
Azure 帳戶和訂用帳戶。 如果您沒有訂用帳戶,請註冊一個免費的 Azure 帳戶。
Azure 函式應用程式資源,其中包含一或多個 Azure 函式。
函數應用程式資源和邏輯應用程式資源必須使用相同的 Azure 訂用帳戶。
您的函式應用程式資源必須使用 .NET 或 Node.js 作為執行階段堆疊。
將新的函式新增至您的函數應用程式時,您可以選取 C# 或 JavaScript。
您想要呼叫的 Azure 函式。 您可以使用下列工具建立此函式:
您的函式必須使用 HTTP 觸發程序範本。
HTTP 觸發程序範本可以接受內容中的
application/json
類型來自邏輯應用程式工作流程。 當您將函式新增至邏輯應用程式時,設計工具會顯示 Azure 訂用帳戶內從這個範本建立的自訂函式。您的函式程式碼必須包含函式完成後要傳回至工作流程的回應和承載。
context
物件是指工作流程透過 Azure Functions 動作參數 (稍後在本指南中命名為要求本文) 傳送的訊息。本指南使用下列命名為 FabrikamAzureFunction 的範例函式:
module.exports = function (context, data) { var input = data; // Function processing logic // Function response for later use context.res = { body: { content:"Thank you for your feedback: " + input } }; context.done(); }
若要從您的函式內存取
context
物件的屬性,請使用下列語法:context.body.<property-name>
例如,若要參考
context
物件中的content
屬性,請使用下列語法:context.body.content
此程式碼也包含
input
變數,其中儲存來自data
參數的值,因此函式可以根據該值執行作業。 在 JavaScript 函式中,data
變數也是context.body
的捷徑。注意
這裡的
body
屬性適用於context
物件,與動作輸出中的本文權杖不同,該權杖可能也會傳遞至函式。除非您定義 OpenAPI 定義,否則函式無法使用自定義路由。
若函式有 OpenAPI 定義,當您處理函式參數時,工作流程設計工具可讓您享受更豐富的體驗。 工作流程若要尋找和存取具有 OpenAPI 定義的函式,必須先遵循下列步驟來設定函數應用程式。
以任何觸發程序開始的使用量或標準邏輯應用程式工作流程。
本指南中的範例使用名為收到新的電子郵件時的 Office 365 Outlook 觸發程序。
若要建立並呼叫呼叫另一個工作流程的 Azure 函式,請確定次要工作流程是以提供可呼叫端點的觸發程序開始。
例如,您可以使用一般 HTTP 或要求觸發程序來啟動工作流程,或使用服務型觸發程序,例如 Azure 佇列或事件方格。 在函式內,將 HTTP POST 要求傳送至觸發程序的 URL,並包含您要讓次要工作流程處理的承載。 如需詳細資訊,請參閱呼叫、觸發或巢狀邏輯應用程式工作流程。
使用 Azure 函式的提示
使用 OpenAPI 定義尋找函式
若要設定函式應用程式,讓您的工作流程能夠尋找及使用具有 OpenAPI 定義的函式,請遵循下列步驟:
在 Azure 入口網站中開啟您的函數應用程式。 請確定函數應用程式正在執行。
在函數應用程式中,請遵循下列步驟來設定跨原始資源共用 (CORS),以允許所有來源:
存取 HTTP 要求內的屬性值
Webhook 型函式可以接受 HTTP 要求作為輸入,然後將這些要求傳遞給其他函式。 例如,雖然 Azure Logic Apps 有轉換日期時間值的函式,但這個基本範例 JavaScript 函式說明如何在傳遞給函式的 HTTP 要求物件內存取屬性,並對該屬性值執行作業。 為了存取物件內的屬性,這個範例使用點 (.) 運算子:
function convertToDateString(request, response){
var data = request.body;
response = {
body: data.date.ToDateString();
}
}
以下是此函式內部的運作情形:
此函式會建立
data
變數,然後將request
物件內的body
物件指派給該變數。 此函式會使用點 (.) 運算子來參考request
物件內的body
物件:var data = request.body;
此函式現在可以透過
data
變數存取date
屬性,並藉由呼叫ToDateString()
函式將該屬性值從 DateTime 類型轉換為 DateString 類型。 此函式也會透過函式回應中的body
屬性傳回結果:body: data.date.ToDateString();
在 Azure 中建立函式之後,請依照步驟,將 Azure 函式新增至工作流程。
將 URI 參數傳遞至函式
如果您必須將 URI 參數傳遞至函式,您可以在函式的端點 URL 中使用查詢參數。
開啟邏輯應用程式的工作流程設計工具,然後從 [進階參數 ] 清單中開啟函式資訊窗格,選取 [ 查詢]。
數據表隨即出現,您可以在其中輸入參數作為索引鍵/值組。
輸入參數的機碼/值組,例如:
將函式新增至工作流程 (使用量 + 標準工作流程)
若要從工作流程呼叫 Azure 函式,您可以新增該函式,就像設計工具中的任何其他動作一樣。
在 Azure 入口網站中,在設計工具中開啟您的取用邏輯應用程式工作流程。
在 [ 新增動作 ] 窗格中,遵循下列步驟:
從函式應用程式清單中,選取您的函式應用程式、選取函式,然後選取 [ 新增動作],例如:
函式的資訊方塊出現之後,請遵循下列步驟:
針對 要求本文,請提供函式的輸入,其必須使用JavaScript物件表示法 (JSON) 物件的格式,例如:
{"context": <selected-input> }
此輸入是工作流程傳送給函式的內容物件承載或訊息。
若要選取代表先前步驟輸出的權杖,請在 [要求本文] 方塊內選取,然後選取選項以開啟動態內容清單 (閃電圖示)。
若要建立運算式,請在 [要求本文] 方塊內選取,然後選取選項以開啟運算式編輯器 (公式圖示)。
下列範例指定含有
content
屬性的 JSON 物件,以及代表電子郵件觸發程序 From 輸出作為要求本文值的權杖:在此處,內容物件不會轉換為字串,所以物件內容會直接新增至 JSON 承載。 以下是完整範例:
如果您提供內容物件不是傳遞字串、JSON 物件或 JSON 陣列的 JSON 權杖,就會收到錯誤。 但您可以使用引號 ("") 括住權杖,將內容物件轉換為字串,例如,如果您想要使用 Received Time 權杖:
若要指定其他詳細資料,例如要使用的方法、要求標頭、查詢參數或驗證,請開啟 [進階參數] 清單,然後選取您想要的參數。 在驗證方面,選項會隨著您選取的函式而有所不同。 如需詳細資訊,請檢閱對函式啟用驗證。
針對 Azure 函式呼叫啟用驗證 (僅限使用量工作流程)
您的使用量工作流程可以使用受控識別來驗證 Azure 函式呼叫,並存取受 Microsoft Entra ID 保護的資源。 受控識別可以驗證存取權,無需您登入並提供認證或秘密。 Azure 會為您管理此身分識別,並協助保護您的認證,因為您不需要提供或輪替使用祕密。 您可以在邏輯應用程式資源層級上設定系統指派的身分識別,或手動建立使用者指派的身分識別。 從工作流程呼叫的 Azure 函式可以使用相同的受控識別進行驗證。
注意
只有使用量工作流程支援使用受控識別和 Microsoft Entra 驗證來驗證 Azure 函式呼叫。 若您使用此動作來呼叫 Azure 函式,則標準工作流程目前不包含此支援。
如需詳細資訊,請參閱下列文件:
若要設定函數應用程式和函式,讓它們能夠使用您的使用量邏輯應用程式的受控識別,請遵循下列高階步驟:
設定函式使用匿名驗證 (僅限使用量工作流程)
若要讓函式使用使用量邏輯應用程式的受控識別,您必須將函式的驗證層級設定為 anonymous
。 否則,工作流程會擲回 BadRequest 錯誤。
在 Azure 入口網站中,尋找並選取您的函數應用程式。
下列步驟使用名為 FabrikamFunctionApp 的範例函數應用程式。
在函數應用程式資源功能表的 [開發工具] 下,選取 [進階工具]>[執行]。
在 [Kudu Plus] 頁面開啟之後,在 Kudu 網站的標題列上,從 [偵錯主控台] 功能表選取 [CMD]。
下一個頁面出現之後,從資料夾清單中,選取 [site]>[wwwroot]>your-function。
下列步驟使用名為 FabrikamAzureFunction 的範例函式。
開啟 function.json 檔案來編輯。
在 bindings 物件中,檢查 authLevel 屬性是否存在。 如果屬性存在,請將屬性值設定為
anonymous
。 否則,請新增該屬性並設定值。完成後儲存設定。 繼續進行下一節。
尋找設定 Microsoft Entra 驗證所需的值 (僅限使用量工作流程)
在設定函數應用程式使用受控識別和 Microsoft Entra 驗證之前,您必須遵循本節中的步驟來尋找並儲存下列值。
尋找 Microsoft Entra 租用戶的租用戶識別碼
執行名為 Get-AzureAccount 的 PowerShell 命令,或在 Azure 入口網站中遵循下列步驟:
在 Azure 入口網站中,開啟您的 Microsoft Entra 租用戶。
本指南使用 Fabrikam 作為範例租用戶。
在租用戶功能表上,選取 [概觀]。
複製並儲存租用戶識別碼供稍後使用,例如:
尋找受控識別的物件識別碼
啟用使用量邏輯應用程式資源的受控識別之後,請尋找受控識別的物件。 您將使用此識別碼,在 Microsoft Entra 租用戶中尋找相關聯的企業應用程式。
在邏輯應用程式功能表的 [設定] 下,選取 [身分識別],然後選取 [系統指派] 或 [使用者指派]。
尋找與受控識別相關聯的 Azure 企業應用程式之應用程式識別碼
當您在邏輯應用程式資源上啟用受控識別時,Azure 會自動建立相關聯的同名 Azure 企業應用程式。 您現在必須尋找相關聯的企業應用程式,並複製其應用程式識別碼。 稍後,您將在建立應用程式註冊時,使用此應用程式識別碼來新增函數應用程式的識別提供者。
在 Azure 入口網站 中,尋找並開啟您的Microsoft Entra 租使用者。
在租用戶功能表的 [管理] 下方,選取 [企業應用程式]。
在 [所有應用程式] 頁面的搜尋方塊中,輸入受控識別的物件識別碼。 從結果中尋找相符的企業應用程式,然後複製應用程式識別碼:
現在,使用複製的應用程式識別碼將識別提供者新增至函數應用程式。
新增函數應用程式的識別提供者 (僅限使用量工作流程)
既然您擁有租用戶識別碼和應用程式識別碼,您可以藉由新增識別提供者和建立應用程式註冊,來設定函數應用程式使用 Microsoft Entra 驗證。
在 Azure 入口網站中開啟您的函數應用程式。
在函數應用程式功能表的 [設定] 下,選取 [驗證],然後選取 [新增識別提供者]。
在 [新增識別提供者] 窗格的 [基本] 下,從 [識別提供者] 清單中選取 [Microsoft]。
在 [應用程式註冊] 下,針對 [應用程式註冊類型],選取 [提供現有應用程式註冊的詳細資料],然後輸入您先前儲存的值。
屬性 必填 值 Description 應用程式 (用戶端) 識別碼 Yes <application-ID> 用於此應用程式註冊的唯一識別碼。 在此範例中,使用您所複製的受控識別相關企業應用程式之應用程式識別碼。 用戶端密碼 此為選用步驟,但建議執行 <client-secret> 應用程式在要求權杖時用來證明其身分識別的祕密值。 建立的用戶端密碼在應用程式的組態中儲存為位置固定的應用程式設定,名為 MICROSOFT_PROVIDER_AUTHENTICATION_SECRET。
- 請務必定期輪替秘密並以安全的方式儲存。 例如,在 Azure Key Vault 中管理秘密,您可以在其中使用受控識別來擷取金鑰,而不需要向未獲授權的使用者公開此值。 您可以更新此設定,以使用 Key Vault 參考。
- 如果您提供用戶端密碼值,登入作業會使用混合式流程,並傳回存取權杖和重新整理權杖。
- 如果您未提供用戶端密碼,則登入作業會使用 OAuth 2.0 隱含授與流程。 這個方法只會直接傳回識別碼權杖或存取權杖。 這些權杖會由提供者傳送,並儲存在 EasyAuth 權杖存放區中。
重要:因為有安全性風險,隱含授與流程不再是適當的驗證方法。 請改用代碼交換的證明金鑰(PKCE) 授權碼流程或單頁應用程式 (SPA) 授權碼。簽發者 URL No <authentication-endpoint-URL>/<Microsoft-Entra-tenant-ID>/v2.0 此 URL 將使用者重新導向到正確的 Microsoft Entra 租用戶,並下載適當的中繼資料,以判斷適當的權杖簽署金鑰和權杖簽發者宣告值。 對於使用 Azure AD v1 的應用程式,請從 URL 中省略 /v2.0。
在此案例中,請使用下列 URL:https://sts.windows.net/
<Microsoft-Entra-tenant-ID>允許的權杖對象 No <application-ID-URI> 函數應用程式的應用程式識別碼 URI (資源識別碼)。 如果您允許雲端或伺服器應用程式使用來自 Web 應用程式的驗證權杖,請為 Web 應用程式新增應用程式識別碼 URI。 設定的用戶端識別碼一律隱含視為允許的對象。
在本案例中,值為https://management.azure.com
。 稍後,當您在工作流程中設定函式動作以使用受控識別時,您可以在對象屬性中使用相同的 URI。
重要:應用程式識別碼 URI (資源識別碼) 必須完全符合 Microsoft Entra ID 預期的值,包括任何必要的尾端斜線。此時,您的版本看起來類似此範例:
如果您是第一次設定函數應用程式與識別提供者,則還會顯示 [App Service 驗證設定] 區段。 這些選項決定函數應用程式如何回應未經驗證的要求。 預設選項會將所有要求重新導向為使用新的識別提供者登入。 您可以立即自訂此行為,或稍後從主要 [驗證] 頁面選取 [驗證設定] 旁的 [編輯],以調整這些設定。 若要深入了解這些選項,請檢閱驗證流程 - Azure App Service 和 Azure Functions 中的驗證與授權。
否則,您可以繼續下一個步驟。
若要完成建立應用程式註冊,請選取 [新增]。
完成時,[驗證] 頁面現在會列出識別提供者和應用程式註冊的應用程式 (用戶端) 識別碼。 您的函數應用程式現在可以使用此應用程式註冊進行驗證。
複製應用程式註冊的應用程式 (用戶端) 識別碼,以便稍後用於工作流程中的 Azure Functions 動作對象屬性。
返回設計工具,並遵循使用內建 Azure Functions 動作使用受控識別來驗證存取權的步驟。