從 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 訂用帳戶。

    • 您的函式應用程式資源必須使用 .NETNode.js 作為運行時間堆疊。

    • 當您將新的函式新增至函式應用程式時,您可以選取 C#JavaScript

  • 您想要呼叫的 Azure 函式。 您可以使用下列工具建立此函式:

    • Azure 入口網站

    • Visual Studio

    • Visual Studio Code

    • Azure CLI

    • Azure PowerShell

    • ARM 範本

    • 您的函式必須使用 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>

      例如,若要參考 content 物件中的 context 屬性,請使用下列語法:

      context.body.content

      此程式代碼也包含 input 變數,其會儲存 參數 data 中的值,讓函式可以在該值上執行作業。 在 JavaScript 函式中 data ,變數也是的 context.body快捷方式。

      注意

      body這裡的 屬性會套用至 context 物件,而且與動作輸出中的 Body 令牌不同,您也可以將它傳遞至函式。

    • 除非您定義 OpenAPI 定義Swagger 檔案),否則函式無法使用自定義路由。

      當您有函式的 OpenAPI 定義時,工作流程設計工具會在使用函式參數時提供更豐富的體驗。 在工作流程尋找並存取具有 OpenAPI 定義的函式之前, 請遵循下列步驟來設定函式應用程式。

  • 以任何觸發程式開頭的取用或標準邏輯應用程式工作流程。

    本指南中的範例會使用名為「新電子郵件送達時」的 Office 365 Outlook 觸發程式。

  • 若要建立並呼叫呼叫另一個工作流程的 Azure 函式,請確定次要工作流程是從提供可呼叫端點的觸發程序開始。

    例如,您可以使用一般 HTTP 或要求觸發程式啟動工作流程,也可以使用以服務為基礎的觸發程式,例如 Azure 佇列事件方格 在您的函式內,將 HTTP POST 要求傳送至觸發程式的 URL,並包含您想要處理次要工作流程的承載。 如需詳細資訊,請參閱 呼叫、觸發程式或巢狀邏輯應用程式工作流程

使用 Azure 函式的 提示

為您的函式產生 OpenAPI 定義或 Swagger 檔案

如需在工作流程設計工具中使用函式參數時的更豐富體驗, 請為您的函式產生 OpenAPI 定義Swagger 檔案 。 若要設定函式應用程式,讓您的工作流程可以尋找及使用具有 Swagger 描述的函式,請遵循下列步驟:

  1. Azure 入口網站中開啟您的函數應用程式。 請確定函式應用程式正在主動執行。

  2. 在您的函式應用程式上,設定 跨原始來源資源分享 (CORS), 以便遵循下列步驟允許所有來源:

    1. 在函式應用程式功能表上的 [API] 底下,選取 [CORS]。

    2. 在 [允許的來源] 下,新增星號 (*) 通配符,但移除清單中所有其他來源,然後選取 [儲存]。

      顯示 Azure 入口網站、CORS 窗格和通配符 * 在 [允許的來源] 下輸入的螢幕快照。

存取 HTTP 要求內的屬性值

Webhook 型函式可以接受 HTTP 要求作為輸入,並將這些要求傳遞至其他函式。 例如,雖然 Azure Logic Apps 具有 轉換 DateTime 值的函式,但這個基本範例 JavaScript 函式會示範如何在傳遞至函式的 HTTP 要求物件記憶體取屬性,並在該屬性值上執行作業。 若要存取物件內的屬性,此範例會使用 dot (.) 運算子

function convertToDateString(request, response){
   var data = request.body;
   response = {
      body: data.date.ToDateString();
   }
}

以下是此函式內發生的情況:

  1. 函式會data建立變數,然後將 物件內request的物件指派body給 變數。 函式會使用 dot (.) 運算子來參考 body 物件內的 request 物件:

    var data = request.body;
    
  2. 函式現在可以透過 data 變數存取 date 屬性,並藉由呼叫 ToDateString() 函式,將屬性值從 DateTime 類型轉換成 DateString 類型。 函式也會透過 body 函式回應中的 屬性傳回結果:

    body: data.date.ToDateString();
    

在 Azure 中建立函式之後,請遵循將 Azure 函式新增至工作流程的步驟

將函式新增至您的工作流程(取用 + 標準工作流程)

若要從工作流程呼叫 Azure 函式,您可以新增該函式,就像設計工具中的其他任何動作一樣。

  1. Azure 入口網站中,在設計工具中開啟您的取用邏輯應用程式工作流程。

  2. 在設計工具中,請遵循下列一般步驟來新增名為 選擇 Azure 函式Azure Functions 動作。

  3. 在 [建立 連線] 窗格中,遵循下列步驟:

    1. 函式應用程式的連線提供 連線 名稱

    2. 從函式應用程式清單中,選取您的函式應用程式。

    3. 從函式清單中,選取函式,然後選取 [ 新增動作],例如:

      此螢幕快照顯示已選取函式應用程式和函式的取用工作流程。

  4. 在選取函式的動作方塊中,遵循下列步驟:

    1. 針對 要求本文,請提供函式的輸入,其格式必須為 JavaScript 物件表示法 (JSON) 物件。 此輸入是 工作流程傳送至函式的內容對象 承載或訊息。

      • 若要選取代表先前步驟輸出的令牌,請在 [要求本文] 方塊內選取 ,然後選取選項以開啟動態內容清單(閃電圖示)。

      • 若要建立表達式,請在 [要求本文] 方塊內選取 ,然後選取選項以開啟表達式編輯器(公式圖示)。

      下列範例會指定 JSON 物件,content其中包含 屬性和令牌,代表來自電子郵件觸發程式的 From 輸出做為要求本文值:

      顯示取用工作流程和函式的螢幕快照,其中包含內容對象承載的要求本文範例。

      在這裡,內容物件不會轉換成字串,因此對象的內容會直接新增至 JSON 承載。 以下是完整的範例:

      顯示取用工作流程和函式的螢幕快照,其中包含內容對象承載的完整要求本文範例。

      如果您提供傳遞字串、JSON 物件或 JSON 陣列的 JSON 令牌以外的內容物件,您會收到錯誤。 不過,如果您想要使用接收時間令牌,您可以將內容對象轉換成字串,方法是將標記括在引號 (“”), 例如:

      此螢幕快照顯示取用工作流程,以及將內容對象轉換成字串的要求本文範例。

    2. 若要指定其他詳細數據,例如要使用的方法、要求標頭、查詢參數或驗證,請開啟 [ 進階參數 ] 列表,然後選取您想要的參數。 針對驗證,您的選項會根據您選取的函式而有所不同。 如需詳細資訊,請參閱 啟用函式的驗證。

啟用 Azure 函式呼叫的驗證(僅限取用工作流程)

您的取用 工作流程可以使用受控識別 來驗證 Azure 函式呼叫,並存取受 Microsoft Entra ID 保護的資源。 受控識別可以驗證存取權,而不需要登入並提供認證或秘密。 Azure 會為您管理此身分識別,並協助保護您的認證,因為您不需要提供或輪替使用祕密。 您可以在邏輯應用程式資源層級設定系統指派的身分識別或手動建立的使用者指派身分識別。 從工作流程呼叫的 Azure 函式可以使用相同的受控識別進行驗證。

注意

只有取用工作流程支援使用受控識別和 Microsoft Entra 驗證的 Azure 函式呼叫驗證。 當您使用 動作來呼叫 Azure 函式時,標準工作流程目前不包含此支援。

如需詳細資訊,請參閱下列文件:

若要設定函式應用程式和函式,讓他們可以使用取用邏輯應用程式的受控識別,請遵循下列高階步驟:

  1. 啟用並設定邏輯應用程式的受控識別

  2. 設定函式以進行匿名驗證

  3. 尋找設定 Microsoft Entra 驗證所需的值。

  4. 為函式應用程式建立應用程式註冊。

設定您的函式以進行匿名驗證(只限取用工作流程)

若要讓函式使用取用邏輯應用程式的受控識別,您必須將函式的驗證層級設定為 anonymous。 否則,您的工作流程會 擲回 BadRequest 錯誤。

  1. 在 Azure 入口網站,尋找並選取您的函式應用程式。

    下列步驟使用名為 FabrikamFunctionApp 的範例函式應用程式。

  2. 在函式應用程式資源功能表上的 [開發工具] 底下,選取 [進階工具>][移至]。

    顯示函式應用程式功能表的螢幕快照,其中包含 [進階工具] 和 [Go] 的選取選項。

  3. Kudu Plus 頁面開啟之後,在 Kudu 網站的標題欄上,從 [偵錯控制台] 功能選取 [CMD]。

    顯示 Kudu Services 頁面的螢幕快照,其中包含已開啟的 [偵錯控制台] 功能表,並選取名為 CMD 的選項。

  4. 在下一個頁面出現之後,從資料夾清單中選取網站>wwwroot>your-function。

    下列步驟使用名為 FabrikamAzureFunction 的範例函式。

    顯示資料夾清單的螢幕快照,其中包含網站、wwwroot 和函式的已開啟資料夾。

  5. 開啟function.json檔案以進行編輯。

    顯示function.json檔案的螢幕快照,其中包含選取的編輯命令。

  6. 在系結物件中,檢查 authLevel 屬性是否存在 如果屬性存在,請將 屬性值設定為 anonymous。 否則,請新增該屬性,並設定值。

    此螢幕快照顯示 authLevel 屬性設為匿名的系結物件。

  7. 完成時,請儲存您的設定。 繼續進行下一節。

尋找設定 Microsoft Entra 驗證所需的值(僅限取用工作流程)

在設定函式應用程式以使用受控識別和 Microsoft Entra 驗證之前,您必須先遵循本節中的步驟來尋找並儲存下列值。

  1. 尋找 Microsoft Entra 租使用者的租用戶標識碼。

  2. 尋找受控識別的物件標識碼

  3. 尋找與您受控識別相關聯的企業應用程式應用程式標識碼

尋找 Microsoft Entra 租使用者的租用戶標識碼

執行名為 Get-AzureAccount 的 PowerShell 命令,或在 Azure 入口網站 中,遵循下列步驟:

  1. Azure 入口網站 中,開啟您的 Microsoft Entra 租使用者。

    本指南使用 Fabrikam 作為範例租使用者。

  2. 在租用戶功能表上,選取 [ 概觀]。

  3. 複製並儲存您的租使用者標識碼以供稍後使用,例如:

    此螢幕快照顯示已選取租使用者標識碼複製按鈕的 [Microsoft Entra ID 屬性] 頁面。

尋找受控識別的物件標識碼

啟用取用邏輯應用程式資源的受控識別之後,請尋找受控識別的物件。 您將使用此識別碼在 Entra 租使用者中尋找相關聯的企業應用程式。

  1. 在邏輯應用程式功能表上的 [設定] 下,選取 [身分識別],然後選取 [系統指派] 或 [使用者指派]。

    • 系統指派

      複製身分識別的物件 (主體) 識別碼

      此螢幕快照顯示取用邏輯應用程式的 [身分識別] 頁面,並已選取名為 [系統指派] 索引標籤。

    • 使用者指派

      1. 選取身分識別:

        此螢幕快照顯示取用邏輯應用程式的 [身分識別] 頁面,並已選取名為 [使用者指派] 的索引標籤。

      2. 複製身分識別的物件 (主體) 識別碼

        此螢幕快照顯示已選取物件(主體)標識碼的取用邏輯應用程式使用者指派身分識別概觀頁面。

尋找與您的受控識別相關聯的 Azure 企業版應用程式應用程式識別碼

當您在邏輯應用程式資源上啟用受控識別時,Azure 會自動建立具有相同名稱的相關聯 Azure 企業版應用程式 。 您現在必須尋找相關聯的企業應用程式,並複製其 應用程式識別碼。 稍後,您可以建立應用程式註冊,使用此應用程式識別碼來新增函式應用程式的識別提供者。

  1. 在 Azure 入口網站,尋找並開啟您的 Entra 租使用者。

  2. 在租使用者功能表上的 [管理] 底下,選取 [企業應用程式]。

  3. 在 [ 所有應用程式] 頁面上的搜尋方塊中,輸入受控識別的物件標識符。 從結果中尋找相符的企業應用程式,然後複製 應用程式識別碼

    此螢幕快照顯示名為 [所有應用程式] 的 [專案租使用者] 頁面,並在搜尋方塊中具有企業應用程式物件標識符,並選取了相符的應用程式標識符。

  4. 現在,使用複製的應用程式識別碼,將 識別提供者新增至函式應用程式

新增函式應用程式的識別提供者(僅限取用工作流程)

既然您擁有租使用者識別碼和應用程式標識碼,您可以藉由新增識別提供者和建立應用程式註冊,來設定函式應用程式以使用 Microsoft Entra 驗證。

  1. Azure 入口網站中開啟您的函數應用程式。

  2. 在函式應用程式功能表上的 [設定] 下,選取 [驗證],然後選取 [新增識別提供者]。

    顯示函式應用程式功能表的螢幕快照,其中包含 [驗證] 頁面,以及名為 [新增識別提供者] 的選取選項。

  3. 在 [新增識別提供者] 窗格的 [基本] 底下,從 [識別提供者] 列表中,選取 [Microsoft]。

  4. 在 [應用程式註冊] 下,針對 [應用程式註冊類型],選取 [提供現有應用程式註冊的詳細數據],然後輸入您先前儲存的值。

    屬性 必填 Description
    應用程式 (用戶端) 識別碼 Yes <application-ID> 要用於此應用程式註冊的唯一標識碼。 在此範例中,請使用您為與受控識別相關聯的企業應用程式複製的應用程式識別碼。
    用戶端密碼 選擇性,但建議使用 <client-secret> 應用程式在要求令牌時用來證明其身分識別的秘密值。 客戶端密碼會建立並儲存在應用程式的組態中,作為名為 MICROSOFT_PROVIDER_AUTHENTICATION_SECRET 的插槽黏性應用程式設定 若要改為管理 Azure 金鑰保存庫 中的秘密,您可以稍後更新此設定,以使用 金鑰保存庫 參考

    - 如果您提供客戶端密碼值,登入作業會使用混合式流程,同時傳回存取和重新整理令牌。

    - 如果您沒有提供客戶端密碼,登入作業會使用 OAuth 2.0 隱含授與流程,只傳回標識符令牌。

    這些令牌是由提供者傳送,並儲存在 EasyAuth 令牌存放區中。
    簽發者 URL No <authentication-endpoint-URL>/<Entra-tenant-ID>/v2.0 此 URL 會將使用者重新導向至正確的 Microsoft Entra 租使用者,並下載適當的元數據,以判斷適當的令牌簽署密鑰和令牌簽發者宣告值。 對於使用 Azure AD v1 的應用程式,請省略 URL 中的 /v2.0

    在此案例中,請使用下列 URL: https://sts.windows.net/<Entra-tenant-ID>
    允許的令牌物件 No <application-ID-URI> 函式應用程式的應用程式識別碼 URI(資源識別符)。 針對您想要允許來自 Web 應用程式的驗證令牌的雲端或伺服器應用程式,新增 Web 應用程式的應用程式識別碼 URI。 設定的用戶端識別碼一律會以隱含方式視為允許的物件。

    在這裡案例中,值為 https://management.azure.com。 稍後,當您在工作流程中設定函式動作以使用受控識別,您可以在 Audience 屬性中使用相同的 URI。

    重要事項:應用程式識別碼 URI(資源標識符)必須完全符合 Microsoft Entra ID 預期的值,包括任何必要的尾端斜線。

    此時,您的版本看起來會類似下列範例:

    此螢幕快照顯示邏輯應用程式的應用程式註冊,以及函式應用程式的識別提供者。

    如果您是第一次使用識別提供者設定函式應用程式, App Service 驗證設定 區段也會隨即出現。 這些選項會決定函式應用程式如何回應未經驗證的要求。 默認選取專案會將所有要求重新導向至使用新的識別提供者登入。 您現在可以立即自定義此行為,或稍後從主要 [驗證] 頁面選取 [編輯],以調整這些設定 若要深入了解這些選項,請檢閱驗證流程 - Azure App 服務 和 Azure Functions 中的驗證和授權。

    否則,您可以繼續進行下一個步驟。

  5. 若要完成建立應用程式註冊,請選取 [ 新增]。

    當您完成時,[ 驗證 ] 頁面現在會列出識別提供者和應用程式註冊的應用程式 (用戶端) 識別碼。 您的函式應用程式現在可以使用此應用程式註冊進行驗證。

  6. 複製應用程式註冊 的應用程式 (用戶端) 識別碼 ,以便稍後在 Azure Functions 動作的 Audience 屬性中用於工作流程。

    此螢幕快照顯示函式應用程式的新識別提供者。

  7. 返回設計工具,並遵循 使用內建 Azure Functions 動作向受控識別 驗證存取權的步驟。

下一步