分享方式:


從 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>

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

      context.body.content

      此程式碼也包含 input 變數,其中儲存來自 data 參數的值,因此函式可以根據該值執行作業。 在 JavaScript 函式中,data 變數也是 context.body 的捷徑。

      注意

      這裡的 body 屬性適用於 context 物件,與動作輸出中的本文權杖不同,該權杖可能也會傳遞至函式。

    • 除非您已定義 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 有轉換日期時間值的函式,但這個基本範例 JavaScript 函式說明如何在傳遞給函式的 HTTP 要求物件內存取屬性,並對該屬性值執行作業。 為了存取物件內的屬性,這個範例使用點 (.) 運算子

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

以下是此函式內部的運作情形:

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

    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) 物件進行格式化)。 此輸入是工作流程傳送給函式的內容物件承載或訊息。

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

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

      下列範例指定含有 content 屬性的 JSON 物件,以及代表電子郵件觸發程序 From 輸出作為要求本文值的權杖:

      此螢幕擷取畫面顯示內容物件承載的使用量工作流程和含有 [要求本文] 的函式範例。

      在此處,內容物件不會轉換為字串,所以物件內容會直接新增至 JSON 承載。 以下是完整範例:

      此螢幕擷取畫面顯示內容物件承載的使用量工作流程和含有完整 [要求本文] 的函式範例。

      如果您提供內容物件不是傳遞字串、JSON 物件或 JSON 陣列的 JSON 權杖,就會收到錯誤。 但您可以使用引號 ("") 括住權杖,將內容物件轉換為字串,例如,如果您想要使用 Received Time 權杖:

      此螢幕擷取畫面顯示使用量工作流程,以及將內容物件轉換為字串的 [要求本文] 範例。

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

針對 Azure 函式呼叫啟用驗證 (僅限使用量工作流程)

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

注意

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

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

若要設定函數應用程式和函式,讓它們能夠使用您的使用量邏輯應用程式的受控識別,請遵循下列高階步驟:

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

  2. 設定函式使用匿名驗證

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

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

設定函式使用匿名驗證 (僅限使用量工作流程)

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

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

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

  2. 在函數應用程式資源功能表的 [開發工具] 下,選取 [進階工具]>[執行]

    此螢幕擷取畫面顯示函數應用程式功能表,其中已選取 [進階工具] 和 [執行] 選項。

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

    此螢幕擷取畫面顯示 [Kudu 服務] 頁面,其中已開啟 [偵錯主控台] 功能表並選取 [CMD] 選項。

  4. 下一個頁面出現之後,從資料夾清單中,選取 [site]>[wwwroot]>your-function

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

    此螢幕擷取畫面顯示資料夾清單,其中顯示網站的開啟資料夾:wwwroot 和您的函式。

  5. 開啟 function.json 檔案來編輯。

    此螢幕擷取畫面顯示 function.json 檔案與選取的編輯命令。

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

    此螢幕擷取畫面顯示 bindings 物件的 authLevel 屬性設定為 anonymous。

  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. 在 [所有應用程式] 頁面的搜尋方塊中,輸入受控識別的物件識別碼。 從結果中尋找相符的企業應用程式,然後複製應用程式識別碼

    此螢幕擷取畫面顯示名為 [所有應用程式] 的 Entra 租用戶頁面,在其中的搜尋方塊中輸入企業應用程式物件識別碼,並選取相符的應用程式識別碼。

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

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

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

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

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

    此螢幕擷取畫面顯示函數應用程式功能表與 [驗證] 頁面,其中已選取 [新增識別提供者] 選項。

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

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

    屬性 必填 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>/<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。 稍後,當您在工作流程中設定函式動作以使用受控識別時,您可以在對象屬性中使用相同的 URI。

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

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

    此螢幕擷取畫面顯示邏輯應用程式的應用程式註冊,以及函數應用程式的識別提供者。

    如果您是第一次設定函數應用程式與識別提供者,則還會顯示 [App Service 驗證設定] 區段。 這些選項決定函數應用程式如何回應未經驗證的要求。 預設選項會將所有要求重新導向為使用新的識別提供者登入。 您可以立即自訂此行為,或稍後從主要 [驗證] 頁面選取 [驗證設定] 旁的 [編輯],以調整這些設定。 若要深入了解這些選項,請檢閱驗證流程 - Azure App Service 和 Azure Functions 中的驗證與授權

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

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

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

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

    此螢幕擷取畫面顯示函數應用程式的新識別提供者。

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

下一步