다음을 통해 공유


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

Azure Event Grid는 클라우드용 이벤트 라우팅 서비스입니다. Azure Functions는 지원되는 이벤트 처리기 중 하나입니다.

이 빠른 시작에서는 Azure Portal을 사용하여 사용자 지정 항목을 만들고, 사용자 지정 항목을 구독하고, 이벤트를 트리거하여 결과를 확인합니다. 이벤트를 Azure 함수로 보냅니다.

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

Visual Studio Code를 사용하여 Event Grid 트리거가 있는 함수 만들기

이 섹션에서는 Visual Studio Code를 사용하여 Event Grid 트리거가 있는 함수를 만듭니다.

필수 조건

함수 만들기

  1. Visual Studio Code를 엽니다.

  2. 왼쪽 막대에서 Azure를 선택합니다.

  3. 왼쪽 창의 작업 영역 섹션에서 명령 모음에서 Azure Functions 단추를 선택한 다음, 함수 만들기를 선택합니다.

    함수를 만드는 메뉴 명령이 있는 Visual Studio Code의 Azure 탭을 보여주는 스크린샷.

  4. 함수 코드를 저장할 폴더를 선택합니다.

  5. 새 프로젝트 만들기 명령에서 언어C#을 선택한 다음 키를 선택합니다.

    Azure 함수 개발을 위한 언어로 C# 선택을 보여주는 스크린샷.

  6. .NET 런타임에서 .NET 8.0 격리 LTS를 선택한 다음 키를 선택합니다.

  7. 함수 템플릿에서 Azure Event Grid 트리거를 선택한 다음 키를 선택합니다.

  8. 함수 이름에서 함수의 이름을 입력한 다음 키를 선택합니다.

  9. 네임스페이스에서 함수 네임스페이스의 이름을 입력한 다음 키를 선택합니다.

  10. 프로젝트를 현재 창 또는 새 창에서 열거나 작업 영역에 추가합니다.

  11. 함수가 생성될 때까지 기다립니다. 함수 만들기 상태가 오른쪽 아래 모서리에 표시됩니다.

    함수 만들기 상태를 보여주는 스크린샷.

  12. YourFunctionName.cs 파일, 특히 Run 메서드의 코드를 봅니다. 로거를 사용하여 정보를 출력합니다.

    [Function(nameof(MyEventGridTriggerFunc))]
    public void Run([EventGridTrigger] CloudEvent cloudEvent)
    {
        _logger.LogInformation("Event type: {type}, Event subject: {subject}", cloudEvent.Type, cloudEvent.Subject);
    }
    

Azure에 함수 배포

  1. Azure 창이 아직 열려 있지 않은 경우 왼쪽 표시줄에서 Azure 단추를 선택합니다.

  2. 프로젝트를 마우스로 가리키고 Azure에 배포 단추를 선택합니다.

    Azure에 배포하기 위한 단추를 보여주는 스크린샷.

  3. 명령 팔레트의 드롭다운 목록에서 + 새 함수 앱 만들기를 선택한 다음 키를 선택합니다.

  4. 이름에서 새 함수 앱에 대해 전역적으로 고유한 이름을 입력한 다음 키를 선택합니다.

  5. 런타임 스택에서 .NET 8 격리를 선택합니다.

  6. Azure 리소스에 대한 위치에는 가까운 지역을 선택합니다.

  7. 함수 앱 만들기 상태가 아래쪽 창의 AZURE 탭에 표시됩니다. 함수 앱을 만든 후에는 함수 앱에 로컬로 만든 함수의 배포 상태를 볼 수 있습니다.

  8. 배포가 성공하면 함수 앱 만들기 성공 메시지를 확장하고 리소스를 보려면 클릭을 선택합니다. 왼쪽 창의 리소스 섹션에서 함수가 선택되어 있는지 확인합니다.

  9. 함수에서 마우스 오른쪽 단추를 클릭한 다음, 포털 열기를 선택합니다.

    포털의 함수를 열기 위한 선택 항목을 보여주는 스크린샷.

  10. 필요한 경우 Azure에 로그인하고 함수 앱 페이지가 함수에 대해 나타나는지 확인합니다.

  11. 아래쪽 창에서 함수를 선택합니다.

    함수 앱 페이지에서 Azure 함수를 선택하는 방법을 보여 주는 스크린샷.

  12. 로그 탭으로 전환합니다. 이 탭을 열어 두고 이 자습서의 뒷부분에서 Event Grid 항목에 이벤트를 보낼 때 기록된 메시지를 볼 수 있도록 합니다.

    Azure Portal의 함수에 대한 로그 탭을 보여주는 스크린샷.

사용자 지정 토픽 만들기

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

  1. 웹 브라우저 창의 새 탭에서 Azure Portal에 로그인합니다.

  2. 항목의 검색 창에서 Event Grid 항목을 검색한 다음, Event Grid 항목을 선택합니다.

    Event Grid 항목 선택을 보여주는 스크린샷.

  3. 항목 페이지의 명령 모음에서 + 만들기를 선택합니다.

    Event Grid 항목을 만들기 위한 단추를 보여주는 스크린샷.

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

    1. 구독에 대해 Azure 구독을 선택합니다.

    2. 리소스 그룹에서 이전 단계와 동일한 리소스 그룹을 선택합니다.

    3. 이름에서 사용자 지정 항목의 고유한 이름을 입력합니다. 항목 이름은 DNS(Domain Name System) 항목이 이를 나타내기 때문에 고유해야 합니다.

      예에서 사용된 이름을 사용하지 마세요. 대신, 고유한 이름을 만듭니다. 이름은 3~50자여야 하며 a~z, A~Z, 0~9 및 하이픈(-) 값만 포함해야 합니다.

    4. 위치에서 Event Grid 항목의 위치를 선택합니다.

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

      새 항목을 만들기 위한 창을 보여주는 스크린샷.

    6. 검토 + 만들기 탭에서 설정을 검토한 다음 만들기를 선택합니다.

  5. 사용자 지정 항목을 만든 후 리소스로 이동 링크를 선택하여 해당 항목에 대한 Event Grid 항목 페이지를 엽니다.

    Event Grid 사용자 지정 항목의 페이지를 보여주는 스크린샷.

사용자 지정 항목 구독

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

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

    도구 모음에서 이벤트 구독을 추가하는 단추를 보여주는 스크린샷.

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

    1. 이름에서 이벤트 구독의 이름을 입력합니다.

    2. 이벤트 스키마의 경우 클라우드 이벤트 스키마 v1.0를 선택합니다.

    3. 엔드포인트 유형에 대해 Azure 함수를 선택합니다.

    4. 엔드포인트 구성을 선택합니다.

      이벤트 구독 값을 보여주는 스크린샷.

    5. Azure 함수 선택 창에서 다음 단계를 수행합니다.

      1. 구독에서 함수가 있는 Azure 구독을 선택합니다.

      2. 리소스 그룹에서 함수가 있는 리소스 그룹을 선택합니다.

      3. 함수 앱에서 함수 앱을 선택합니다.

      4. 함수에서 함수 앱의 함수를 선택합니다.

      5. 선택 확인을 선택합니다.

        이전에 만든 Azure 함수를 선택하는 창을 보여주는 스크린샷.

    6. 이 단계는 선택 사항이지만 프로덕션 시나리오에는 사용하는 것이 좋습니다. 이벤트 구독 만들기 창에서 추가 기능 탭으로 이동하고 일괄 처리당 최대 이벤트기본 일괄 처리 크기(KB)에 대한 값을 설정합니다.

      일괄 처리를 통해 처리량을 높일 수 있습니다. 일괄 처리당 최대 이벤트의 경우 구독에서 일괄 처리에 포함할 최대 이벤트 수를 설정합니다. 기본 일괄 처리 크기(KB)는 기본 일괄 처리 크기의 상한을 설정하지만, 단일 이벤트가 이 임계값보다 큰 경우 초과될 수 있습니다.

      이벤트 구독에 대한 일괄 처리 설정을 보여주는 스크린샷.

    7. 이벤트 구독 만들기 창에서 만들기를 선택합니다.

토픽에 이벤트 보내기

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

첫 번째 예제에서는 Azure CLI를 사용합니다. 사용자 지정 항목에 대한 URL 및 키와 샘플 이벤트 데이터를 가져옵니다. topicname의 사용자 지정 항목 이름을 사용합니다. 샘플 이벤트 데이터가 생성됩니다.

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

cURL 도구는 HTTP 요청을 보냅니다. 이 문서에서는 cURL을 사용하여 이벤트를 사용자 지정 항목으로 보냅니다.

Azure CLI

  1. Azure Portal에서 Cloud Shell을 선택합니다. Azure PowerShell 모드인 경우 Bash로 전환을 선택합니다.

    Azure Cloud Shell의 Bash 창을 보여주는 스크린샷.

  2. 명령에서 사용할 topicnameresourcegroupname 변수를 설정합니다.

    TOPICNAME을 Event Grid 토픽의 이름으로 바꿉니다.

    topicname="TOPICNAME"
    

    RESOURCEGROUPNAME을 Event Grid 토픽이 포함된 Azure 리소스 그룹의 이름으로 바꿉니다.

    resourcegroupname="RESOURCEGROUPNAME"
    
  3. 다음 명령을 사용하여 항목의 엔드포인트를 가져옵니다. 명령을 복사하고 붙여넣은 후, 이를 실행하기 전에 항목 이름 및 리소스 그룹 이름을 업데이트합니다.

    endpoint=$(az eventgrid topic show --name $topicname -g $resourcegroupname --query "endpoint" --output tsv)
    
  4. 다음 명령을 사용하여 사용자 지정 항목에 대한 키를 가져옵니다. 명령을 복사하고 붙여넣은 후, 이를 실행하기 전에 항목 이름 및 리소스 그룹 이름을 업데이트합니다.

    key=$(az eventgrid topic key list --name $topicname -g $resourcegroupname --query "key1" --output tsv)
    
  5. 이벤트 정의와 함께 다음 문을 복사한 다음 키를 선택합니다.

    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 명령을 실행하여 이벤트를 게시합니다.

    curl -X POST -H "aeg-sas-key: $key" -d "$event" $endpoint
    
  7. 함수의 메시지가 Azure Portal 함수에 대한 로그 탭에 나타나는지 확인합니다.

    Azure 함수에 대한 로그 탭을 보여주는 스크린샷.

Azure PowerShell

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

  1. Azure Portal에서 Cloud Shell을 선택합니다( 또는 Azure Cloud Shell 페이지로 이동). Cloud Shell 창의 왼쪽 위 모서리에서 PowerShell로 전환을 선택합니다.

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

    $resourceGroupName = "RESOURCEGROUPNAME"
    
    $topicName = "TOPICNAME"
    
  3. 다음 명령을 실행하여 항목에 대한 엔드포인트 및 키를 가져옵니다.

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

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

    Invoke-WebRequest -Uri $endpoint -Method POST -Body $body -Headers @{"aeg-sas-key" = $keys.Key1}
    
  6. 함수의 메시지가 Azure Portal 함수에 대한 로그 탭에 나타나는지 확인합니다.

    함수의 로그 탭을 보여주는 스크린샷.

함수가 이벤트를 수신했는지 확인

이벤트를 트리거했으며, Event Grid가 메시지를 구독 시 구성한 엔드포인트로 보냈습니다. 이제 함수가 이를 수신했는지 확인할 수 있습니다.

  1. 함수에 대한 Monitor 페이지에서 호출을 찾습니다.

    모니터 페이지의 호출 탭을 보여주는 스크린샷.

  2. 호출을 선택하여 세부 정보를 표시합니다.

    호출 세부 정보를 보여주는 스크린샷.

    또한 오른쪽 창의 로그 탭을 사용하여 항목의 엔드포인트에 이벤트를 게시할 때 기록된 메시지를 볼 수 있습니다.

    로그가 있는 함수의 모니터 보기를 보여주는 스크린샷.

리소스 정리

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

  1. 왼쪽 메뉴에서 리소스 그룹을 선택합니다.

    리소스 그룹의 페이지를 보여주는 스크린샷

    또 다른 방법으로, 왼쪽 메뉴에서 모든 서비스를 선택한 다음 리소스 그룹을 선택합니다.

  2. 리소스 그룹을 선택하여 세부 정보에 대한 창을 엽니다.

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

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

Cloud Shell 창은 리소스 그룹 페이지에 표시되는 다른 리소스 그룹을 만들고 사용했습니다. 나중에 Cloud Shell 창을 사용할 계획이 없으면 이 리소스 그룹을 삭제하세요.

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

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