分享方式:


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

本教學課程說明如何使用受控識別來設定 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 應用程式組態金鑰保存庫 來提供受控識別連線的設定時,設定名稱應該使用有效的索引鍵分隔符,例如 :/,以取代 __ ,以確保正確解析名稱。

例如: 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,如同您在 [上一節] 中所做的一樣(#connect-to-service-bus-in-your-function-app)。 此外,您必須將角色指派給開發人員身分識別。 如需詳細資訊,請參閱 使用身分識別型連線進行本機開發。

注意

使用 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. 從左側功能表中選取 [服務匯流排 總管]。

  7. 傳送測試訊息。

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

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

清除資源

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

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

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

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

下一步

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

請前進到下一篇文章,以瞭解如何管理身分識別。