Azure Portal 및 Azure Event Grid를 사용하여 사용자 지정 이벤트를 웹 엔드포인트로 라우팅

Event Grid는 다양한 Azure 서비스 및 애플리케이션에서 이벤트를 쉽게 관리할 수 있는 완전 관리형 서비스입니다. 이벤트 기반 및 서버리스 애플리케이션 빌드를 간소화합니다. 서비스에 대한 개요는 Event Grid 개요를 참조하세요.

이 문서에서는 Azure Portal을 사용하여 다음 작업을 수행합니다.

  1. 사용자 지정 토픽 만들기
  2. 사용자 지정 토픽 구독
  3. 이벤트 트리거
  4. 결과 보기 일반적으로 이벤트 데이터를 처리하고 작업을 수행하는 엔드포인트에 이벤트를 보냅니다. 그러나 이 문서를 간소화하기 위해 메시지를 수집하고 표시하는 웹앱에 이벤트를 보냅니다.

필수 조건

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

Event Grid 리소스 공급자 등록

이전에 Event Grid를 사용하지 않은 경우 Event Grid 리소스 공급자를 등록해야 합니다. 이전에 Event Grid 사용한 경우 다음 섹션으로 건너뜁니다.

Azure Portal에서 다음 단계를 수행합니다.

  1. 왼쪽 메뉴에서 구독을 선택합니다.

  2. 구독 목록에서 Event Grid에 사용할 구독을 선택합니다.

  3. 구독 페이지의 왼쪽 메뉴에 있는 설정에서 리소스 공급자를 선택합니다.

  4. Microsoft.EventGrid를 검색하고 상태등록되지 않음인지 확인합니다.

  5. 공급자 목록에서 Microsoft.EventGrid를 선택합니다.

  6. 명령 모음에서 등록을 선택합니다.

    Image showing the registration of Microsoft.EventGrid provider with the Azure subscription.

  7. 새로 고침하여 Microsoft.EventGrid의 상태가 Registered로 변경되었는지 확인합니다.

    Image showing the successful registration of Microsoft.EventGrid provider with the Azure subscription.

사용자 지정 토픽 만들기

Event Grid 토픽은 이벤트를 게시하는 사용자 정의 엔드포인트를 제공합니다.

  1. Azure 포털에 로그인합니다.

  2. 토픽의 검색 창에 Event Grid 토픽을 입력한 다음, 드롭다운 목록에서 Event Grid 토픽을 선택합니다.

    Screenshot showing the Azure port search bar to search for Event Grid topics.

  3. Event Grid 항목 페이지의 도구 모음에 있는 + 만들기를 선택합니다.

    Screenshot showing the Create Topic button on Event Grid topics page.

  4. 토픽 만들기 페이지에서 다음 단계를 수행합니다.

    1. Azure 구독을 선택합니다.

    2. 기존 리소스 그룹을 선택하거나 새 새로 만들기를 선택하고 리소스 그룹이름을 입력합니다.

    3. 사용자 지정 항목의 고유한 이름을 입력합니다. DNS 항목으로 표시되기 때문에 토픽 이름은 고유해야 합니다. 이미지에 표시된 이름은 사용하지 마십시오. 대신 고유한 이름을 만듭니다. 3~50자 사이로 a-z, A-Z, 0-9 및 “-” 값만 포함해야 합니다.

    4. Event Grid 토픽의 위치를 선택합니다.

    5. 페이지 아래쪽에서 검토 + 만들기를 선택합니다.

      Create Topic page

    6. 토픽 만들기 페이지의 검토 + 만들기 탭에서 만들기를 선택합니다.

      Review settings and create

  5. 배포에 성공하면 리소스로 이동을 선택하여 토픽에 대한 Event Grid 토픽 페이지로 이동합니다. 이 페이지를 열린 상태로 유지합니다. 나중에 빠른 시작에서 사용할 예정입니다.

    Screenshot showing the Event Grid topic home page.

    참고 항목

    빠른 시작을 간단하게 유지하기 위해 기본 사항 페이지만 사용하여 항목을 만듭니다. 마법사의 다른 페이지에서 네트워크, 보안 및 데이터 보존 설정을 구성하는 방법에 대한 자세한 단계는 사용자 지정 항목 만들기를 참조하세요.

메시지 엔드포인트 만들기

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

  1. 문서 페이지에서 Azure에 배포를 선택하여 구독에 솔루션을 배포합니다. Azure Portal에서 매개 변수에 대한 값을 제공합니다.

    Button to deploy the Resource Manager template to Azure.

  2. 사용자 지정 배포 페이지에서 다음 단계를 수행합니다.

    1. 리소스 그룹에서 스토리지 계정을 만들 때 생성된 것과 동일한 리소스 그룹을 선택합니다. 자습서를 완료한 후 리소스 그룹을 삭제하면 더 쉽게 정리할 수 있습니다.

    2. 사이트 이름에 웹앱의 이름을 입력합니다.

    3. 호스팅 계획 이름에 웹앱을 호스팅하는 데 사용할 App Service 계획의 이름을 입력합니다.

    4. 검토 + 만들기를 선택합니다.

      Screenshot showing the Custom deployment page.

  3. 리뷰 + 생성 페이지에서 생성를 선택합니다.

  4. 배포가 완료될 때까지 몇 분 정도 걸릴 수 있습니다. 포털에서 경고(벨 아이콘)를 선택하고 리소스 그룹으로 이동을 선택합니다.

    Screenshot showing the successful deployment message with a link to navigate to the resource group.

  5. 리소스 그룹 페이지의 리소스 목록에서 자신이 만든 웹앱을 선택합니다. 이 목록에는 App Service 계획과 스토리지 계정도 표시됩니다.

    Screenshot that shows the Resource Group page with the deployed resources.

  6. 웹앱의 App Service 페이지에서 URL을 선택하여 웹 사이트로 이동합니다. URL은 https://<your-site-name>.azurewebsites.net 형식이어야 합니다.

    Screenshot that shows the App Service page with the link to the site highlighted.

  7. 사이트가 보이지만 사이트에 이벤트가 아직 게시되지 않았음을 확인합니다.

    Screenshot that shows the Event Grid Viewer sample app.

사용자 지정 항목 구독

Event Grid 토픽을 구독하여 추적하려는 이벤트와 이벤트를 보낼 위치를 Event Grid에 알립니다.

  1. 이제 사용자 지정 항목에 대한 Event Grid 항목 페이지의 도구 모음에서 + 이벤트 구독을 선택합니다.

    Add event subscription button

  2. 이벤트 구독 만들기 페이지에서 다음 단계를 수행합니다.

    1. 이벤트 구독에 대한 이벤트 이름을 입력합니다.

    2. 엔드포인트 유형으로 웹후크를 선택합니다.

    3. 엔드포인트 선택을 선택합니다.

      Provide event subscription values

    4. 웹 후크 엔드포인트의 경우 웹앱의 URL을 제공하고 api/updates를 홈 페이지 URL에 추가합니다. 선택 확인을 선택합니다.

      Provide endpoint URL

    5. 이벤트 구독 만들기 페이지에서 만들기를 선택합니다.

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

    Screenshot of the Event Grid Viewer app with the Subscription Validated event.

토픽에 이벤트 보내기

이제 이벤트를 트리거하여 Event Grid가 메시지를 사용자 엔드포인트에 어떻게 배포하는지 살펴 보겠습니다. Azure CLI 또는 PowerShell을 사용하여 사용자 지정 항목에 테스트 이벤트를 보냅니다. 일반적으로 애플리케이션 또는 Azure 서비스는 이벤트 데이터를 보냅니다.

첫 번째 예제에서는 Azure CLI를 사용합니다. 사용자 지정 항목에 대한 URL 및 키와 샘플 이벤트 데이터를 가져옵니다. <topic name>의 사용자 지정 항목 이름을 사용합니다. 샘플 이벤트 데이터가 생성됩니다. JSON의 data 요소는 이벤트의 페이로드입니다. 모든 잘 구성된(Well-Formed) JSON은 이 필드에 배치될 수 있습니다. 또한 고급 라우팅 및 필터링을 위해 제목 필드를 사용할 수 있습니다. CURL은 HTTP 요청을 보내는 유틸리티입니다.

Azure CLI

  1. Azure Portal에서 Cloud Shell을 선택합니다. Cloud Shell이 웹 브라우저의 아래쪽 창에 열립니다.

    Select Cloud Shell icon

  2. Cloud Shell 창의 왼쪽 위 모서리에서 Bash를 선택합니다.

    Screenshot that shows the Cloud Shell with Bash selected in the top-left corner.

  3. 다음 명령을 실행하여 토픽에 대한 엔드포인트를 가져옵니다. 명령을 복사하고 붙여 넣은 후, 명령을 실행하기 전에 토픽 이름리소스 그룹 이름을 업데이트합니다. 이 토픽 엔드포인트에 샘플 이벤트를 게시합니다.

    endpoint=$(az eventgrid topic show --name <topic name> -g <resource group name> --query "endpoint" --output tsv)
    
  4. 다음 명령을 실행하여 사용자 지정 토픽에 대한 를 가져옵니다. 명령을 복사하고 붙여 넣은 후, 명령을 실행하기 전에 토픽 이름리소스 그룹 이름을 업데이트합니다. Event Grid 토픽의 기본 키입니다. Azure Portal에서 이 키를 가져오려면 Event Grid 토픽 페이지의 액세스 키 탭으로 전환합니다. 사용자 지정 토픽에 이벤트를 게시하려면 액세스 키가 필요합니다.

    key=$(az eventgrid topic key list --name <topic name> -g <resource group name> --query "key1" --output tsv)
    
  5. 이벤트 정의와 함께 다음 명령문을 복사하고 ENTER를 누릅니다.

    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"} ]'
    
  6. 다음 Curl 명령을 실행하여 이벤트를 게시합니다. 명령에서 aeg-sas-key 헤더는 이전에 얻은 액세스 키로 설정됩니다.

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

Azure PowerShell

두 번째 예제에서는 PowerShell을 사용하여 비슷한 단계를 수행합니다.

  1. Azure Portal에서 Cloud Shell을 선택하거나 https://shell.azure.com/으로 이동합니다. Cloud Shell이 웹 브라우저의 아래쪽 창에 열립니다.

    Select Cloud Shell icon

  2. Cloud Shell에서 Cloud Shell 창의 왼쪽 위 모서리에서 PowerShell을 선택합니다. Azure CLI 섹션에서 샘플 Cloud Shell 창 이미지를 확인합니다.

  3. 다음 변수를 설정합니다. 각 명령을 복사하고 붙여넣은 후, 명령을 실행하기 전에 항목 이름리소스 그룹 이름을 업데이트합니다.

    리소스 그룹:

    $resourceGroupName = "<resource group name>"
    

    Event Grid 토픽 이름:

    $topicName = "<topic name>"
    
  4. 다음 명령을 실행하여 항목에 대한 엔드포인트를 가져옵니다.

    $endpoint = (Get-AzEventGridTopic -ResourceGroupName $resourceGroupName -Name $topicName).Endpoint
    $keys = Get-AzEventGridTopicKey -ResourceGroupName $resourceGroupName -Name $topicName
    
  5. 이벤트를 준비합니다. Cloud Shell 창에서 명령문을 복사하고 실행합니다.

    $eventID = Get-Random 99999
    
    #Date format should be SortableDateTimePattern (ISO 8601)
    $eventDate = Get-Date -Format s
    
    #Construct body using Hashtable
    $htbody = @{
        id= $eventID
        eventType="recordInserted"
        subject="myapp/vehicles/motorcycles"
        eventTime= $eventDate   
        data= @{
            make="Ducati"
            model="Monster"
        }
        dataVersion="1.0"
    }
    
    #Use ConvertTo-Json to convert event body from Hashtable to JSON Object
    #Append square brackets to the converted JSON payload since they are expected in the event's JSON payload syntax
    $body = "["+(ConvertTo-Json $htbody)+"]"
    
  6. Invoke-WebRequest cmdlet을 사용하여 이벤트를 보냅니다.

    Invoke-WebRequest -Uri $endpoint -Method POST -Body $body -Headers @{"aeg-sas-key" = $keys.Key1}
    

Event Grid 뷰어에서 확인

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

Event Grid Viewer

리소스 정리

이 이벤트로 작업을 계속하려는 경우 이 문서에서 만든 리소스를 정리하지 마세요. 계속하지 않으려는 경우 이 문서에서 만든 리소스를 삭제합니다.

  1. 왼쪽 메뉴에서 리소스 그룹 을 선택합니다. 왼쪽 메뉴에 보이지 않으면, 왼쪽 메뉴에서 모든 서비스를 선택하고 리소스 그룹을 선택합니다.

    Screenshot that shows the Resource Groups page.

  2. 리소스 그룹을 선택하여 리소스 그룹 페이지를 시작합니다.

  3. 도구 모음에서 리소스 그룹 삭제를 선택합니다.

  4. 리소스 그룹의 이름을 입력하여 삭제를 확인하고 삭제를 선택합니다.

    이미지에 보이는 다른 리소스 그룹은 Cloud Shell 창에서 생성되어 사용되었습니다. 나중에 Cloud Shell 창에서 사용하지 않으려면 삭제합니다.

다음 단계

이제 사용자 지정 항목 및 이벤트 구독을 만드는 방법에 대해 알아보았습니다. 다음으로 어떤 Event Grid가 도움이 되는지 자세히 알아보세요.

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