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

이 퀵스타트에서는 Azure CLI를 사용해 Azure Event Grid에서 커스텀 주제를 생성하고, 커스텀 토픽을 구독한 후 샘플 이벤트를 트리거하여 결과를 확인할 수 있습니다.

일반적으로 이벤트 데이터를 처리하고 작업을 수행하는 엔드포인트에 이벤트를 보냅니다. 하지만 이 빠른 시작을 단순화하기 위해, 샘플 이벤트를 웹 앱에 보내 메시지를 수집하고 표시합니다. 완료하면 웹 앱에서 다음 이미지와 같이 이벤트 데이터를 볼 수 있습니다:

샘플 이벤트가 있는 Event Grid 뷰어 샘플을 보여 주는 스크린샷

Azure 계정이 없는 경우 시작하기 전에 체험 계정을 만듭니다.

필수 조건

  • 이 퀵스타트는 Azure CLI 버전 2.0.70 이상이 필요합니다. Azure Cloud Shell을 사용하는 경우 최신 버전이 이미 설치되어 있습니다.
  • Azure Event Grid를 처음 사용하는 경우, 이 빠른 시작을 시작하기 전에 서비스 개요는 Azure Event Grid란?을 참조하세요.

리소스 그룹 만들기

이벤트 그리드 주제는 Azure 리소스로, 반드시 Azure 리소스 그룹에 배치해야 합니다. 리소스 그룹은 Azure 리소스를 배포하고 관리하는 논리적 집합입니다.

az group create 명령을 사용하여 리소스 그룹을 만듭니다. 다음 예제에서는 westus2 위치에 gridResourceGroup이라는 리소스 그룹을 만듭니다. 원한다면 자원 그룹의 이름과 위치를 바꿔도 됩니다.

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 토픽은 이벤트를 게시하는 사용자 정의 엔드포인트를 제공합니다. 다음 예시는 Azure Cloud Shell의 Bash를 사용하여 리소스 그룹에 커스텀 주제를 생성합니다. <your-topic-name>을 토픽의 고유한 이름으로 바꿉니다. 사용자 지정 토픽 이름은 DNS(도메인 이름 시스템) 항목의 일부이므로 고유해야 합니다. 또한, 3-50자 사이여야 하며, a-z, a-z, 0-9, "-" 값만 포함해야 합니다

  1. 다음 명령을 복사하고, 주제 이름을 지정한 후 Enter 를 선택하여 명령을 실행하세요.

    topicname=<your-topic-name>
    
  2. az eventgrid topic create 명령을 사용하여 사용자 지정 토픽을 만듭니다.

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

메시지 엔드포인트 만들기

사용자 지정 항목을 구독하기 전에 이벤트 메시지에 대한 엔드포인트를 만듭니다. 일반적으로 엔드포인트는 이벤트 데이터를 기반으로 작업을 수행합니다. 이 빠른 시작을 단순화하기 위해, 이벤트 메시지를 보여주는 미리 구축된 웹 앱을 배포하세요. 배포된 솔루션은 App Service 계획, App Service 웹앱 및 GitHub의 소스 코드를 포함합니다.

  1. 다음 명령을 복사하고, 웹 앱 이름(이벤트 그리드 뷰어 샘플)을 지정한 후 Enter 버튼을 선택하여 명령을 실행하세요. <your-site-name>을 웹앱의 고유한 이름으로 바꿉니다. 웹앱 이름은 DNS 항목의 일부이므로 고유해야 합니다.

    sitename=<your-site-name>
    
  2. az deployment group create를 실행하여 Azure Resource Manager 템플릿을 사용해 웹 앱을 배포하세요.

    az deployment group create \
      --resource-group gridResourceGroup \
      --template-uri "https://raw.githubusercontent.com/Azure-Samples/azure-event-grid-viewer/main/azuredeploy.json" \
      --parameters siteName=$sitename hostingPlanName=viewerhost
    

배포를 완료하는 데 몇 분 정도 걸릴 수 있습니다. 배포가 성공하면 웹앱을 보고 실행 중인지 확인합니다. 웹 브라우저에서 https://<your-site-name>.azurewebsites.net으로 이동합니다.

사이트에 메시지가 전혀 표시되지 않은 것을 보실 겁니다.

사용자 지정 항목 구독

Event Grid 토픽을 구독하여 Event Grid에 추적하려는 이벤트와 이벤트를 보낼 위치를 알립니다. 다음 예제에서는 직접 만든 사용자 지정 항목을 구독하고 웹앱의 URL을 이벤트 알림에 대한 엔드포인트로 전달합니다.

웹앱에 대한 엔드포인트는 접미사 /api/updates/를 포함해야 합니다.

  1. 다음 명령을 복사하고, 이전 단계에서 만든 웹 앱 이름으로 대체 $sitename 한 뒤, Enter 버튼을 선택해 명령어를 실행하세요.

    endpoint=https://$sitename.azurewebsites.net/api/updates
    
  2. 다음 명령을 실행하여 사용자가 만든 토픽의 리소스 ID를 가져옵니다.

    topicresourceid=$(az eventgrid topic show --resource-group gridResourceGroup --name $topicname --query "id" --output tsv)
    
  3. 다음 명령을 실행해 엔드포인트를 사용하여 사용자 지정 토픽에 대한 구독을 만듭니다.

    az eventgrid event-subscription create \
      --source-resource-id $topicresourceid \
      --name demoViewerSub \
      --endpoint $endpoint
    

    웹앱을 다시 확인하고, 구독 유효성 검사 이벤트를 보냈음을 확인합니다. 눈 모양 아이콘을 선택하여 이벤트 데이터를 확장합니다. Event Grid는 유효성 검사 이벤트를 보내므로 엔드포인트는 이벤트 데이터를 수신하려는 것을 확인할 수 있습니다. 웹앱은 구독의 유효성을 검사하는 코드를 포함합니다.

    이벤트 그리드 뷰어 샘플과 구독 검증 이벤트를 보여주는 스크린샷입니다.

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

이벤트를 트리거하여 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 서비스는 이벤트 데이터를 보냅니다. 다음 예제에서는 샘플 이벤트 데이터를 만듭니다.

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"} ]'

JSON의 data 요소는 이벤트의 페이로드입니다. 모든 잘 구성된(Well-Formed) JSON은 이 필드에 배치될 수 있습니다. 또한 고급 라우팅 및 필터링을 위해 제목 필드를 사용할 수 있습니다.

cURL은 HTTP 요청을 보내는 유틸리티입니다. 이 퀵스타트에서는 cURL을 사용하여 이벤트를 토픽으로 보내세요.

curl -X POST -H "aeg-sas-key: $key" -d "$event" $endpoint

이벤트를 트리거했고 Event Grid는 구독할 때 구성한 엔드포인트로 메시지를 보냈습니다. 웹앱을 확인하여 방금 전송한 이벤트를 봅니다.

[{
  "id": "1807",
  "eventType": "recordInserted",
  "subject": "myapp/vehicles/motorcycles",
  "eventTime": "2017-08-10T21:03:07+00:00",
  "data": {
    "make": "Ducati",
    "model": "Monster"
  },
  "dataVersion": "1.0",
  "metadataVersion": "1",
  "topic": "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.EventGrid/topics/{topic}"
}]

리소스 정리

이 행사나 이벤트 뷰어 앱을 계속 사용할 계획이라면, 이 퀵스타트에서 만든 자료를 정리하지 마세요. 그렇지 않으면 다음 명령어를 사용해 이 퀵스타트에서 생성한 리소스를 삭제하세요.

az group delete --name gridResourceGroup --yes --no-wait

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

이벤트 그리드에 이벤트를 게시하고 이벤트를 소비하는 방법에 대해 다양한 프로그래밍 언어로 배우려면 다음 샘플을 참고하세요: