다음을 통해 공유


PowerShell에서 Azure Queue Storage를 사용하는 방법

Azure Queue Storage는 HTTP 또는 HTTPS를 통해 전 세계 어디에서나 액세스할 수 있는 다수의 메시지를 저장하기 위한 서비스입니다. 자세한 내용은 Azure Queue Storage 소개를 참조하세요. 이 방법 문서에서는 일반 Queue Storage 작업을 설명합니다. 다음 방법에 대해 설명합니다.

  • 큐 만들기
  • 큐 검색
  • 메시지 추가
  • 메시지 검색
  • 메시지 삭제
  • 큐 삭제

이 방법 가이드에는 Azure PowerShell(Az) 모듈 v12.0.0이 필요합니다. Get-Module -ListAvailable Az를 실행하여 현재 설치된 버전을 찾습니다. 업그레이드해야 하는 경우 Azure PowerShell 모듈 설치를 참조하세요.

큐에 대한 데이터 평면의 PowerShell cmdlet는 없습니다. 메시지 추가, 메시지 읽기, 메시지 삭제 등과 같은 데이터 평면 작업을 수행하려면 PowerShell에서 노출되는 .NET 스토리지 클라이언트 라이브러리를 사용해야 합니다. 메시지 개체를 만든 다음, AddMessage와 같은 명령을 사용하여 해당 메시지에 대한 작업을 수행할 수 있습니다. 이 문서에서 이 작업을 수행하는 방법을 보여 줍니다.

참고 항목

Azure Az PowerShell 모듈을 사용하여 Azure와 상호 작용하는 것이 좋습니다. 시작하려면 Azure PowerShell 설치를 참조하세요. Az PowerShell 모듈로 마이그레이션하는 방법에 대한 자세한 내용은 Azure PowerShell을 AzureRM에서 Azure로 마이그레이션을 참조하세요.

Azure에 로그인

Connect-AzAccount 명령을 사용하여 Azure 구독에 로그인하고 화면의 지시를 따릅니다. 필요한 경우 TenantIdSubscription 매개 변수를 추가하고 해당 값을 포함하여 구독을 지정할 수 있습니다.

Connect-AzAccount

위치 목록 검색

어떤 위치를 사용하고 싶은지 모르는 경우 제공된 예에 표시된 대로 Get-AzLocation cmdlet을 사용하여 사용 가능한 위치를 나열할 수 있습니다. 목록이 표시된 후 위치를 선택하고 나중에 사용할 수 있도록 location 변수에 저장합니다. 이 연습의 예에서는 eastus 위치를 사용합니다.

Get-AzLocation | Select-Object Location
$location = "eastus"

리소스 그룹 만들기

Azure 리소스 그룹은 Azure 리소스가 배포 및 관리되는 논리적 컨테이너입니다. 리소스 그룹의 이름을 선택하고 나중에 사용할 수 있도록 resourceGroup 변수에 저장합니다. 이 예제에서는 howtoqueuesrg이름을 사용합니다.

표시된 대로 New-AzResourceGroup cmdlet을 호출하고 이름과 위치를 ResourceGroupName 매개 변수에 제공하여 리소스 그룹을 만듭니다.

$resourceGroup = "howtoqueuesrg"
New-AzResourceGroup -ResourceGroupName $resourceGroup -Location $location

저장소 계정 만들기

Azure Storage 계정은 Blob, 파일, 큐 및 테이블과 같은 모든 데이터 개체를 포함하는 고유하게 명명된 리소스입니다.

스토리지 계정의 이름을 선택하고 나중에 사용할 수 있도록 storageAccountName 변수에 저장합니다. 이 예제에서는 howtoqueuestorage이름을 사용합니다.

다음으로, New-AzStorageAccount cmdlet을 사용하여 LRS(로컬 중복 스토리지)가 포함된 표준 범용 스토리지 계정을 만듭니다. 마지막으로 스토리지 계정을 정의하는 스토리지 계정 컨텍스트를 설정하여 ctx 변수에 저장합니다. 변수를 사용하여 컨텍스트를 참조하면 자격 증명을 반복적으로 제공하지 않고도 스토리지 계정에 대해 작업을 수행할 수 있습니다.

$storageAccountName = "howtoqueuestorage"

$storageAccount = New-AzStorageAccount -ResourceGroupName $resourceGroup `
  -Name $storageAccountName `
  -Location $location `
  -SkuName Standard_LRS

$ctx = $storageAccount.Context

큐 만들기

먼저 스토리지 계정의 이름을 선택하고 이를 queueName 변수에 저장합니다. 이 예제에서는 howtoqueuestorage이름을 사용합니다. 다음으로, 표시된 대로 New-AzStorageQueue cmdlet을 사용하고 queueNamectx 변수를 NameContext 매개 변수에 전달하여 큐를 만듭니다.

$queueName = "howtoqueue"
$queue = New-AzStorageQueue -Name $queueName -Context $ctx

Azure Queue Storage에 대한 명명 규칙에 대한 자세한 내용은 큐 및 메타데이터 이름 지정을 참조하세요.

큐 검색

Get-AzStorageQueue cmdlet을 사용하여 특정 큐 또는 스토리지 계정 내의 모든 큐 목록을 검색할 수 있습니다. 다음 예에서는 Get-AzStorageQueue cmdlet을 사용하여 모든 큐를 검색하는 방법과 Name 매개 변수를 사용하여 큐를 지정하는 방법을 보여 줍니다.

# Retrieve all queues and show their names
Get-AzStorageQueue -Context $ctx | Select-Object Name

# Retrieve a specific queue
$queue = Get-AzStorageQueue -Name $queueName -Context $ctx

# Show the properties of the queue
$queue

큐에 메시지 추가

큐의 메시지에 영향을 미치는 작업은 PowerShell에 노출된 대로 .NET 스토리지 클라이언트 라이브러리를 사용합니다. 큐에 메시지를 추가하려면 메시지를 문자열로 QueueClient 클래스의 SendMessage 메서드에 전달합니다.

메시지 문자열은 UTF-8 형식이어야 합니다.

다음 예에서는 큐에 메시지를 추가하는 방법을 보여 줍니다.

# Create a new message using a constructor of the CloudQueueMessage class
$queueMessage = "This is message 1"

# Add a new message to the queue
$queue.QueueClient.AddMessageAsync($queueMessage)

# Add two more messages to the queue
$queueMessages = @("This is message 2","This is message 3")
$queueMessages | foreach {$queue.QueueClient.AddMessageAsync($_)}

Azure Storage Explorer를 사용하는 경우 Azure 계정에 연결하여 스토리지 계정에서 큐를 확인하고, 큐에서 메시지를 보도록 하나로 드릴다운할 수 있습니다.

큐에서 메시지 검색

항상 보장되는 것은 아니지만 메시지는 최선의 시도, 선입선출 순서로 큐에서 검색됩니다.

사용 사례에 따라 큐에서 하나 이상의 메시지를 검색할 수 있습니다. 다른 프로세스가 동일한 메시지에 액세스하는 것을 허용하거나 금지하여 메시지의 표시 여부를 수정할 수도 있습니다.

큐에서 메시지를 검색하는 방법에는 두 가지가 있습니다.

  • Receive: Receive를 사용하여 메시지를 검색하면 메시지가 큐에서 제거되고 해당 메시지의 DequeueCount 속성이 증가합니다. 메시지가 삭제되지 않으면 다시 처리되기 위해 큐에 다시 삽입됩니다.
  • Peek: Peek를 사용하여 메시지를 검색하면 큐에서 메시지를 "미리 볼" 수 있습니다. Peek는 메시지를 큐에서 빼거나 해당 DequeueCount 속성을 증가시키지 않습니다.

메시지 받기

ReceiveMessage와 같은 메서드를 사용하여 큐에서 메시지를 읽으면 해당 메시지는 일시적으로 큐에서 제거되고 일시적으로 다른 프로세스에 표시되지 않게 됩니다. 이 공개 시간 제한은 메시지가 표시되지 않는 기간을 정의합니다. 기본 공개 제한 시간은 30초입니다.

제한 시간이 지나기 전에 메시지가 처리되지 않으면 해당 DequeueCount 속성이 증가하고 큐 끝에 다시 삽입됩니다. 동일한 메시지를 다시 삽입하면 다른 프로세스가 동일한 메시지를 검색하고 다시 시도할 수 있습니다.

다음 예에서는 visibleTimeout 변수를 10초로 설정한 다음 큐에서 두 개의 메시지를 읽습니다.

# Set the amount of time you want to entry to be invisible after read from the queue
# If it is not deleted by the end of this time, it will show up in the queue again
$visibilityTimeout = [System.TimeSpan]::FromSeconds(10)

# Read the message from the queue, then show the contents of the message. 
# Read the next message, too.
$queueMessage = $queue.QueueClient.ReceiveMessage($visibilityTimeout)
$queueMessage.Value
$queueMessage = $queue.QueueClient.ReceiveMessage($visibilityTimeout)
$queueMessage.Value

ReceiveMessages 메서드를 사용하고 정수 값을 전달하여 반환할 최대 메시지 수를 지정함으로써 큐에서 여러 메시지를 동시에 검색할 수 있습니다.

# Set the amount of time you want to entry to be invisible after read from the queue
# If it is not deleted by the end of this time, it will show up in the queue again
$visibilityTimeout = [System.TimeSpan]::FromSeconds(10)

# Read the messages from the queue, then show the contents of the messages.
$queueMessage = $queue.QueueClient.ReceiveMessages(5,$visibilityTimeout)
$queueMessage.Value

메시지 엿보기

공개 큐를 변경하지 않고 메시지를 미리 보거나 공유 큐를 포함할 수 있는 사용 사례의 경우 PeekMessagePeekMessages 메서드를 사용할 수 있습니다. 이전 ReceiveMessages 예와 마찬가지로 최대 메시지 수를 지정하는 정수 값을 전달하여 여러 메시지를 동시에 엿볼 수 있습니다.

다음 예에서는 PeekMessagePeekMessages 메서드를 모두 사용하여 큐에서 메시지를 검색합니다.

# Read the message from the queue, then show the contents of the message. 
$queueMessage = $queue.QueueClient.PeekMessage()
$queueMessage.Value

# Read the next four messages, then show the contents of the messages.
$queueMessage = $queue.QueueClient.PeekMessages(4)
$queueMessage.Value

큐에서 메시지 삭제

실수로 삭제되는 것을 방지하려면 메시지를 영구적으로 삭제하기 전에 MessageIdPopReceipt 속성을 모두 제공해야 합니다. 이러한 요구 사항으로 인해 2단계 프로세스를 사용하여 메시지를 삭제하는 것이 가장 쉽습니다.

먼저 ReceiveMessage 또는 ReceiveMessages 메서드를 호출하여 큐에서 다음 메시지를 가져옵니다. 큐에서 메시지 제거를 완료하려면 메시지에서 가져오는 값을 DeleteMessage 메서드에 전달합니다.

이 프로세스는 다음 예에 설명되어 있습니다.

# Set the amount of time you want to entry to be invisible after read from the queue
# If it is not deleted by the end of this time, it will show up in the queue again
$visibilityTimeout = [System.TimeSpan]::FromSeconds(10)

# Receive one message from the queue, then delete the message. 
$queueMessage = $queue.QueueClient.ReceiveMessage($visibilityTimeout)
$queue.QueueClient.DeleteMessage($queueMessage.Value.MessageId, $queueMessage.Value.PopReceipt)

# Receive four message from the queue, then delete the messages. 
$queueMessage = $queue.QueueClient.ReceiveMessages(4,$visibilityTimeout)
$queueMessage.Value | foreach { $queue.QueueClient.DeleteMessage($_.MessageId, $_.PopReceipt)}

큐 삭제

큐와 그 안에 포함된 모든 메시지를 삭제하려면 QueueClient 클래스의 Delete 메서드를 호출합니다. 다음 예에서는 이 연습에 사용된 특정 큐를 삭제하는 방법을 보여 줍니다.

# Delete the queue
Remove-AzStorageQueue -Name $queueName -Context $ctx

리소스 정리

이 연습에서 만들어진 자산과 리소스를 삭제하려면 리소스 그룹을 제거합니다. 이 경우 스토리지 계정과 리소스 그룹 자체도 삭제됩니다.

Remove-AzResourceGroup -Name $resourceGroup

다음 단계

이 방법 문서에서는 다음 방법을 포함하여 PowerShell을 사용한 기본 Queue Storage 관리에 대해 알아보았습니다.

  • 큐 만들기
  • 큐 검색
  • 메시지 추가
  • 메시지 읽기
  • 메시지 삭제
  • 큐 삭제

Microsoft Azure PowerShell 스토리지 cmdlet

Microsoft Azure Storage Explorer

  • Microsoft Azure Storage Explorer는 Windows, macOS 및 Linux에서 Azure Storage 데이터로 시각적으로 작업할 수 있도록 해주는 Microsoft의 독립 실행형 무료 앱입니다.