Service Fabric 애플리케이션 리소스 모델

Service Fabric 클러스터에 Azure Service Fabric 애플리케이션을 배포하기 위한 여러 옵션이 있습니다. Azure Resource Manager를 사용하는 것이 좋습니다. Resource Manager를 사용하는 경우 애플리케이션과 서비스를 JSON 형식으로 설명한 다음, 클러스터와 동일한 Resource Manager 템플릿에 배포할 수 있습니다. PowerShell 또는 Azure CLI를 사용하여 애플리케이션을 배포하고 관리하는 것과 달리, Resource Manager를 사용하는 경우 클러스터가 준비될 때까지 기다릴 필요가 없습니다. 애플리케이션 등록, 프로비전 및 배포를 모두 한 단계로 수행할 수 있습니다. 클러스터에서 애플리케이션 수명 주기를 관리하는 가장 좋은 방법은 Resource Manager를 사용하는 것입니다. 자세한 내용은 모범 사례: IaC(Infrastructure as Code)를 참조하세요.

Resource Manager의 리소스로 애플리케이션을 관리하면 다음과 같은 영역에서 향상된 기능을 얻을 수 있습니다.

  • 감사 내역: Resource Manager가 모든 작업을 감사하고 자세한 활동 로그를 유지합니다. 활동 로그는 애플리케이션 및 클러스터에 대한 변경 내용을 추적하는 데 도움이 될 수 있습니다.
  • 역할 기반 액세스 제어: 동일한 Resource Manager 템플릿을 사용하여 클러스터 및 클러스터에 배포된 애플리케이션에 대한 액세스를 관리할 수 있습니다.
  • 관리 효율성: Resource Manager를 사용하면 클러스터 및 중요한 애플리케이션 배포를 관리할 수 있는 단일 위치(Azure Portal)가 제공됩니다.

이 문서에서 학습할 내용은 다음과 같습니다.

  • Resource Manager를 사용하여 애플리케이션 리소스를 배포합니다.
  • Resource Manager를 사용하여 애플리케이션 리소스를 업그레이드합니다.
  • 애플리케이션 리소스를 삭제합니다.

애플리케이션 리소스 배포

Resource Manager 애플리케이션 리소스 모델을 사용하여 애플리케이션 및 해당 서비스를 배포하기 위해 수행하는 상위 레벨 단계는 다음과 같습니다.

  1. 애플리케이션 코드를 패키징합니다.
  2. 패키지를 업로드합니다.
  3. Resource Manager 템플릿에서 패키지의 위치를 애플리케이션 리소스로 참조합니다.

자세한 내용은 애플리케이션 패키지를 참조하세요.

그런 다음 Resource Manager 템플릿을 만들고 애플리케이션 세부 정보를 사용하여 매개 변수 파일을 업데이트한 다음, Service Fabric 클러스터에 템플릿을 배포합니다. 샘플을 살펴보세요.

저장소 계정 만들기

Resource Manager 템플릿에서 애플리케이션을 배포하려면 스토리지 계정이 있어야 합니다. 스토리지 계정은 애플리케이션 이미지 파일을 저장하는데 사용됩니다.

기존 스토리지 계정을 다시 사용하거나 애플리케이션을 준비하기 위한 새 스토리지 계정을 만들 수 있습니다. 기존 스토리지 계정을 사용하는 경우에는 이 단계를 건너뛰면 됩니다.

Create a storage account

스토리지 계정 구성

스토리지 계정을 만든 후에는 애플리케이션이 준비될 수 있는 Blob 컨테이너를 만듭니다. Azure Portal에서 애플리케이션을 저장할 Azure Storage 계정으로 이동합니다. Blobs>컨테이너 추가를 선택합니다.

공용 액세스 수준을 개인으로 설정하여 클러스터의 리소스를 보호할 수 있습니다. 액세스 권한은 여러 가지 방법으로 부여할 수 있습니다.

다음 스크린샷 예제에서는 Blob에 대한 익명 읽기 액세스를 사용합니다.

Create blob

스토리지 계정에서 애플리케이션 준비

애플리케이션을 배포하려면 먼저 Blob 스토리지에서 애플리케이션을 준비해야 합니다. 이 자습서에서는 애플리케이션 패키지를 수동으로 만듭니다. 이 단계는 자동화할 수 있습니다. 자세한 내용은 애플리케이션 패키징을 참조하세요.

이 자습서에서는 투표 샘플 애플리케이션을 사용합니다.

  1. Visual Studio에서 프로젝트 투표를 마우스 오른쪽 단추로 클릭한 다음, 패키지를 선택합니다.

    Package Application

  2. .\service-fabric-dotnet-quickstart\Voting\pkg\Debug 디렉터리로 이동합니다. 콘텐츠를 Voting.zip이라는 파일로 압축합니다. ApplicationManifest.xml 파일은 zip 파일의 루트에 있어야 합니다.

    Zip Application

  3. 파일 이름을 바꿔서 확장명을 .zip에서 .sfpkg로 변경합니다.

  4. Azure Portal의 스토리지 계정에 대한 컨테이너에서 업로드를 선택한 후 Voting.sfpkg를 업로드합니다.

    Upload App Package

이제 애플리케이션이 준비되었으며 Resource Manager 템플릿을 만들어 애플리케이션을 배포할 수 있습니다.

리소스 관리자 템플릿 만들기

샘플 애플리케이션에는 애플리케이션을 배포하는 데 사용할 수 있는 Azure Resource Manager 템플릿이 포함되어 있습니다. 템플릿 파일 이름은 UserApp.jsonUserApp.Parameters.json입니다.

참고 항목

UserApp.Parameters.json 파일은 클러스터의 이름을 사용하여 업데이트해야 합니다.

매개 변수 설명 예시 설명
clusterName 배포하는 클러스터의 이름 sf-cluster123
애플리케이션 애플리케이션의 이름 Voting
applicationTypeName 애플리케이션의 유형 이름 VotingType ApplicationManifest.xml과 일치해야 함
applicationTypeVersion 애플리케이션 유형의 버전입니다. 1.0.0 ApplicationManifest.xml과 일치해야 함
serviceName 서비스의 이름 Voting~VotingWeb ApplicationName ~ ServiceType 형식이어야 함
serviceTypeName 서비스 형식 이름 VotingWeb ServiceManifest.xml과 일치해야 함
appPackageUrl 애플리케이션의 Blob Storage URL https://servicefabricapps.blob.core.windows.net/apps/Voting.sfpkg Blob Storage에 있는 애플리케이션 패키지의 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')]"
}

애플리케이션 배포

AzResourceGroupDeployment cmdlet을 실행하여 클러스터를 포함하는 리소스 그룹에 애플리케이션을 배포합니다.

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

Resource Manager를 사용하여 Service Fabric 애플리케이션 업그레이드

Important

ARM JSON 정의를 통해 배포되는 모든 서비스는 해당 ApplicationManifest.xml 파일의 DefaultServices 섹션에서 제거해야 합니다.

다음과 같은 이유 중 하나로 Service Fabric 클러스터에 이미 배포된 애플리케이션을 업그레이드할 수 있습니다.

  • 새 서비스가 애플리케이션에 추가됩니다. 서비스가 애플리케이션에 추가되는 경우 service-manifest.xmlapplication-manifest.xml 파일에 서비스 정의를 추가해야 합니다. 또한 애플리케이션의 새 버전을 반영하려면 애플리케이션 유형 버전을 UserApp.Parameters.js의 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을 사용하여 애플리케이션의 리소스 ID를 가져옵니다.

    Get-AzResource  -Name <String> | f1
    
  2. Remove-AzResource cmdlet을 사용하여 애플리케이션 리소스를 삭제합니다.

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

일반적인 질문과 답변

오류: "애플리케이션 이름은 서비스 이름의 접두사여야 합니다." 응답: 서비스 이름이 ProfileVetSF~CallTicketDataWebApi와 같이 형식이 지정되어 있는지 확인합니다.

다음 단계

애플리케이션 리소스 모델에 대한 정보를 가져옵니다.