빠른 시작: 엔터프라이즈 계획을 사용하여 Azure Spring Apps에 앱 빌드 및 배포

참고 항목

Azure Spring Apps는 Azure Spring Cloud 서비스의 새 이름입니다. 서비스에 새 이름이 지정되었지만, 자산을 업데이트하는 동안 스크린샷, 비디오, 다이어그램과 같은 일부 위치에서는 당분간 이전 이름이 표시됩니다.

이 문서의 적용 대상:❌ 기본/표준 ✔️ 엔터프라이즈

이 빠른 시작에서는 엔터프라이즈 계획을 사용하여 Azure Spring Apps에 애플리케이션을 빌드하고 배포하는 방법을 보여 줍니다.

필수 조건

  • 활성 구독이 있는 Azure 계정. 체험 계정을 만듭니다.
  • Azure Marketplace 엔터프라이즈 플랜요구 사항 섹션을 이해하고 이행합니다.
  • Azure CLI 버전 2.45.0 이상.
  • Git
  • Azure Spring Apps Enterprise 계획 확장입니다. 다음 명령을 사용하여 이전 버전을 제거하고 최신 엔터프라이즈 플랜 확장을 설치합니다. 이전에 spring-cloud 확장을 설치한 경우 구성 및 버전 불일치를 방지하기 위해 이 확장을 제거합니다.
    az extension add --upgrade --name spring
    az extension remove --name spring-cloud
    

샘플 앱 다운로드

다음 명령을 사용하여 샘플을 다운로드합니다.

git clone https://github.com/Azure-Samples/acme-fitness-store
cd acme-fitness-store

서비스 인스턴스 프로비저닝

다음 단계를 사용하여 Azure Spring Apps 서비스 인스턴스를 프로비전합니다.

  1. 다음 명령을 사용하여 Azure CLI에 로그인하고 활성 구독을 선택합니다.

    az login
    az account list --output table
    az account set --subscription <subscription-ID>
    
  2. 다음 명령을 사용하여 엔터프라이즈 계획에 대한 법적 사용 약관과 개인정보처리방침에 동의합니다. 이 단계는 구독을 사용하여 Azure Spring Apps의 엔터프라이즈 계획 인스턴스를 만든 적이 없는 경우에만 필요합니다.

    az provider register --namespace Microsoft.SaaS
    az term accept \
        --publisher vmware-inc \
        --product azure-spring-cloud-vmware-tanzu-2 \
        --plan asa-ent-hr-mtr
    
  3. 위치를 선택합니다. 이 위치는 Azure Spring Apps 엔터프라이즈 계획을 지원하는 위치여야 합니다. 자세한 내용은 Azure Spring Apps FAQ를 참조하세요.

  4. 다음 명령을 사용하여 리소스 이름을 저장할 변수를 만듭니다. 자리 표시자를 사용자의 값으로 바꿔야 합니다. Azure Spring Apps 서비스 인스턴스의 이름은 4자에서 32자 사이여야 하며 소문자, 숫자 및 하이픈만 포함할 수 있습니다. 서비스 이름의 첫 글자는 문자여야 하며 마지막 문자는 문자 또는 숫자여야 합니다.

    export LOCATION="<location>"
    export RESOURCE_GROUP="<resource-group-name>"
    export SERVICE_NAME="<Azure-Spring-Apps-service-instance-name>"
    export WORKSPACE_NAME="<workspace-name>"
    
  5. 다음 명령을 사용하여 리소스 그룹을 만듭니다.

    az group create \
        --name ${RESOURCE_GROUP} \
        --location ${LOCATION}
    

    리소스 그룹에 대한 자세한 내용은 Azure Resource Manager란?을 참조하세요.

  6. 다음 명령을 사용하여 Azure Spring Apps 서비스 인스턴스를 만듭니다.

    az spring create \
        --resource-group ${RESOURCE_GROUP} \
        --name ${SERVICE_NAME} \
        --sku enterprise \
        --enable-application-configuration-service \
        --enable-service-registry \
        --enable-gateway \
        --enable-api-portal
    
  7. 다음 명령을 사용하여 Azure Spring Apps 서비스에 사용할 Log Analytics 작업 영역을 만듭니다.

    az monitor log-analytics workspace create \
        --resource-group ${RESOURCE_GROUP} \
        --workspace-name ${WORKSPACE_NAME} \
        --location ${LOCATION}
    
  8. 다음 명령을 사용하여 Log Analytics 작업 영역 및 Azure Spring Apps 서비스 인스턴스에 대한 리소스 ID를 검색합니다.

    export LOG_ANALYTICS_RESOURCE_ID=$(az monitor log-analytics workspace show \
        --resource-group ${RESOURCE_GROUP} \
        --workspace-name ${WORKSPACE_NAME} \
        --query id \
        --output tsv)
    
    export AZURE_SPRING_APPS_RESOURCE_ID=$(az spring show \
        --resource-group ${RESOURCE_GROUP} \
        --name ${SERVICE_NAME} \
        --query id \
        --output tsv)
    
  9. 다음 명령을 사용하여 Azure Spring Apps 서비스에 대한 진단 설정을 구성합니다.

    az monitor diagnostic-settings create \
        --name "send-logs-and-metrics-to-log-analytics" \
        --resource ${AZURE_SPRING_APPS_RESOURCE_ID} \
        --workspace ${LOG_ANALYTICS_RESOURCE_ID} \
        --logs '[
             {
               "category": "ApplicationConsole",
               "enabled": true,
               "retentionPolicy": {
                 "enabled": false,
                 "days": 0
               }
             },
             {
                "category": "SystemLogs",
                "enabled": true,
                "retentionPolicy": {
                  "enabled": false,
                  "days": 0
                }
              },
             {
                "category": "IngressLogs",
                "enabled": true,
                "retentionPolicy": {
                  "enabled": false,
                  "days": 0
                 }
               }
           ]' \
           --metrics '[
             {
               "category": "AllMetrics",
               "enabled": true,
               "retentionPolicy": {
                 "enabled": false,
                 "days": 0
               }
             }
           ]'
    
  10. 다음 명령을 사용하여 cart-service, order-service, payment-service, catalog-servicefrontend에 대한 애플리케이션을 만듭니다.

    az spring app create \
        --resource-group ${RESOURCE_GROUP} \
        --name cart-service \
        --service ${SERVICE_NAME}
    
    az spring app create \
        --resource-group ${RESOURCE_GROUP} \
        --name order-service \
        --service ${SERVICE_NAME}
    
    az spring app create \
        --resource-group ${RESOURCE_GROUP} \
        --name payment-service \
        --service ${SERVICE_NAME}
    
    az spring app create \
        --resource-group ${RESOURCE_GROUP} \
        --name catalog-service \
        --service ${SERVICE_NAME}
    
    az spring app create \
        --resource-group ${RESOURCE_GROUP} \
        --name frontend \
        --service ${SERVICE_NAME}
    

Application Configuration Service를 사용하여 구성 외부화

다음 단계를 사용하여 Application Configuration Service를 구성합니다.

  1. 다음 명령을 사용하여 Application Configuration Service에 대한 구성 리포지토리를 만듭니다.

    az spring application-configuration-service git repo add \
        --resource-group ${RESOURCE_GROUP} \
        --name acme-fitness-store-config \
        --service ${SERVICE_NAME} \
        --label main \
        --patterns "catalog/default,catalog/key-vault,identity/default,identity/key-vault,payment/default" \
        --uri "https://github.com/Azure-Samples/acme-fitness-store-config"
    
  2. 다음 명령을 사용하여 애플리케이션을 Application Configuration Service에 바인딩합니다.

    az spring application-configuration-service bind \
        --resource-group ${RESOURCE_GROUP} \
        --app payment-service \
        --service ${SERVICE_NAME}
    
    az spring application-configuration-service bind \
        --resource-group ${RESOURCE_GROUP} \
        --app catalog-service \
        --service ${SERVICE_NAME}
    

서비스 등록 및 검색 활성화

서비스 등록 및 검색을 활성화하려면 다음 명령을 사용하여 애플리케이션을 Service Registry에 바인딩합니다.

az spring service-registry bind \
    --resource-group ${RESOURCE_GROUP} \
    --app payment-service \
    --service ${SERVICE_NAME}

az spring service-registry bind \
    --resource-group ${RESOURCE_GROUP} \
    --app catalog-service \
    --service ${SERVICE_NAME}

Tanzu Build Service를 사용하여 Polyglot 애플리케이션 배포

다음 단계를 사용하여 애플리케이션을 배포하고 빌드합니다. 이러한 단계에서는 명령을 실행하기 전에 터미널이 프로젝트 폴더에 있는지 확인합니다.

  1. 다음 명령을 사용하여 Tanzu Build Service에서 사용자 지정 작성기를 만듭니다.

    az spring build-service builder create \
        --resource-group ${RESOURCE_GROUP} \
        --name quickstart-builder \
        --service ${SERVICE_NAME} \
        --builder-file azure-spring-apps-enterprise/resources/json/tbs/builder.json
    
  2. 다음 명령을 사용하여 결제 서비스를 빌드하고 배포합니다.

    az spring app deploy \
        --resource-group ${RESOURCE_GROUP} \
        --name payment-service \
        --service ${SERVICE_NAME} \
        --config-file-pattern payment/default \
        --source-path apps/acme-payment \
        --build-env BP_JVM_VERSION=17
    
  3. 다음 명령을 사용하여 카탈로그 서비스를 빌드하고 배포합니다.

    az spring app deploy \
        --resource-group ${RESOURCE_GROUP} \
        --name catalog-service \
        --service ${SERVICE_NAME} \
        --config-file-pattern catalog/default \
        --source-path apps/acme-catalog \
        --build-env BP_JVM_VERSION=17
    
  4. 다음 명령을 사용하여 주문 서비스를 빌드하고 배포합니다.

    az spring app deploy \
        --resource-group ${RESOURCE_GROUP} \
        --name order-service \
        --service ${SERVICE_NAME} \
        --builder quickstart-builder \
        --source-path apps/acme-order
    
  5. 다음 명령을 사용하여 카트 서비스를 빌드하고 배포합니다.

    az spring app deploy \
        --resource-group ${RESOURCE_GROUP} \
        --name cart-service \
        --service ${SERVICE_NAME} \
        --builder quickstart-builder \
        --env "CART_PORT=8080" \
        --source-path apps/acme-cart
    
  6. 다음 명령을 사용하여 프런트 엔드 애플리케이션을 빌드하고 배포합니다.

    az spring app deploy \
        --resource-group ${RESOURCE_GROUP} \
        --name frontend \
        --service ${SERVICE_NAME} \
        --source-path apps/acme-shopping
    

배포 문제를 해결하려면 az spring app logs --name <app name> --follow 명령을 사용하여 앱이 실행될 때마다 로그 스트리밍을 실시간으로 가져올 수 있습니다.

Spring Cloud Gateway를 사용하여 앱으로 요청 라우팅

다음 단계를 사용하여 Spring Cloud Gateway를 구성하고 애플리케이션에 대한 경로를 구성합니다.

  1. 다음 명령을 사용하여 엔드포인트를 Spring Cloud Gateway에 할당합니다.

    az spring gateway update \
        --resource-group ${RESOURCE_GROUP} \
        --service ${SERVICE_NAME} \
        --assign-endpoint true
    
  2. 다음 명령을 사용하여 Spring Cloud Gateway API 정보를 구성합니다.

    export GATEWAY_URL=$(az spring gateway show \
        --resource-group ${RESOURCE_GROUP} \
        --service ${SERVICE_NAME} \
        --query properties.url \
        --output tsv)
    
    az spring gateway update \
        --resource-group ${RESOURCE_GROUP} \
        --service ${SERVICE_NAME} \
        --api-description "Fitness Store API" \
        --api-title "Fitness Store" \
        --api-version "v1.0" \
        --server-url "https://${GATEWAY_URL}" \
        --allowed-origins "*"
    
  3. 다음 명령을 사용하여 카트 서비스에 대한 경로를 만듭니다.

    az spring gateway route-config create \
        --resource-group ${RESOURCE_GROUP} \
        --name cart-routes \
        --service ${SERVICE_NAME} \
        --app-name cart-service \
        --routes-file azure-spring-apps-enterprise/resources/json/routes/cart-service.json
    
  4. 다음 명령을 사용하여 주문 서비스에 대한 경로를 만듭니다.

    az spring gateway route-config create \
        --resource-group ${RESOURCE_GROUP} \
        --name order-routes \
        --service ${SERVICE_NAME} \
        --app-name order-service \
        --routes-file azure-spring-apps-enterprise/resources/json/routes/order-service.json
    
  5. 다음 명령을 사용하여 카탈로그 서비스에 대한 경로를 만듭니다.

    az spring gateway route-config create \
        --resource-group ${RESOURCE_GROUP} \
        --name catalog-routes \
        --service ${SERVICE_NAME} \
        --app-name catalog-service \
        --routes-file azure-spring-apps-enterprise/resources/json/routes/catalog-service.json
    
  6. 다음 명령을 사용하여 프런트 엔드에 대한 경로를 만듭니다.

    az spring gateway route-config create \
        --resource-group ${RESOURCE_GROUP} \
        --name frontend-routes \
        --service ${SERVICE_NAME} \
        --app-name frontend \
        --routes-file azure-spring-apps-enterprise/resources/json/routes/frontend.json
    
  7. 다음 명령을 사용하여 Spring Cloud Gateway에 대한 URL을 검색합니다.

    export GATEWAY_URL=$(az spring gateway show \
        --resource-group ${RESOURCE_GROUP} \
        --service ${SERVICE_NAME} \
        --query properties.url \
        --output tsv)
    
    echo "https://${GATEWAY_URL}"
    

    브라우저에서 출력 URL을 열어 배포된 애플리케이션을 검색할 수 있습니다.

API Portal을 사용하여 API 찾아보기 및 사용해 보기

다음 단계를 사용하여 API Portal을 구성합니다.

  1. 다음 명령을 사용하여 엔드포인트를 API Portal에 할당합니다.

    az spring api-portal update \
        --resource-group ${RESOURCE_GROUP} \
        --service ${SERVICE_NAME} \
        --assign-endpoint true
    
  2. 다음 명령을 사용하여 API Portal에 대한 URL을 검색합니다.

    export PORTAL_URL=$(az spring api-portal show \
        --resource-group ${RESOURCE_GROUP} \
        --service ${SERVICE_NAME} \
        --query properties.url \
        --output tsv)
    
    echo "https://${PORTAL_URL}"
    

    브라우저에서 출력 URL을 열어 애플리케이션 API를 검색할 수 있습니다.


리소스 정리

후속 빠른 시작 및 자습서를 계속 사용하려는 경우 이러한 리소스를 그대로 유지할 수 있습니다. 더 이상 필요 없으면 리소스 그룹을 삭제합니다. 그러면 리소스 그룹의 리소스가 삭제됩니다. Azure CLI를 사용하여 리소스 그룹을 삭제하려면 다음 명령을 사용합니다.

echo "Enter the Resource Group name:" &&
read resourceGroupName &&
az group delete --name $resourceGroupName &&
echo "Press [ENTER] to continue ..."

다음 단계

이제 앱을 성공적으로 빌드하고 배포했으므로 다음과 같은 선택적 빠른 시작 중 하나로 계속 진행합니다.