Service Fabric 應用程式資源模型

有多種選擇可讓您在 Service Fabric 叢集上部署 Azure Service Fabric 應用程式。 建議使用 Azure Resource Manager。 如果使用 Resource Manager,您可以採用 JSON 來描述應用程式和服務,然後部署在與叢集相同的 Resource Manager 範本中。 不同於使用 PowerShell 或 Azure CLI 來部署和管理應用程式,如果您使用 Resource Manager,則不需要等待叢集準備就緒;應用程式註冊、佈建和部署全都可以在一個步驟中進行。 使用 Resource Manager 是在叢集上管理應用程式生命週期的最佳方式。 如需詳細資訊,請參閱最佳做法:基礎結構即程式碼

在 Resource Manager 中將資源當成應用程式來管理,可協助您改進這幾方面:

  • 稽核線索:Resource Manager 稽核每個作業,並保留詳細的活動記錄。 活動記錄可協助您追蹤對應用程式和叢集所做的任何變更。
  • 角色型存取控制:您可以使用相同的 Resource Manager 範本,管理以何種權限存取叢集和部署於叢集的應用程式。
  • 管理效率:使用 Resource Manager 讓您集中一處 (Azure 入口網站) 來管理叢集和重要的應用程式部署。

在本文中,您將了解如何:

  • 使用 Resource Manager 來部署應用程式資源。
  • 使用 Resource Manager 來升級應用程式資源。
  • 刪除應用程式資源。

部署應用程式資源

使用 Resource Manager 應用程式資源模型來部署應用程式及其服務的概略步驟如下:

  1. 封裝應用程式程式碼。
  2. 上傳封裝。
  3. 在 Resource Manager 範本中參考封裝的位置當作應用程式資源。

如需詳細資訊,請參閱封裝應用程式

接著,建立 Resource Manager 範本、以應用程式詳細資料來更新參數檔案,然後在 Service Fabric 叢集上部署範本。 探索範例

建立儲存體帳戶

若要從 Resource Manager 範本部署應用程式,您必須有儲存體帳戶。 儲存體帳戶用來暫存應用程式映像。

您可以重複使用現有的儲存體帳戶,或建立新的儲存體帳戶,以暫存應用程式。 如果您使用現有的儲存體帳戶,則可以跳過此步驟。

Create a storage account

設定儲存體帳戶

建立儲存體帳戶之後,您可以建立可暫存應用程式的 Blob 容器。 在 Azure 入口網站中,移至您要用來儲存應用程式的 Azure 儲存體帳戶。 選取 [Blob]>[新增容器]

將公用存取層級設定為私人可保護叢集上的資源。 您可以透過多種方式授與存取權:

下列螢幕擷取畫面中的範例使用 Blob 的匿名讀取存取。

Create blob

將應用程式暫存在儲存體帳戶中

您先必須將應用程式暫存在 Blob 儲存體中,才可以部署應用程式。 在本教學課程中,我們會手動建立應用程式封裝。 請記住,這個步驟可以自動化。 如需詳細資訊,請參閱封裝應用程式

在本教學課程中,我們使用 Voting 應用程式範例

  1. 在 Visual Studio 中,以滑鼠右鍵按一下 Voting 專案,然後選取 [封裝]

    Package Application

  2. 移至 .\service-fabric-dotnet-quickstart\Voting\pkg\Debug 目錄。 將內容壓縮成名為 Voting.zip 的檔案。 ApplicationManifest.xml 檔案應該在 ZIP 檔案中的根目錄。

    Zip Application

  3. 重新命名檔案,將副檔名從 .zip 變更為 .sfpkg

  4. 在 Azure 入口網站中,在儲存體帳戶的 apps 容器中選取 [上傳],然後上傳 Voting.sfpkg

    Upload App Package

現在,應用程式已暫存,您可以建立 Resource Manager 範本來部署應用程式。

建立 Resource Manager 範本

應用程式範例包含 Azure Resource Manager 範本,可用來部署應用程式。 範本檔案名稱為 UserApp.json 和 UserApp.Parameters.json

注意

必須以您的叢集名稱更新 UserApp.Parameters.json 檔案。

參數 描述 範例 註解
clusterName 叢集名稱,代表您要部署到此叢集 sf-cluster123
應用程式 應用程式的名稱 投票
applicationTypeName 應用程式的類型名稱 VotingType 必須符合 ApplicationManifest.xml
applicationTypeVersion 應用程式類型的版本 1.0.0 必須符合 ApplicationManifest.xml
serviceName 服務的名稱 Voting~VotingWeb 格式必須是 ApplicationName~ServiceType
serviceTypeName 服務的類型名稱 VotingWeb 必須符合 ServiceManifest.xml
appPackageUrl 應用程式的 Blob 儲存體 URL https://servicefabricapps.blob.core.windows.net/apps/Voting.sfpkg 在 Blob 儲存體中,應用程式封裝的 URL (本文稍後說明設定 URL 的程序)
{
    "apiVersion": "2019-03-01",
    "type": "Microsoft.ServiceFabric/clusters/applications",
    "name": "[concat(parameters('clusterName'), '/', parameters('applicationName'))]",
    "location": "[variables('clusterLocation')]",
},
{
    "apiVersion": "2019-03-01",
    "type": "Microsoft.ServiceFabric/clusters/applicationTypes",
    "name": "[concat(parameters('clusterName'), '/', parameters('applicationTypeName'))]",
    "location": "[variables('clusterLocation')]",
},
{
    "apiVersion": "2019-03-01",
    "type": "Microsoft.ServiceFabric/clusters/applicationTypes/versions",
    "name": "[concat(parameters('clusterName'), '/', parameters('applicationTypeName'), '/', parameters('applicationTypeVersion'))]",
    "location": "[variables('clusterLocation')]",
},
{
    "apiVersion": "2019-03-01",
    "type": "Microsoft.ServiceFabric/clusters/applications/services",
    "name": "[concat(parameters('clusterName'), '/', parameters('applicationName'), '/', parameters('serviceName'))]",
    "location": "[variables('clusterLocation')]"
}

部署應用程式

執行 New-AzResourceGroupDeployment Cmdlet,將應用程式部署至叢集所在的資源群組:

New-AzResourceGroupDeployment -ResourceGroupName "sf-cluster-rg" -TemplateParameterFile ".\UserApp.Parameters.json" -TemplateFile ".\UserApp.json" -Verbose

使用 Resource Manager 升級 Service Fabric 應用程式

重要

透過 ARM JSON 定義所部署的任何服務,都必須從相應 ApplicationManifest.xml 檔案的 DefaultServices 區段中移除。

基於下列其中一個原因,您可能升級已部署至 Service Fabric 叢集的應用程式:

  • 新的服務新增至應用程式。 將服務新增至應用程式時,必須在 service-manifest.xml 和 application-manifest.xml 檔案中新增服務定義。 為了反映應用程式的新版本,您也必須在 UserApp.Parameters.json 中將應用程式類型版本從 1.0.0 變更為 1.0.1:

    "applicationTypeVersion": {
        "value": "1.0.1"
    },
    "serviceName2": {
        "value": "Voting~VotingData"
    },
    "serviceTypeName2": {
        "value": "VotingDataType"
    }
    
  • 現有服務的新版本新增至應用程式。 例如,應用程式的程式碼變更,以及應用程式類型版本和名稱更新。 針對此升級,請如下更新 UserApp.Parameters.json:

     "applicationTypeVersion": {
        "value": "1.0.1"
    },
    

刪除應用程式資源

若要刪除在 Resource Manager 中使用應用程式資源模型部署的應用程式:

  1. 使用 Get-AzResource Cmdlet 取得應用程式的資源識別碼:

    Get-AzResource  -Name <String> | f1
    
  2. 使用 Remove-AzResource Cmdlet 刪除應用程式資源:

    Remove-AzResource  -ResourceId <String> [-Force] [-ApiVersion <String>]
    

常見問題和解答

錯誤:「應用程式名稱必須是服務名稱的前置詞」解答:請確定服務名稱的格式如下:ProfileVetSF~CallTicketDataWebApi。

下一步

取得應用程式資源模型的相關資訊: