빠른 시작: Event Grid 및 Azure CLI를 사용하여 사용자 지정 이벤트를 큐로 라우팅

Azure Event Grid 이벤트를 통해 애플리케이션을 통합하는 데 사용할 수 있는 확장성이 뛰어난 서버리스 이벤트 브로커입니다. Event Grid는 지원되는 이벤트 처리기로 이벤트를 전달하며, Azure Queue Storage는 그 중 하나입니다.

이 빠른 시작에서는 Azure CLI를 사용하여 Event Grid 사용자 지정 토픽 및 해당 토픽에 대한 Queue Storage 구독을 만듭니다. 그런 다음 사용자 지정 토픽에 샘플 이벤트를 보내고 해당 이벤트가 큐에 배달되는지 확인합니다.

Azure를 구독하고 있지 않다면 시작하기 전에 Azure 체험 계정을 만듭니다.

리소스 그룹 만들기

Event Grid 토픽은 Azure 리소스이며 Azure 리소스 그룹에 배치해야 합니다. 리소스 그룹은 Azure 리소스가 배포 및 관리되는 논리적 컬렉션입니다.

az group create 명령을 사용하여 리소스 그룹을 만듭니다. 다음 예제에서는 westus2 위치에 gridResourceGroup이라는 리소스 그룹을 만듭니다.

Cloud Shell 열기를 선택하여 오른쪽 창에서 Azure Cloud Shell을 엽니다. 복사 단추를 선택하여 명령을 복사하고 Cloud Shell에 붙여넣은 다음 Enter 키를 선택하여 명령을 실행합니다.

az group create --name gridResourceGroup --location westus2

Event Grid 리소스 공급자 사용

  1. 이전에 Azure 구독에서 Event Grid를 사용하지 않은 경우 Event Grid 리소스 공급자를 등록해야 할 수 있습니다. 공급자를 등록하는 다음 명령을 실행합니다.

    az provider register --namespace Microsoft.EventGrid
    
  2. 등록을 완료하는 데 잠시 시간이 걸릴 수 있습니다. 상태를 확인하려면 다음 명령을 실행합니다.

    az provider show --namespace Microsoft.EventGrid --query "registrationState"
    

    registrationStateRegistered이면 진행할 준비가 된 것입니다.

사용자 지정 토픽 만들기

Event Grid 토픽은 이벤트를 게시하는 사용자 정의 엔드포인트를 제공합니다. 다음 예제에서는 리소스 그룹에 사용자 지정 토픽을 만듭니다.

<TOPIC NAME>을 사용자 지정 항목의 고유한 이름으로 바꿉니다. Event Grid 토픽 이름은 DNS(Domain Name System) 항목이 나타내기 때문에 고유해야 합니다.

  1. 토픽의 이름을 지정합니다.

    topicname="<TOPIC NAME>"
    
  2. 다음 명령을 실행하여 토픽을 만듭니다.

    az eventgrid topic create --name $topicname -l westus2 -g gridResourceGroup
    

큐 만들기

사용자 지정 토픽을 구독하기 전에 이벤트 메시지의 엔드포인트를 만듭니다. 이벤트를 수집하기 위한 큐를 만듭니다.

  1. Azure Storage 계정에 고유한 이름을 지정합니다.

    storagename="<STORAGE ACCOUNT NAME>"    
    
  2. 다음 명령을 실행하여 스토리지에 스토리지 계정 및 큐(eventqueue라 명명됨)를 만듭니다.

    queuename="eventqueue"
    
    az storage account create -n $storagename -g gridResourceGroup -l westus2 --sku Standard_LRS
    key="$(az storage account keys list -n $storagename --query "[0].{value:value}" --output tsv)"    
    az storage queue create --name $queuename --account-name $storagename --account-key $key
    

사용자 지정 항목 구독

다음 예제에서는 사용자가 만든 사용자 지정 토픽을 구독하고 엔드포인트에 대한 큐의 리소스 ID를 전달합니다. Azure CLI를 사용하면 큐 ID를 엔드포인트로 전달합니다. 엔드포인트는 다음과 같은 형식입니다.

/subscriptions/<AZURE SUBSCRIPTION ID>/resourcegroups/<RESOURCE GROUP NAME>/providers/Microsoft.Storage/storageAccounts/<STORAGE ACCOUNT NAME>/queueservices/default/queues/<QUEUE NAME>

다음 스크립트는 큐에 대한 스토리지 계정의 리소스 ID를 가져옵니다. 큐 ID를 생성하고 Event Grid 토픽을 구독합니다. 엔드포인트 유형을 storagequeue로 설정하고 엔드포인트에 대한 큐 ID를 사용합니다.

명령을 실행하기 전에 만료 날짜(<yyyy-mm-dd>)의 자리 표시자를 연도, 월 및 일의 실제 값으로 바꿉니다.

storageid=$(az storage account show --name $storagename --resource-group gridResourceGroup --query id --output tsv)
queueid="$storageid/queueservices/default/queues/$queuename"
topicid=$(az eventgrid topic show --name $topicname -g gridResourceGroup --query id --output tsv)

az eventgrid event-subscription create \
  --source-resource-id $topicid \
  --name mystoragequeuesubscription \
  --endpoint-type storagequeue \
  --endpoint $queueid \
  --expiration-date "<yyyy-mm-dd>"

이벤트 구독을 만드는 계정에는 큐에 대한 쓰기 액세스 권한이 있어야 합니다. 구독의 만료 날짜가 설정되었습니다.

REST API를 사용하여 구독을 만드는 경우 스토리지 계정의 ID와 큐 이름을 별도의 매개 변수로 전달합니다.

"destination": {
  "endpointType": "storagequeue",
  "properties": {
    "queueName":"eventqueue",
    "resourceId": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-name>"
  }
  ...

사용자 지정 항목에 이벤트 보내기

이벤트를 트리거하여 Event Grid에서 엔드포인트에 메시지를 배포하는 방법을 확인합니다. 먼저 사용자 지정 항목의 URL 및 키를 가져옵니다.

endpoint=$(az eventgrid topic show --name $topicname -g gridResourceGroup --query "endpoint" --output tsv)
key=$(az eventgrid topic key list --name $topicname -g gridResourceGroup --query "key1" --output tsv)

이 문서에서는 단순화를 위해 샘플 이벤트 데이터를 사용하여 사용자 지정 토픽으로 보냅니다. 일반적으로 애플리케이션 또는 Azure 서비스는 이벤트 데이터를 보냅니다.

cURL 도구는 HTTP 요청을 보냅니다. 이 문서에서는 cURL을 사용하여 이벤트를 사용자 지정 토픽으로 보냅니다. 다음 예제는 세 개의 이벤트를 Event Grid 토픽으로 보냅니다.

for i in 1 2 3
do
   event='[ {"id": "'"$RANDOM"'", "eventType": "recordInserted", "subject": "myapp/vehicles/motorcycles", "eventTime": "'`date +%Y-%m-%dT%H:%M:%S%z`'", "data":{ "make": "Ducati", "model": "Monster"},"dataVersion": "1.0"} ]'
   curl -X POST -H "aeg-sas-key: $key" -d "$event" $endpoint
done

Azure Portal의 큐로 이동하여 Event Grid가 해당 세 가지 이벤트를 큐로 보낸 것을 확인합니다.

큐의 Event Grid에서 받은 메시지 목록을 보여 주는 스크린샷입니다.

리소스 정리

이 이벤트를 계속 사용하려는 경우 이 문서에서 만든 리소스를 정리하지 마세요. 그렇지 않으면 다음 명령을 사용하여 리소스를 삭제합니다.

az group delete --name gridResourceGroup

토픽 및 이벤트 구독을 만드는 방법을 배웠으므로 어떤 Event Grid가 도움이 되는지 자세히 알아보세요.

다양한 프로그래밍 언어를 사용하여 Event Grid에서 이벤트를 게시하고 이벤트를 사용하는 방법을 알아보려면 다음 샘플을 참조하세요.