Share via


教學課程:將身分識別型連線 (而非密碼) 與觸發程序和繫結搭配使用

本教學課程說明如何設定 Azure Functions,以使用受控識別 (而非儲存在函數應用程式設定中的密碼) 連線到 Azure 服務匯流排佇列。 本教學課程是接續建立其定義沒有預設儲存體密碼的函數應用程式教學課程。 若要深入瞭解身分識別型連線,請參閱設定身分識別型連線

雖然顯示的程序通常適用於所有語言,但本教學課程目前專門用來支援 Windows 上的 C# 類別庫函數。

在本教學課程中,您將了解如何:

  • 建立服務匯流排命名空間與佇列。
  • 使用受控識別設定函數應用程式
  • 建立角色指派,授與該身分識別從服務匯流排佇列讀取的權限
  • 使用服務匯流排觸發程序建立和部署函數應用程式。
  • 確認與服務匯流排的身分識別型連線

必要條件

完成上一個教學課程:使用身分識別型連線建立函數應用程式

建立服務匯流排和佇列

  1. Azure 入口網站中,選擇 [建立資源 (+)]。

  2. 在 [建立資源]頁面上,選取 [整合]>[服務匯流排]。

  3. 在 [基本]頁面上,使用下表設定 服務匯流排命名空間設定。 其餘選項使用預設設定。

    選項 建議的值 描述
    訂用帳戶 您的訂用帳戶 建立您資源所在位置的訂用帳戶。
    資源群組 myResourceGroup 使用函數應用程式建立的資源群組。
    命名空間名稱 全域唯一的名稱 要從中觸發函數之執行個體的命名空間。 因為命名空間可公開存取,所以您必須使用在 Azure 中全域唯一的名稱。 名稱的長度也必須介於 6 到 50 個字元之間,只包含英數位元和連字號,且不能以數字開頭。
    地點 myFunctionRegion 建立函數應用程式的區域。
    定價層 基本 基本服務匯流排層。
  4. 選取 [檢閱 + 建立]。 驗證完成後,選取 [建立]。

  5. 完成部署後,選取 [移至資源]

  6. 在新的服務匯流排命名空間中,選取 [+ 佇列] 以新增佇列。

  7. 輸入 myinputqueue 作為新佇列的名稱,然後選取 [建立]。

現在,您已有一個佇列,請將角色指派新增至函數應用程式的受控識別。

使用受控識別設定您的服務匯流排觸發程序

若要搭配身分識別型連線使用服務匯流排觸發程序,您必須將Azure 服務匯流排資料接收者角色指派新增至函數應用程式中的受控識別。 使用受控識別觸發服務匯流排命名空間時,需要此角色。 您也可以將自己的帳戶新增至此角色,即可在本機測試期間連線到服務匯流排命名空間。

注意

使用身分識別型連線的角色需求會因服務及連線方式而有所不同。 需求會因觸發程序、輸入繫結和輸出繫結而有所不同。 如需特定角色需求的詳細資訊,請參閱服務的觸發程序和繫結文件。

  1. 在剛建立的服務匯流排命名空間中,選取 [存取控制 (IAM)]。 可以在這裡檢視和設定有權存取資源的人員。

  2. 按一下 [新增],然後選取 [新增角色指派]。

  3. 搜尋 Azure 服務匯流排資料接收者,選取後按 [下一步]。

  4. 在 [成員] 索引標籤上的 [指派存取權的對象] 底下,選擇 [受控識別]

  5. 按一下 [選取成員] 以開啟 [選取受控識別] 面板。

  6. 確認 [訂用帳戶] 是您稍早建立資源的訂用帳戶。

  7. [受控識別] 選取器中,從 [系統指派的受控識別] 類別中選擇 [函數應用程式]。 標籤「函數應用程式」旁邊可能有一個以括號括住的數字,指出訂用帳戶中具有系統指派身分識別的應用程式數目。

  8. 您的應用程式應該會出現在輸入欄位下方的清單中。 如果畫面上未顯示,可以使用 [選取] 方塊篩選具有您應用程式名稱的結果。

  9. 按一下您的應用程式。 該應用程式應該會向下移至 [選取的成員] 區段。 按一下 [選取]。

  10. 回到 [新增角色指派] 畫面,按一下 [檢閱 + 指派]。 檢閱組態,然後按一下 [檢閱 + 指派]。

您已使用受控識別授與函數應用程式對服務匯流排命名空間的存取權限。

在函數應用程式中連線服務匯流排

  1. 在入口網站中,搜尋您在上一個教學課程中建立的函數應用程式,或在 [函數應用程式] 頁面中瀏覽。

  2. 在函數應用程式中,選取 [設定] 之下的 [組態]

  3. [應用程式設定] 中,選取 [+ 新增應用程式設定],以在下表中建立新設定。

    名稱 數值 Description
    ServiceBusConnection__fullyQualifiedNamespace <SERVICE_BUS_NAMESPACE>.servicebus.windows.net 此設定使用身分識別型連線 (而非祕密) 將函數應用程式連線至服務匯流排。
  4. 建立這兩個設定之後,選取 [儲存]>[確認]。

注意

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

例如: ServiceBusConnection:fullyQualifiedNamespace

備妥函數應用程式,以使用受控識別連接到服務匯流排命名空間後,您可以將使用服務匯流排觸發程序的新函數新增至本機專案。

新增服務匯流排觸發的函數

  1. 如下執行 func init 命令,以使用指定的執行階段,在名為 LocalFunctionProj 的資料夾中建立函式專案:

    func init LocalFunctionProj --dotnet
    
  2. 瀏覽至專案資料夾:

    cd LocalFunctionProj
    
  3. 在根專案資料夾中,執行下列命令:

    dotnet add package Microsoft.Azure.WebJobs.Extensions.ServiceBus --version 5.2.0
    

    這會以支援受控識別的版本取代服務匯流排延伸模組套件的預設版本。

  4. 執行下列命令,將服務匯流排觸發的函數新增至專案:

    func new --name ServiceBusTrigger --template ServiceBusQueueTrigger 
    

    這會為新的服務匯流排觸發程式新增程式碼,並為延伸模組套件新增參考。 您必須為此觸發程式新增服務匯流排命名空間連線設定。

  5. 開啟新的 ServiceBusTrigger.cs 專案檔,將 ServiceBusTrigger 類別取代為下列程式碼:

    public static class ServiceBusTrigger
    {
        [FunctionName("ServiceBusTrigger")]
        public static void Run([ServiceBusTrigger("myinputqueue", 
            Connection = "ServiceBusConnection")]string myQueueItem, ILogger log)
        {
            log.LogInformation($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
        }
    }
    

    此程式碼範例會將佇列名稱更新為 myinputqueue,與您稍早建立的佇列名稱相同。 它也會將服務匯流排連線的名稱設定為 ServiceBusConnection。 此名稱是您在入口網站中設定的身分識別型連線 ServiceBusConnection__fullyQualifiedNamespace 所使用的服務匯流排命名空間。

注意

如果您嘗試使用 func start 立即執行函數,將收到錯誤訊息。 這是因為您沒有在本機定義的身分識別型連線。 如果您想要在本機執行函數,請如同您在上一節中所做的那樣在 local.settings.json 中設定應用程式設定 ServiceBusConnection__fullyQualifiedNamespace。 此外,您必須將角色指派給開發人員身分識別。 如需詳細資訊,請參閱使用身分識別型連線進行本機開發文件

注意

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

例如: ServiceBusConnection:fullyQualifiedNamespace

發佈更新的專案

  1. 執行下列命令,在本機產生部署套件所需的檔案:

    dotnet publish --configuration Release
    
  2. 瀏覽至 \bin\Release\netcoreapp3.1\publish 子資料夾,並將其內容建立為一個 .zip 檔案。

  3. 執行下列命令來發佈 .zip 檔案,並根據需要取代 FUNCTION_APP_NAMERESOURCE_GROUP_NAMEPATH_TO_ZIP 參數:

    az functionapp deploy -n FUNCTION_APP_NAME -g RESOURCE_GROUP_NAME --src-path PATH_TO_ZIP
    

使用新的觸發程式來更新函數應用程式後,您可以使用身分識別確認其是否正常運作。

驗證您的變更

  1. 在入口網站中,搜尋 Application Insights 並選取 [服務] 底下的 [Application Insights]。

  2. 在 [Application Insights]中,瀏覽或搜尋具名執行個體。

  3. 在執行個體中,選取 [調查] 底下的 [即時計量]。

  4. 將上一個索引標籤保持開啟,然後在新的索引標籤中開啟 Azure 入口網站。在新的索引標籤中瀏覽至服務匯流排命名空間,從左側刀鋒視窗中選取 [佇列]

  5. 選取名為 myinputqueue 的佇列。

  6. 從左側刀鋒視窗中選取 [Service Bus Explorer]。

  7. 傳送測試訊息。

  8. 選取開啟的 [即時計量] 索引標籤,並查看服務匯流排佇列執行情況。

恭喜! 您已成功使用受控識別來設定服務匯流排佇列觸發程式!

清除資源

在上述步驟中,您已建立資源群組中的 Azure 資源。 如果您預期未來不需要這些資源,則可以藉由刪除資源群組予以刪除。

從 Azure 入口網站功能表或 [首頁] 頁面,選取 [資源群組]。 然後,在 [資源群組] 頁面上,選取 [myResourceGroup]

在 [myResourceGroup] 頁面上,確定所列出的資源是您想要刪除的項目。

選取 [刪除資源群組],在文字方塊中輸入 myResourceGroup,然後選取 [刪除]

下一步

在本教學課程中,您已建立具有身分識別型連線的函數應用程式。

使用下列連結來深入瞭解具有身分識別型連線的 Azure Functions: