애플리케이션을 배포하여 Batch 애플리케이션 패키지에서 노드 컴퓨팅

애플리케이션 패키지는 Azure Batch 솔루션의 코드를 단순화하고, 태스크에서 실행하는 애플리케이션을 더 쉽게 관리할 수 있습니다. 애플리케이션 패키지를 사용하여 지원 파일을 비롯하여 태스크에서 실행하는 여러 애플리케이션 버전을 업로드하고 관리할 수 있습니다. 풀의 컴퓨팅 노드에 이러한 애플리케이션을 하나 이상 자동으로 배포할 수 있습니다.

애플리케이션 패키지를 만들고 관리하는 API는 Batch Management .NET 라이브러리의 일부입니다. 컴퓨팅 노드에서 애플리케이션 패키지를 설치하는 API는 Batch .NET 라이브러리의 일부입니다. 비슷한 기능은 다른 프로그래밍 언어에 사용할 수 있는 Batch API에 있습니다.

이 문서에서는 Azure Portal을 사용하여 애플리케이션 패키지를 업로드하고 관리하는 방법을 설명합니다. 또한 Batch .NET 라이브러리를 사용하여 풀의 컴퓨팅 노드에 설치하는 방법을 보여 줍니다.

애플리케이션 패키지 요구 사항

애플리케이션 패키지를 사용하려면 Batch 계정에 Azure Storage 계정을 연결해야 합니다.

Batch 계정 내 애플리케이션 및 애플리케이션 패키지 수와 애플리케이션 패키지의 최대 크기에 대한 제한이 있습니다. 자세한 내용은 Batch 서비스 할당량 및 제한을 참조하세요.

참고 항목

2017년 7월 5일 이전에 만든 Batch 풀에서는 애플리케이션 패키지를 지원하지 않습니다(Cloud Services 구성을 사용하여 2016년 3월 10일 이후에 생성되지 않은 경우). 여기서 설명하는 애플리케이션 패키지 기능은 이전 버전의 서비스에서 사용할 수 있는 Batch 앱 기능을 대체합니다.

애플리케이션 및 애플리케이션 패키지 이해

Azure Batch 내에서 애플리케이션은 풀의 컴퓨팅 노드에 자동으로 다운로드할 수 있는 버전이 지정된 이진 파일의 세트를 나타냅니다. 애플리케이션에는 서로 다른 애플리케이션 버전을 나타내는 하나 이상의 ‘애플리케이션 패키지’가 포함되어 있습니다.

각 ‘애플리케이션 패키지’는 애플리케이션 이진 파일 및 지원 파일을 포함하는 .zip 파일입니다. .zip 형식만 지원됩니다.

Diagram that shows a high-level view of applications and application packages.

풀 또는 태스크 수준에서 애플리케이션 패키지를 지정할 수 있습니다.

  • 풀 애플리케이션 패키지는 풀의 모든 노드에 배포됩니다. 애플리케이션은 노드가 풀에 조인하고 재부팅되거나 이미지로 다시 설치될 때 배포됩니다.

    풀 애플리케이션 패키지는 풀에 있는 모든 노드가 작업의 태스크를 실행할 때 적합합니다. 풀을 만들 때 배포할 애플리케이션 패키지를 하나 이상 지정할 수 있습니다. 기존 풀에 패키지를 새로 추가하거나 기존 풀의 패키지를 업데이트할 수도 있습니다. 기존 풀에 새 패키지를 설치하려면 해당 노드를 다시 시작해야 합니다.

  • 태스크 애플리케이션 패키지는 태스크의 명령줄을 실행하기 바로 전에 태스크를 실행하도록 예약된 컴퓨팅 노드에만 배포됩니다. 지정된 애플리케이션 패키지와 버전이 이미 노드에 있는 경우 다시 배포되지 않으며 기존 패키지가 사용됩니다.

    태스크 애플리케이션 패키지는 공유 풀 환경에서 유용하며 여기서는 다른 작업이 하나의 풀에서 실행되고 작업이 완료될 때 풀이 삭제되지 않습니다. 작업에 있는 태스크가 풀에 있는 노드보다 적은 경우 태스크를 실행하는 노드에만 애플리케이션을 배포하므로 태스크 애플리케이션 패키지는 데이터 전송을 최소화할 수 있습니다.

    태스크 애플리케이션 패키지를 활용할 수 있는 다른 시나리오는 대규모 애플리케이션을 실행하지만 태스크 수가 적은 작업입니다. 예를 들어 태스크 애플리케이션은 전처리가 많은 단계나 병합 태스크에 유용할 수 있습니다.

애플리케이션 패키지를 사용하면 풀의 시작 태스크가 노드에 설치할 개별 리소스 파일의 긴 목록을 지정할 필요가 없습니다. Azure Storage 또는 노드에서 애플리케이션 파일의 여러 버전을 수동으로 관리할 필요가 없습니다. Azure Storage 계정의 파일에 대한 액세스 권한을 제공하기 위해 SAS URL을 생성할 필요가 없습니다. Batch는 Azure Storage와 함께 백그라운드에서 작동하여 애플리케이션 패키지를 저장하고 컴퓨팅 노드에 배포합니다.

참고 항목

시작 작업의 총 크기는 리소스 파일과 환경 변수를 포함하야 32,768자 이하여야 합니다. 시작 태스크가 이 제한을 초과하는 경우 애플리케이션 패키지 사용은 또 다른 옵션입니다. 리소스 파일을 포함하는 .zip 파일을 만들고 파일을 Blob으로 Azure Storage에 업로드한 다음, 시작 작업의 명령줄에서 압축을 풀 수도 있습니다.

애플리케이션 업로드 및 관리

Azure Portal 또는 Batch Management API를 사용하여 Batch 계정에서 애플리케이션 패키지를 관리합니다. 다음 섹션에서는 스토리지 계정을 연결하는 방법을 설명하고 Azure Portal에서 애플리케이션과 애플리케이션 패키지를 추가하고 관리하는 방법을 알아봅니다.

참고 항목

ARM 템플릿의Microsoft.Batch/batchAccounts 리소스에서 애플리케이션 값을 정의할 수 있지만, 현재는 ARM 템플릿을 사용하여 배치 계정에서 사용할 애플리케이션 패키지를 업로드할 수 없습니다. 새 애플리케이션 추가의 설명대로 연결된 스토리지 계정에 업로드해야 합니다.

애플리케이션 패키지를 사용하려면 Azure Storage 계정을 배치 계정에 연결해야 합니다. Batch 서비스는 연결된 스토리지 계정을 사용하여 애플리케이션 패키지를 저장합니다. 이상적으로는 특별히 배치 계정과 함께 사용할 스토리지 계정을 만들어야 합니다.

아직 스토리지 계정을 구성하지 않은 경우 배치 계정의 왼쪽 탐색 메뉴에서 애플리케이션을 처음 선택하면 Azure Portal에 경고가 표시됩니다. 스토리지 계정을 배치 계정에 연결해야 하면 다음을 수행합니다.

  1. "이 배치 계정에 구성된 Storage 계정이 없습니다."라는 경고 창을 선택합니다.
  2. 그런 다음, 다음 페이지에서 스토리지 계정 집합...을 선택합니다.
  3. 스토리지 계정 정보 섹션에서 스토리지 계정 선택 링크를 선택합니다.
  4. 스토리지 계정 선택 창의 목록에서 이 배치 계정과 함께 사용할 스토리지 계정을 선택합니다.
  5. 그런 다음, 페이지 왼쪽 위 모서리에 있는 저장을 선택합니다.

계정 두 개를 연결하면 Batch에서 연결된 Storage 계정에 저장된 패키지를 컴퓨팅 노드에 자동으로 배포할 수 있습니다.

Important

방화벽 규칙을 통해 구성된 Azure Storage 계정을 사용하거나 계층 구조 네임스페이스사용으로 설정하여 애플리케이션 패키지를 사용할 수 없습니다.

Batch 서비스는 Azure Storage를 사용하여 애플리케이션 패키지를 블록 Blob으로 저장합니다. 블록 Blob 데이터에는 정상적으로 요금이 청구되며 각 패킷의 크기는 최대 블록 Blob 크기를 초과할 수 없습니다. 자세한 내용은 Azure 스토리지의 확장성 및 성능 목표를 참조하세요. 비용을 최소화할 수 있도록 애플리케이션 패키지의 크기와 숫자에 신경 쓰고, 사용하지 않는 패키지를 주기적으로 제거해 주세요.

새 애플리케이션 추가

새 애플리케이션을 만들려면 애플리케이션 패키지를 추가하고 고유한 애플리케이션 ID를 지정합니다.

배치 계정의 왼쪽 탐색 메뉴에서 애플리케이션을 선택한 다음, 추가를 선택합니다.

Screenshot of the New application creation process in the Azure portal.

다음 정보를 입력합니다.

  • 애플리케이션 ID: 새 애플리케이션의 ID입니다.
  • 버전”: 업로드하는 애플리케이션 패키지의 버전입니다.
  • 애플리케이션 패키지: 애플리케이션을 실행하는 데 필요한 애플리케이션 이진 파일과 지원 파일이 포함된 .zip 파일입니다.

입력한 애플리케이션 ID버전은 다음 요구 사항을 따라야 합니다.

  • Windows 노드에서 ID에는 영숫자, 하이픈 및 밑줄의 모든 조합을 사용할 수 있습니다. Linux 노드에서는 영숫자와 밑줄만 허용됩니다.
  • 64자를 초과할 수 없습니다.
  • Batch 계정 내에서 고유해야 합니다.
  • ID는 대/소문자를 유지하고 대/소문자를 구분하지 않습니다.

준비가 되면 제출을 선택합니다. .zip 파일이 Azure Storage 계정에 업로드된 후 포털에 알림이 표시됩니다. 업로드하는 파일의 크기와 네트워크 연결 속도에 따라 이 프로세스에 다소 시간이 걸릴 수 있습니다.

현재 애플리케이션 보기

배치 계정에 있는 애플리케이션을 보려면 왼쪽 탐색 메뉴에서 애플리케이션을 선택합니다.

Screenshot of the Applications menu item in the Azure portal.

이 메뉴 옵션을 선택하면 애플리케이션 창이 열립니다. 이 창은 계정의 각 애플리케이션 ID 및 다음 속성을 표시합니다.

  • 패키지: 이 애플리케이션과 연결된 버전 번호입니다.
  • 기본 버전: 해당하는 경우 애플리케이션을 배포할 때 버전이 지정되지 않은 경우에 설치되는 애플리케이션 버전입니다.
  • 업데이트 허용: 패키지 업데이트 및 삭제 허용 여부를 지정합니다.

컴퓨팅 노드에 애플리케이션 패키지의 파일 구조를 표시하려면 Azure Portal에서 배치 계정으로 이동합니다. 을 선택합니다. 그런 다음, 컴퓨팅 노드가 포함된 풀을 선택합니다. 애플리케이션 패키지가 설치된 컴퓨팅 노드를 선택하고 애플리케이션 폴더를 엽니다.

애플리케이션 세부 정보 보기

애플리케이션에 대한 세부 정보를 확인하려면 애플리케이션 창에서 해당 애플리케이션을 선택합니다. 왼쪽 탐색 메뉴에서 설정을 선택하여 애플리케이션을 구성할 수 있습니다.

  • 업데이트 허용: 애플리케이션 패키지를 업데이트 또는 삭제할 수 있는지를 지정합니다. 기본값은 입니다. 아니요로 설정하면 기존 애플리케이션 패키지를 업데이트하거나 삭제할 수 없지만 새 애플리케이션 패키지 버전을 계속 추가할 수 있습니다.
  • 기본 버전: 지정된 버전이 없는 경우 애플리케이션이 배포될 때 사용할 기본 애플리케이션 패키지입니다.
  • 표시 이름: Batch 솔루션이 애플리케이션에 대한 정보를 표시할 때 사용할 수 있는 식별 이름입니다. 예를 들어 이 이름은 Batch를 통해 고객에게 제공하는 서비스의 UI에 사용할 수 있습니다.

새 애플리케이션 패키지 추가

기존 애플리케이션에 애플리케이션 패키지 버전을 추가하려면 배치 계정의 애플리케이션 페이지에서 애플리케이션을 선택합니다. 그런 다음, 추가를 선택합니다.

새 애플리케이션의 경우와 마찬가지로 새 패키지의 버전을 지정하고, 애플리케이션 패키지 필드에 .zip 파일을 업로드한 다음, 제출을 선택합니다.

애플리케이션 패키지 업데이트 또는 삭제

기존 애플리케이션 패키지를 업데이트하거나 삭제하려면 배치 계정의 애플리케이션 페이지에서 애플리케이션을 선택합니다. 수정할 애플리케이션 패키지 행의 줄임표를 선택합니다. 그런 다음, 수행할 작업을 선택합니다.

Screenshot that shows the update and delete options for application packages in the Azure portal.

업데이트를 선택하면 새 .zip 파일을 업로드할 수 있습니다. 이 파일은 해당 버전에 대해 업로드한 이전 .zip 파일을 대체합니다.

삭제를 선택하면 해당 버전 삭제를 확인하는 메시지가 표시됩니다. 확인을 선택하면 Batch는 Azure Storage 계정에서 .zip 파일을 삭제합니다. 애플리케이션의 기본 버전을 삭제하면 해당 애플리케이션의 기본 버전 설정이 제거됩니다.

컴퓨팅 노드에 애플리케이션 설치

Azure Portal에서 애플리케이션 패키지를 관리하는 방법을 알아보았습니다. 이제 컴퓨팅에 배포하고 Batch 작업을 사용하여 실행하는 방법을 알아볼 수 있습니다.

풀 애플리케이션 패키지 설치

풀의 모든 컴퓨팅 노드에 애플리케이션 패키지를 설치하려면 풀의 애플리케이션 패키지 참조를 하나 이상 지정합니다. 풀에 지정하는 애플리케이션 패키지는 풀에 조인하는 각 컴퓨팅 노드와 재부팅되거나 이미지로 다시 설치되는 노드에 설치됩니다.

Batch .NET에서 새 풀을 만들거나 기존 풀을 사용할 때 CloudPool.ApplicationPackageReferences를 하나 이상 지정합니다. ApplicationPackageReference 클래스는 풀의 컴퓨팅 노드에 설치할 애플리케이션 ID 및 버전을 지정합니다.

// Create the unbound CloudPool
CloudPool myCloudPool =
    batchClient.PoolOperations.CreatePool(
        poolId: "myPool",
        targetDedicatedComputeNodes: 1,
        virtualMachineSize: "standard_d1_v2",
        VirtualMachineConfiguration: new VirtualMachineConfiguration(
            imageReference: new ImageReference(
                                publisher: "MicrosoftWindowsServer",
                                offer: "WindowsServer",
                                sku: "2019-datacenter-core",
                                version: "latest"),
            nodeAgentSkuId: "batch.node.windows amd64");

// Specify the application and version to install on the compute nodes
myCloudPool.ApplicationPackageReferences = new List<ApplicationPackageReference>
{
    new ApplicationPackageReference {
        ApplicationId = "litware",
        Version = "1.1001.2b" }
};

// Commit the pool so that it's created in the Batch service. As the nodes join
// the pool, the specified application package is installed on each.
await myCloudPool.CommitAsync();

Important

애플리케이션 패키지 배포가 실패하면 Batch 서비스에서 노드가 사용할 수 없음으로 표시되고 해당 노드에서 실행되도록 예약된 작업이 없습니다. 이 경우에 노드를 다시 시작하여 패키지 배포를 다시 시작해야 합니다. 또한 노드를 다시 시작하면 노드에서 작업을 다시 예약할 수 있습니다.

태스크 애플리케이션 패키지 설치

풀과 마찬가지로 작업에 애플리케이션 패키지 참조를 지정합니다. 작업이 노드에서 실행되도록 예약된 경우 작업 명령줄이 실행되기 직전에 패키지가 다운로드되고 압축이 풀립니다. 지정된 패키지와 버전이 이미 노드에 설치되어 있으면 패키지는 다운로드되지 않으며 기존 패키지가 사용됩니다.

태스크 애플리케이션 패키지를 설치하려면 태스크의 CloudTask.ApplicationPackageReferences 속성을 구성합니다.

CloudTask task =
    new CloudTask(
        "litwaretask001",
        "cmd /c %AZ_BATCH_APP_PACKAGE_LITWARE%\\litware.exe -args -here");

task.ApplicationPackageReferences = new List<ApplicationPackageReference>
{
    new ApplicationPackageReference
    {
        ApplicationId = "litware",
        Version = "1.1001.2b"
    }
};

설치된 애플리케이션 실행

풀이나 작업에 지정한 패키지가 노드의 AZ_BATCH_ROOT_DIR 내에 있는 명명된 디렉터리에 다운로드되고 압축이 풀립니다. 또한 Batch는 명명된 디렉터리에 대한 경로가 포함된 환경 변수를 생성합니다. 태스크 명령줄은 노드에서 애플리케이션을 참조할 때 이 환경 변수를 사용합니다.

Windows 노드에서는 변수가 다음과 같은 형식입니다.

Windows:
AZ_BATCH_APP_PACKAGE_APPLICATIONID#version

Linux 노드에서는 형식이 약간 다릅니다. 마침표(.), 하이픈(-) 및 숫자 기호(#)가 환경 변수에서 밑줄로 표시됩니다. 또한 애플리케이션 ID의 대/소문자는 보존됩니다. 예시:

Linux:
AZ_BATCH_APP_PACKAGE_applicationid_version

APPLICATIONIDversion은 배포를 위해 지정한 애플리케이션 및 패키지 버전에 해당하는 값입니다. 예를 들어 blender 애플리케이션 2.7 버전이 Windows 노드에 설치되도록 지정하면 작업 명령줄은 다음 환경 변수를 사용하여 해당 파일에 액세스합니다.

Windows:
AZ_BATCH_APP_PACKAGE_BLENDER#2.7

Linux 노드에서는 환경 변수를 다음 형식으로 지정합니다. 마침표(.), 하이픈(-) 및 숫자 기호(#)를 밑줄로 평면화하고 애플리케이션 ID의 대/소문자를 유지합니다.

Linux:
AZ_BATCH_APP_PACKAGE_blender_2_7

애플리케이션 패키지를 업로드할 때 컴퓨팅 노드에 배포할 기본 버전을 지정할 수 있습니다. 애플리케이션 기본 버전을 지정하면 애플리케이션을 참조할 때 버전 접미사를 생략할 수 있습니다. 애플리케이션 업로드 및 관리에서 표시된 것처럼 Azure Portal의 애플리케이션 창에서 기본 애플리케이션 버전을 지정할 수 있습니다.

예를 들어 blender 애플리케이션 기본 버전으로 "2.7"을 설정하고 태스크에서 다음 환경 변수를 참조하는 경우 Windows 노드에서 버전 2.7을 사용합니다.

AZ_BATCH_APP_PACKAGE_BLENDER

다음 코드 조각은 기본 버전의 blender 애플리케이션을 실행하는 태스크 명령줄의 예를 보여 줍니다.

string taskId = "blendertask01";
string commandLine =
    @"cmd /c %AZ_BATCH_APP_PACKAGE_BLENDER%\blender.exe -args -here";
CloudTask blenderTask = new CloudTask(taskId, commandLine);

컴퓨팅 노드 환경 설정에 대한 자세한 내용은 태스크에 대한 환경 설정을 참조하세요.

풀의 애플리케이션 패키지 업데이트

기존 풀이 이미 애플리케이션 패키지를 통해 구성된 경우 해당 풀에 대해 새 패키지를 지정할 수 있습니다. 이것은 다음을 의미합니다.

  • Batch 서비스는 풀에 조인하는 모든 새 노드와 다시 부팅되거나 이미지로 다시 설치되는 기존 노드에 새로 지정된 패키지를 설치합니다.
  • 패키지 참조를 업데이트할 때 이미 풀에 있는 컴퓨팅 노드는 자동으로 새 애플리케이션 패키지를 설치하지 않습니다. 이러한 컴퓨팅 노드를 재부팅하거나 이미지로 다시 설치하여 새 패키지를 받아야 합니다.
  • 새 패키지가 배포될 때 만들어진 환경 변수는 새 애플리케이션 패키지 참조를 반영합니다.

이 예제에서는 기존 풀의 blender 애플리케이션 2.7 버전이 CloudPool.ApplicationPackageReferences 중 하나로 구성되었습니다. 풀의 노드를 2.76b 버전으로 업데이트하려면 새 버전을 사용하여 ApplicationPackageReference를 지정하고 변경 내용을 커밋합니다.

string newVersion = "2.76b";
CloudPool boundPool = await batchClient.PoolOperations.GetPoolAsync("myPool");
boundPool.ApplicationPackageReferences = new List<ApplicationPackageReference>
{
    new ApplicationPackageReference {
        ApplicationId = "blender",
        Version = newVersion }
};
await boundPool.CommitAsync();

새 버전이 구성되었으므로 Batch 서비스는 풀에 조인하는 모든 새 노드에 2.76b 버전을 설치합니다. 이미 풀에 있는 노드에 2.76b 버전을 설치하려면 노드를 재부팅하거나 이미지로 다시 설치합니다. 다시 부팅된 노드는 이전 패키지 배포의 파일을 보존합니다.

Batch 계정의 애플리케이션 나열

ApplicationOperations.ListApplicationSummaries 메서드를 사용하여 배치 계정의 애플리케이션 및 애플리케이션 패키지를 나열할 수 있습니다.

// List the applications and their application packages in the Batch account.
List<ApplicationSummary> applications = await batchClient.ApplicationOperations.ListApplicationSummaries().ToListAsync();
foreach (ApplicationSummary app in applications)
{
    Console.WriteLine("ID: {0} | Display Name: {1}", app.Id, app.DisplayName);

    foreach (string version in app.Versions)
    {
        Console.WriteLine("  {0}", version);
    }
}

다음 단계