PowerShell cmdlet을 사용하여 Batch 리소스 관리

Azure Batch PowerShell cmdlet을 사용하면 많은 일반적인 Batch 작업을 수행하고 스크립티할 수 있습니다. Batch 계정을 관리하고 풀, 작업(job), 태스크(task) 등의 Batch 리소스를 다루는 데 사용할 수 있는 cmdlet을 간단히 소개합니다.

Batch cmdlet 및 자세한 cmdlet 구문의 전체 목록은 Azure Batch cmdlet 참조를 참조하세요.

서비스 업데이트 및 향상된 기능을 활용하려면 Azure PowerShell 모듈을 자주 업데이트하는 것이 좋습니다.

사전 요구 사항

  • Azure PowerShell 모듈을 설치하고 구성합니다. 시험판 모듈과 같은 특정 Azure Batch 모듈을 설치하려면 PowerShell 갤러리 참조하세요.

  • Connect-AzAccount cmdlet을 실행하여 구독에 연결합니다(Azure Batch cmdlet은 Azure Resource Manager 모듈에 제공됨).

    Connect-AzAccount
    
  • Batch 공급자 네임스페이스에 등록합니다. 구독당 한 번만 이 작업을 수행해야 합니다.

    Register-AzResourceProvider -ProviderNamespace Microsoft.Batch
    

Batch 계정 및 키 관리

Batch 계정 만들기

New-AzBatchAccount 는 지정된 리소스 그룹에 Batch 계정을 만듭니다. 리소스 그룹이 아직 없는 경우 New-AzResourceGroup cmdlet을 실행하여 만듭니다. 위치 매개 변수에서 "미국 중부"와 같은 Azure 지역 중 하나를 지정합니다. 다음은 그 예입니다.

New-AzResourceGroup –Name MyBatchResourceGroup –Location "Central US"

그런 다음, 리소스 그룹에 Batch 계정을 만듭니다. < 계정 > 의 이름과 리소스 그룹의 위치 및 이름을 지정합니다. Batch 계정을 만드는 작업은 완료하는 데 다소 시간이 걸릴 수 있습니다. 다음은 그 예입니다.

New-AzBatchAccount –AccountName <account_name> –Location "Central US" –ResourceGroupName <res_group_name>

비고

Batch 계정 이름은 리소스 그룹의 Azure 지역에 고유해야 하며, 3자에서 24자 사이여야 하며 소문자와 숫자만 사용해야 합니다.

계정 액세스 키 가져오기

Get-AzBatchAccountKeys는 Azure Batch 계정과 연결된 액세스 키를 표시합니다. 예를 들어 다음을 실행하여 만든 계정의 기본 및 보조 키를 가져옵니다.

$Account = Get-AzBatchAccountKeys –AccountName <account_name>

$Account.PrimaryAccountKey

$Account.SecondaryAccountKey

새 액세스 키 생성

New-AzBatchAccountKey는 Azure Batch 계정에 대한 새 기본 또는 보조 계정 키를 생성합니다. 예를 들어 Batch 계정에 대한 새 기본 키를 생성하려면 다음을 입력합니다.

New-AzBatchAccountKey -AccountName <account_name> -KeyType Primary

비고

새 보조 키를 생성하려면 KeyType 매개 변수에 "보조"를 지정합니다. 기본 키와 보조 키를 별도로 다시 생성해야 합니다.

Batch 계정 삭제

Remove-AzBatchAccount 는 Batch 계정을 삭제합니다. 다음은 그 예입니다.

Remove-AzBatchAccount -AccountName <account_name>

메시지가 표시되면 계정을 제거할지 확인합니다. 계정 제거를 완료하는 데 다소 시간이 걸릴 수 있습니다.

BatchAccountContext 개체 만들기

공유 키 인증 또는 Microsoft Entra 인증을 사용하여 Batch 리소스를 관리하도록 인증할 수 있습니다. Batch PowerShell cmdlet을 사용하여 인증하려면 먼저 계정 자격 증명 또는 ID를 저장할 BatchAccountContext 개체를 만듭니다. BatchAccountContext 개체를 BatchContext 매개 변수를 사용하는 cmdlet에 전달합니다.

공유 키 인증

$context = Get-AzBatchAccountKeys -AccountName <account_name>

비고

기본적으로 계정의 기본 키는 인증에 사용되지만 BatchAccountContext 개체의 KeyInUse 속성을 $context.KeyInUse = "Secondary"변경하여 사용할 키를 명시적으로 선택할 수 있습니다.

"Microsoft Entra" 인증

$context = Get-AzBatchAccount -AccountName <account_name>

Batch 리소스 만들기 및 수정

New-AzBatchPool, New-AzBatchJob 및 New-AzBatchTask와 같은 cmdlet을 사용하여 Batch 계정으로 리소스를 만듭니다. 기존 리소스의 속성을 업데이트하는 해당 Get 및Set- cmdlet과 Batch 계정에서 리소스를 제거하는 Remove-cmdlet 이 있습니다.

BatchContext 개체를 전달하는 것 외에도 이러한 cmdlet을 많이 사용하는 경우 다음 예제와 같이 자세한 리소스 설정을 포함하는 개체를 만들거나 전달해야 합니다. 추가 예제는 각 cmdlet에 대한 자세한 도움말을 참조하세요.

Batch 풀 만들기

Batch 풀을 만들거나 업데이트할 때 구성을 지정합니다. 풀은 일반적으로 Virtual Machine 구성을 사용하여 구성되어야 하며, 이를 통해 지원되는 Linux 또는 Azure Virtual Machines Marketplace에 나열된 Windows VM 이미지 중 하나를 지정하거나 준비한 사용자 지정 이미지를 제공할 수 있습니다. Cloud Services 구성 풀은 Windows 컴퓨팅 노드만 제공하며 모든 Batch 기능을 지원하지는 않습니다.

New-AzBatchPool을 실행할 때 PSVirtualMachineConfiguration 또는 PSCloudServiceConfiguration 개체에 운영 체제 설정을 전달합니다. 예를 들어 다음 코드 조각은 가상 머신 구성에서 크기가 Standard_A1 컴퓨팅 노드이고 Ubuntu Server 20.04-LTS 이미지로 작성된 Batch 풀을 만듭니다. 여기서 VirtualMachineConfiguration 매개 변수는 $configuration 변수를 PSVirtualMachineConfiguration 개체로 지정합니다. BatchContext 매개 변수는 이전에 정의된 변수 $context BatchAccountContext 개체로 지정합니다.

$imageRef = New-Object -TypeName "Microsoft.Azure.Commands.Batch.Models.PSImageReference" -ArgumentList @("UbuntuServer","Canonical","20.04-LTS")

$configuration = New-Object -TypeName "Microsoft.Azure.Commands.Batch.Models.PSVirtualMachineConfiguration" -ArgumentList @($imageRef, "batch.node.ubuntu 20.04")

New-AzBatchPool -Id "mypspool" -VirtualMachineSize "Standard_a1" -VirtualMachineConfiguration $configuration -AutoScaleFormula '$TargetDedicated=4;' -BatchContext $context

새 풀에 있는 컴퓨팅 노드의 대상 수는 자동 크기 조정 수식에 의해 계산됩니다. 이 경우 수식은 단순히 $TargetDedicated=4이며 풀의 컴퓨팅 노드 수가 최대 4개임을 나타냅니다.

풀, 작업, 태스크 및 기타 세부 정보에 대한 쿼리

Get-AzBatchPool, Get-AzBatchJob 및 Get-AzBatchTask와 같은 cmdlet을 사용하여 Batch 계정으로 만든 엔터티를 쿼리합니다.

데이터 쿼리

예를 들어 Get-AzBatchPools를 사용하여 풀을 찾습니다. 기본적으로 이 쿼리는 $context BatchAccountContext 개체를 이미 저장한 것으로 가정하여 계정 아래의 모든 풀에 대해 쿼리합니다.

Get-AzBatchPool -BatchContext $context

OData 필터 사용

Filter 매개 변수를 사용하여 OData 필터를 제공하여 관심 있는 개체만 찾을 수 있습니다. 예를 들어 "myPool"로 시작하는 ID가 있는 모든 풀을 찾을 수 있습니다.

$filter = "startswith(id,'myPool')"

Get-AzBatchPool -Filter $filter -BatchContext $context

이 메서드는 로컬 파이프라인에서 "Where-Object"를 사용하는 것만큼 유연하지 않습니다. 그러나 쿼리는 서버 쪽에서 모든 필터링이 수행되어 인터넷 대역폭을 절약하도록 Batch 서비스로 직접 전송됩니다.

Id 매개 변수 사용

OData 필터의 대안은 ID 매개 변수를 사용하는 것입니다. ID가 "myPool"인 특정 풀을 쿼리하려면 다음을 수행합니다.

Get-AzBatchPool -Id "myPool" -BatchContext $context

Id 매개 변수는 전체 ID 검색만 지원합니다. 와일드카드 또는 OData 스타일 필터가 아닙니다.

MaxCount 매개 변수 사용

기본적으로 각 cmdlet은 최대 1000개의 개체를 반환합니다. 이 제한에 도달하면 필터를 구체화하여 더 적은 개체를 가져오거나 MaxCount 매개 변수를 사용하여 최대값을 명시적으로 설정합니다. 다음은 그 예입니다.

Get-AzBatchTask -MaxCount 2500 -BatchContext $context

상한을 제거하려면 MaxCount 를 0 이하로 설정합니다.

PowerShell 파이프라인 사용

Batch cmdlet은 PowerShell 파이프라인을 사용하여 cmdlet 간에 데이터를 보냅니다. 이는 매개 변수를 지정하는 것과 동일한 효과를 주지만 여러 엔터티를 더 쉽게 사용할 수 있습니다.

예를 들어 계정 아래의 모든 작업을 찾아 표시합니다.

Get-AzBatchJob -BatchContext $context | Get-AzBatchTask -BatchContext $context

풀의 모든 컴퓨팅 노드를 다시 시작(다시 부팅)합니다.

Get-AzBatchComputeNode -PoolId "myPool" -BatchContext $context | Restart-AzBatchComputeNode -BatchContext $context

애플리케이션 패키지 관리

애플리케이션 패키지는 풀의 컴퓨팅 노드에 애플리케이션을 배포하는 간소화된 방법을 제공합니다. Batch PowerShell cmdlet을 사용하면 Batch 계정에서 애플리케이션 패키지를 업로드 및 관리하고 패키지 버전을 컴퓨팅 노드에 배포할 수 있습니다.

Important

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

애플리케이션 만들기:

New-AzBatchApplication -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication"

애플리케이션 패키지를 추가합니다.

New-AzBatchApplicationPackage -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication" -ApplicationVersion "1.0" -Format zip -FilePath package001.zip

애플리케이션의 기본 버전을 설정합니다.

Set-AzBatchApplication -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication" -DefaultVersion "1.0"

애플리케이션의 패키지 나열

$application = Get-AzBatchApplication -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication"

$application.ApplicationPackages

애플리케이션 패키지 삭제

Remove-AzBatchApplicationPackage -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication" -ApplicationVersion "1.0"

애플리케이션 삭제

Remove-AzBatchApplication -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication"

비고

애플리케이션을 삭제하기 전에 애플리케이션의 모든 애플리케이션 패키지 버전을 삭제해야 합니다. 현재 애플리케이션 패키지가 있는 애플리케이션을 삭제하려고 하면 '충돌' 오류가 발생합니다.

애플리케이션 패키지 배포

풀을 만들 때 배포용 애플리케이션 패키지를 하나 이상 지정할 수 있습니다. 풀을 만들 때 패키지를 지정하면 노드가 풀을 조인할 때 각 노드에 배포됩니다. 노드를 다시 부팅하거나 이미지로 다시 설치할 때도 패키지가 배포됩니다.

풀을 만들 때 -ApplicationPackageReference 옵션을 지정하여, 노드가 풀에 조인할 때 애플리케이션 패키지가 해당 풀의 노드에 배포되도록 합니다. 먼저 PSApplicationPackageReference 개체를 만들고 풀의 컴퓨팅 노드에 배포하려는 애플리케이션 ID 및 패키지 버전으로 구성합니다.

$appPackageReference = New-Object Microsoft.Azure.Commands.Batch.Models.PSApplicationPackageReference

$appPackageReference.ApplicationId = "MyBatchApplication"

$appPackageReference.Version = "1.0"

이제 풀을 만들고 패키지 참조 개체를 옵션의 인수 ApplicationPackageReferences 로 지정합니다.

New-AzBatchPool -Id "PoolWithAppPackage" -VirtualMachineSize "Small" -VirtualMachineConfiguration $configuration -BatchContext $context -ApplicationPackageReferences $appPackageReference

Batch 애플리케이션 패키지를 사용하여 노드를 계산하는 애플리케이션 배포에서 애플리케이션 패키지에 대한 자세한 정보를 찾을 수 있습니다.

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

기존 풀에 할당된 애플리케이션을 업데이트하려면 먼저 원하는 속성(애플리케이션 ID 및 패키지 버전)을 사용하여 PSApplicationPackageReference 개체를 만듭니다.

$appPackageReference = New-Object Microsoft.Azure.Commands.Batch.Models.PSApplicationPackageReference

$appPackageReference.ApplicationId = "MyBatchApplication"

$appPackageReference.Version = "2.0"

다음으로 Batch에서 풀을 가져와서 기존 패키지를 지우고, 새 패키지 참조를 추가하고, 새 풀 설정으로 Batch 서비스를 업데이트합니다.

$pool = Get-AzBatchPool -BatchContext $context -Id "PoolWithAppPackage"

$pool.ApplicationPackageReferences.Clear()

$pool.ApplicationPackageReferences.Add($appPackageReference)

Set-AzBatchPool -BatchContext $context -Pool $pool

이제 Batch 서비스에서 풀의 속성을 업데이트했습니다. 그러나 실제로 풀의 컴퓨팅 노드에 새 애플리케이션 패키지를 배포하려면 해당 노드를 다시 시작하거나 이미지로 다시 설치해야 합니다. 다음 명령을 사용하여 풀의 모든 노드를 다시 시작할 수 있습니다.

Get-AzBatchComputeNode -PoolId "PoolWithAppPackage" -BatchContext $context | Restart-AzBatchComputeNode -BatchContext $context

Tip

풀의 컴퓨팅 노드에 여러 애플리케이션 패키지를 배포할 수 있습니다. 현재 배포된 패키지를 바꾸는 대신 애플리케이션 패키지를 추가하려면 위의 줄을 생략 $pool.ApplicationPackageReferences.Clear() 합니다.

다음 단계