자습서: Azure의 Service Fabric 클러스터에 Java 애플리케이션 배포

이 자습서는 시리즈의 3부로, Azure에서 클러스터에 Service Fabric 애플리케이션을 배포하는 방법을 보여줍니다.

시리즈 3부에서는 다음 방법에 대해 알아봅니다.

  • Azure에서 보안 Linux 클러스터 만들기
  • 클러스터에 애플리케이션 배포

이 자습서 시리즈에서는 다음 방법에 대해 알아봅니다.

필수 조건

이 자습서를 시작하기 전에:

Azure에서 Service Fabric 클러스터 만들기

다음 단계에서는 Service Fabric 클러스터에 애플리케이션을 배포하는 데 요구되는 필요한 리소스를 만듭니다. 또한 ELK(Elasticsearch, Logstash, Kibana) 스택을 사용하여 솔루션의 상태를 모니터링하는 데 필요한 리소스를 설정합니다. 특히, Event Hubs는 Service Fabric에서 로그에 대한 싱크로 사용됩니다. Service Fabric 클러스터에서 Logstash 인스턴스에 로그를 보내기 위해 구성됩니다.

  1. 터미널을 열고 필요한 도우미 스크립트와 Azure에서 리소스를 만들 템플릿을 포함하는 다음 패키지 다운로드

    git clone https://github.com/Azure-Samples/service-fabric-java-quickstart.git
    
  2. Azure 계정에 로그인

    az login
    
  3. 리소스를 만들려면 사용하려는 Azure 구독 설정

    az account set --subscription [SUBSCRIPTION-ID]
    
  4. service-fabric-java-quickstart/AzureCluster 폴더에서 다음 명령을 실행해 Key Vault에서 클러스터 인증서를 만듭니다. 이 인증서는 Service Fabric 클러스터를 보호하는 데 사용됩니다. 영역(Service Fabric 클러스터와 동일해야 함), Key Vault 리소스 그룹 이름, Key Vault 이름, 인증서 암호 및 클러스터 DNS 이름을 제공합니다.

    ./new-service-fabric-cluster-certificate.sh [REGION] [KEY-VAULT-RESOURCE-GROUP] [KEY-VAULT-NAME] [CERTIFICATE-PASSWORD] [CLUSTER-DNS-NAME-FOR-CERTIFICATE]
    
    Example: ./new-service-fabric-cluster-certificate.sh 'westus' 'testkeyvaultrg' 'testkeyvault' '<password>' 'testservicefabric.westus.cloudapp.azure.com'
    

    위의 명령은 나중에 사용하기 위해 확인해야 하는 다음 정보를 반환합니다.

    Source Vault Resource Id: /subscriptions/<subscription_id>/resourceGroups/testkeyvaultrg/providers/Microsoft.KeyVault/vaults/<name>
    Certificate URL: https://<name>.vault.azure.net/secrets/<cluster-dns-name-for-certificate>/<guid>
    Certificate Thumbprint: <THUMBPRINT>
    
  5. 로그를 저장하는 스토리지 계정에 대한 리소스 그룹 만들기

    az group create --location [REGION] --name [RESOURCE-GROUP-NAME]
    
    Example: az group create --location westus --name teststorageaccountrg
    
  6. 생산될 로그를 저장하는 데 사용될 스토리지 계정 만들기

    az storage account create -g [RESOURCE-GROUP-NAME] -l [REGION] --name [STORAGE-ACCOUNT-NAME] --kind Storage
    
    Example: az storage account create -g teststorageaccountrg -l westus --name teststorageaccount --kind Storage
    
  7. Azure Portal에 액세스하고 Storage 계정에 대한 공유 액세스 서명 탭으로 이동합니다. 다음과 같이 SAS 토큰을 생성합니다.

    스토리제에 대한 SAS 생성

  8. 계정 SAS URL을 복사하고 Service Fabric 클러스터를 만들 때 사용하기 위해 따로 보관해 둡니다. 다음 URL과 유사합니다.

    ?sv=2017-04-17&ss=bfqt&srt=sco&sp=rwdlacup&se=2018-01-31T03:24:04Z&st=2018-01-30T19:24:04Z&spr=https,http&sig=IrkO1bVQCHcaKaTiJ5gilLSC5Wxtghu%2FJAeeY5HR%2BPU%3D
    
  9. Event Hub 리소스를 포함하는 리소스 그룹을 만듭니다. Event Hubs는 Service Fabric에서 ELK 리소스를 실행하는 서버로 메시지를 보내는 데 사용됩니다.

    az group create --location [REGION] --name [RESOURCE-GROUP-NAME]
    
    Example: az group create --location westus --name testeventhubsrg
    
  10. 다음 명령을 사용하여 Event Hubs 리소스를 만듭니다. 지시에 따라 namespaceName, eventHubName, consumerGroupName, sendAuthorizationRule 및 receiveAuthorizationRule에 대한 세부 정보를 입력합니다.

    az deployment group create -g [RESOURCE-GROUP-NAME] --template-file eventhubsdeploy.json
    
    Example:
    az deployment group create -g testeventhubsrg --template-file eventhubsdeploy.json
    Please provide string value for 'namespaceName' (? for help): testeventhubnamespace
    Please provide string value for 'eventHubName' (? for help): testeventhub
    Please provide string value for 'consumerGroupName' (? for help): testeventhubconsumergroup
    Please provide string value for 'sendAuthorizationRuleName' (? for help): sender
    Please provide string value for 'receiveAuthorizationRuleName' (? for help): receiver
    

    이전 명령의 JSON 출력에서 출력 필드의 내용을 복사합니다. 보낸 사람 정보는 Service Fabric 클러스터를 만들 때 사용됩니다. 수신기 이름 및 키는 Logstash 서비스가 Event Hub에서 메시지를 수신하도록 구성된 경우 다음 자습서에서 사용하기 위해 저장돼야 합니다. 다음 BLOB은 JSON 출력 예제입니다.

    "outputs": {
        "receiver Key": {
            "type": "String",
            "value": "[KEY]"
        },
        "receiver Name": {
            "type": "String",
            "value": "receiver"
        },
        "sender Key": {
            "type": "String",
            "value": "[KEY]"
        },
        "sender Name": {
            "type": "String",
            "value": "sender"
        }
    }
    
  11. eventhubssastoken.py 스크립트를 실행해 만든 EventHubs 리소스에 대한 SAS url을 생성합니다. 이 SAS URL은 Event Hubs에 로그를 보낼 Service Fabric 클러스터에서 사용합니다. 결과적으로 보낸 사람 정책은 URL을 생성하는 데 사용됩니다. 스크립트는 다음 단계에서 사용되는 Event Hubs 리소스에 대한 SAS URL을 반환합니다.

    python3 eventhubssastoken.py 'testeventhubs' 'testeventhubs' 'sender' '[PRIMARY-KEY]'
    

    반환된 JSON에서 sr 필드 값을 복사합니다. sr 필드 값은 EventHubs에 대한 SAS 토큰입니다. 다음 URL은 sr 필드의 예제입니다.

    https%3A%2F%testeventhub.servicebus.windows.net%testeventhub&sig=7AlFYnbvEm%2Bat8ALi54JqHU4i6imoFxkjKHS0zI8z8I%3D&se=1517354876&skn=sender
    

    EventHubs에 대한 SAS URL은 https://<namespacename>.servicebus.windows.net/<eventhubsname>?sr=<sastoken> 구조를 따릅니다. 예를 들어 https://testeventhubnamespace.servicebus.windows.net/testeventhub?sr=https%3A%2F%testeventhub.servicebus.windows.net%testeventhub&sig=7AlFYnbvEm%2Bat8ALi54JqHU4i6imoFxkjKHS0zI8z8I%3D&se=1517354876&skn=sender

  12. sfdeploy.parameters.json 파일을 열고 이전 단계에서 다음 내용을 바꿉니다. [SAS-URL-STORAGE-ACCOUNT]는 8단계에서 적어 두었습니다. [SAS-URL-EVENT-HUBS]는 11단계에서 적어 두었습니다.

    "applicationDiagnosticsStorageAccountName": {
        "value": "teststorageaccount"
    },
    "applicationDiagnosticsStorageAccountSasToken": {
        "value": "[SAS-URL-STORAGE-ACCOUNT]"
    },
    "loggingEventHubSAS": {
        "value": "[SAS-URL-EVENT-HUBS]"
    }
    
  13. sfdeploy.parameters.json이 열립니다. 다음 매개 변수를 변경한 다음, 파일을 저장합니다.

    • clusterName. 소문자와 숫자만 사용합니다.
    • adminUserName(빈 값이 아닌 값)
    • adminPassword(빈 값이 아닌 값)
  14. Service Fabric 클러스터를 만들려면 다음 명령 실행

    az sf cluster create --location 'westus' --resource-group 'testlinux' --template-file sfdeploy.json --parameter-file sfdeploy.parameters.json --secret-identifier <certificate_url_from_step4>
    

클러스터에 애플리케이션 배포

  1. 애플리케이션을 배포 하기 전에 다음 코드 조각을 Voting/VotingApplication/ApplicationManifest.xml 파일에 추가해야 합니다. X509FindValue 필드는 Azure에서 Service Fabric 클러스터 만들기 섹션의 4단계에서 반환된 지문입니다. 이 코드 조각은 ApplicationManifest 필드(루트 필드) 아래에 중첩됩니다.

    <Certificates>
          <SecretsCertificate X509FindType="FindByThumbprint" X509FindValue="[CERTIFICATE-THUMBPRINT]" />
    </Certificates>
    
  2. 이 클러스터에 애플리케이션을 배포하려면 클러스터에 연결을 설정할 SFCTL을 사용해야 합니다. SFCTL은 클러스터에 연결하기 위해 공용 및 프라이빗 키가 있는 PEM 파일이 필요합니다. 다음 명령을 실행하여 공용 및 프라이빗 키가 있는 PEM 파일을 생성합니다.

    openssl pkcs12 -in <clustername>.<region>.cloudapp.azure.com.pfx -out sfctlconnection.pem -nodes -passin pass:<password>
    
  3. 다음 명령을 실행하여 클러스터에 연결합니다.

    sfctl cluster select --endpoint https://<clustername>.<region>.cloudapp.azure.com:19080 --pem sfctlconnection.pem --no-verify
    
  4. 애플리케이션을 배포하려면 Voting/Scripts 폴더로 이동해 install.sh 스크립트를 실행합니다.

    ./install.sh
    
  5. Service Fabric Explorer에 액세스하려면 좋아하는 브라우저를 열고 https://testlinuxcluster.westus.cloudapp.azure.com:19080 에 입력합니다. 이 엔드포인트에 연결하는 데 사용하려는 인증서 저장소에서 인증서를 선택합니다. Linux 컴퓨터를 사용하는 경우 Service Fabric Explorer를 보려면 new-service-fabric-cluster-certificate.sh 스크립트에서 생성한 인증서를 크롬으로 가져와야 합니다. Mac을 사용하는 경우 Keychain에 PFX 파일을 설치해야 합니다. 애플리케이션이 클러스터에 설치됐음을 알립니다.

    SFX Java Azure

  6. 애플리케이션에 액세스하려면 https://testlinuxcluster.westus.cloudapp.azure.com:8080 에 입력

    투표 앱 Java Azure

  7. 클러스터에서 애플리케이션을 제거하려면 스크립트 폴더에서 uninstall.sh 스크립트 실행

    ./uninstall.sh
    

다음 단계

이 자습서에서는 다음 작업 방법을 알아보았습니다.

  • Azure에서 보안 Linux 클러스터 만들기
  • ELK를 사용하여 모니터링하는 데 필요한 리소스 만들기

다음 자습서를 진행합니다.