本教學課程說明如何設定 Azure Functions,以使用受控識別 (而非儲存在函數應用程式設定中的密碼) 連線到 Azure 服務匯流排佇列。 本教學課程是接續建立其定義沒有預設儲存體密碼的函數應用程式教學課程。 若要深入瞭解身分識別型連線,請參閱設定身分識別型連線。
雖然顯示的程序通常適用於所有語言,但本教學課程目前專門用來支援 Windows 上的 C# 類別庫函數。
在本教學課程中,您會了解如何:
- 建立服務匯流排命名空間與佇列。
- 使用受控識別設定函數應用程式。
- 建立角色指派,授與該身分識別從服務匯流排佇列讀取的權限。
- 使用服務匯流排觸發程序建立和部署函數應用程式。
- 確認與服務匯流排的身分識別型連線。
必要條件
Azure Functions 核心工具 4.x 版。
完成上一個教學課程:使用身分識別型連線建立函數應用程式。
建立服務匯流排命名空間與佇列
在 Azure 入口網站中,選擇 [建立資源 (+)]。
在 [建立資源] 頁面上,搜尋並選取 [服務匯流排],然後選取 [建立]。
在 [基本]頁面上,使用下表設定 服務匯流排命名空間設定。 其餘選項使用預設設定。
選項 建議的值 描述 訂用帳戶 您的訂用帳戶 建立您資源所在位置的訂用帳戶。 資源群組 myResourceGroup 使用函數應用程式建立的資源群組。 命名空間名稱 全域唯一的名稱 要從中觸發函數之執行個體的命名空間。 因為命名空間可公開存取,所以您必須使用在 Azure 中全域唯一的名稱。 名稱的長度也必須介於 6 到 50 個字元之間,只包含英數位元和連字號,且不能以數字開頭。 位置 myFunctionRegion 建立函數應用程式的區域。 定價層 基本 基本服務匯流排層。 選取 [檢閱 + 建立]。 驗證完成後,選取 [建立]。
部署完成後,選取 [移至資源]。
在新的服務匯流排命名空間中,選取 [+ 佇列] 以新增佇列。
輸入 myinputqueue 作為新佇列的名稱,然後選取 [建立]。
現在,您已有一個佇列,您可以將角色指派新增至函數應用程式的受控識別。
使用受控識別設定您的服務匯流排觸發程序
若要搭配身分識別型連線使用服務匯流排觸發程序,您必須將Azure 服務匯流排資料接收者角色指派新增至函數應用程式中的受控識別。 使用受控識別觸發服務匯流排命名空間時,需要此角色。 您也可以將自己的帳戶新增至此角色,即可在本機測試期間連線到服務匯流排命名空間。
附註
使用身分識別型連線的角色需求會因服務及連線方式而有所不同。 需求會因觸發程序、輸入繫結和輸出繫結而有所不同。 如需特定角色需求的詳細資訊,請參閱服務的觸發程序和繫結文件。
在您所建立的服務匯流排命名空間中,選取 [存取控制 (IAM)]。 您可以在此頁面檢視及設定有權存取資源的人員。
選取 [+ 新增] 並選取 [新增角色指派]。
搜尋 Azure 服務匯流排資料接收者、選取它,然後選取 [下一步]。
在 [成員] 索引標籤上的 [指派存取權的對象] 底下,選擇 [受控識別]
選取 [選取成員] 以開啟 [選取受控識別] 面板。
確認 [訂用帳戶] 是您稍早建立資源的訂用帳戶。
在 [受控識別] 選取器中,從 [系統指派的受控識別] 類別中選擇 [函數應用程式]。 「函數應用程式」標籤旁邊可能有一個以括號括住的數字,指出訂用帳戶中具有系統指派身分識別的應用程式數目。
您的應用程式應該會出現在輸入欄位下方的清單中。 如果畫面上未顯示,可以使用 [選取] 方塊篩選具有您應用程式名稱的結果。
選取您的應用程式。 該應用程式應該會向下移至 [選取的成員] 區段。 選取 [選取] 。
回到 [新增角色指派] 畫面上,選取 [檢閱 + 指派]。 檢閱設定,然後選取 [檢閱 + 指派]。
您已使用受控識別授與函數應用程式對服務匯流排命名空間的存取權限。
在函數應用程式中連線服務匯流排
在入口網站中,搜尋您在上一個教學課程中建立的函數應用程式,或在 [函數應用程式] 頁面中瀏覽。
在您的函數應用程式中,展開 [設定],然後選取 [環境變數]。
在 [應用程式設定] 索引標籤中,選取 [+ 新增] 以建立設定。 使用下表中的資訊輸入新設定的名稱和值:
名稱 值 描述 ServiceBusConnection__fullyQualifiedNamespace <SERVICE_BUS_NAMESPACE>.servicebus.windows.net 此設定使用身分識別型連線 (而非祕密) 將函數應用程式連線至服務匯流排。 選取 [套用],然後選取 [套用] 和 [確認],以儲存變更並重新啟動應用程式函式。
附註
當您使用 Azure 應用程式組態或 Key Vault 來提供「受控識別」連線的設定時,設定名稱應使用有效的索引鍵分隔符號,例如:: 或 / 取代 __,以確保正確解析名稱。
例如: ServiceBusConnection:fullyQualifiedNamespace。
備妥函數應用程式,以使用受控識別連接到服務匯流排命名空間後,您可以將使用服務匯流排觸發程序的新函數新增至本機專案。
新增服務匯流排觸發的函數
如下執行
func init命令,以使用指定的執行階段,在名為 LocalFunctionProj 的資料夾中建立函式專案:func init LocalFunctionProj --dotnet瀏覽至專案資料夾:
cd LocalFunctionProj在根專案資料夾中,執行下列命令:
dotnet add package Microsoft.Azure.WebJobs.Extensions.ServiceBus --version 5.2.0此命令會以支援受控識別的版本取代服務匯流排延伸模組套件的預設版本。
執行下列命令,將服務匯流排觸發的函數新增至專案:
func new --name ServiceBusTrigger --template ServiceBusQueueTrigger此命令會為新的服務匯流排觸發程序新增程式碼,並為延伸模組套件新增參考。 您必須為此觸發程序新增服務匯流排命名空間連線設定。
開啟新的 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 執行函數,您將收到錯誤。 這是因為您沒有在本機定義的身分識別型連線。 如果您想要在本機執行函數,請按照[上一節](#connect-to-the service-bus-in-your-function-app)中的方法在 ServiceBusConnection__fullyQualifiedNamespace 中設定應用程式設定 local.settings.json。 此外,您還必須將角色指派給您的開發人員身分識別。 如需詳細資訊,請參閱使用身分識別型連線進行本機開發。
附註
使用 Azure 應用程式組態或 Key Vault 來提供「受控識別」連線的設定時,設定名稱應使用有效的索引鍵分隔符號,例如:: 或 / 取代 __,以確保正確解析名稱。
例如: ServiceBusConnection:fullyQualifiedNamespace。
發佈更新的專案
執行下列命令,在本機產生部署套件所需的檔案:
dotnet publish --configuration Release瀏覽至
\bin\Release\netcoreapp3.1\publish子資料夾,並將其內容建立為一個 .zip 檔案。執行下列命令來發佈 .zip 檔案,並根據需要取代
FUNCTION_APP_NAME、RESOURCE_GROUP_NAME和PATH_TO_ZIP參數:az functionapp deploy -n FUNCTION_APP_NAME -g RESOURCE_GROUP_NAME --src-path PATH_TO_ZIP
現在您已使用新的觸發程序更新了函數應用程式,您可以使用身分識別來驗證它是否正常運作。
驗證變更
在入口網站中,搜尋
Application Insights並選取 [服務] 底下的 [Application Insights]。在 [Application Insights]中,瀏覽或搜尋具名執行個體。
在執行個體中,選取 [調查] 底下的 [即時計量]。
上一個分頁保持開啟,然後在新分頁中開啟 Azure 入口網站。在新分頁中,瀏覽至您的服務匯流排命名空間,從左側功能表中選取 [佇列]。
選取名為
myinputqueue的佇列。從左側功能表中選取 [Service Bus Explorer]。
傳送測試訊息。
選取開啟的 [即時計量] 索引標籤,並查看服務匯流排佇列執行情況。
恭喜! 您已成功使用受控識別來設定服務匯流排佇列觸發程序。
清除資源
在前述步驟中,您在資源群組中建立了 Azure 資源。 如果你預期未來不會需要這些資源,可以透過刪除資源群組來刪除它們:
從 Azure 入口網站選單或首頁,選擇 資源群組>myResourceGroup。
在 myResourceGroup 窗格中,確保列出的資源是你想刪除的。
選擇 ,刪除資源群組。 在文字框輸入 myResourceGroup 確認,然後選擇 刪除。
後續步驟
在本教學課程中,您已建立具有身分識別型連線的函數應用程式。
請前往下一篇文章以了解如何管理身分識別。