네임스페이스 토픽에 게시하고 Azure Event Grid에서 이벤트 사용

이 문서에서는 curl Bash 셸 명령을 사용하여 이벤트를 게시, 수신 및 승인하는 끌어오기 배달에 대한 간략한 소개를 제공합니다. Event Grid 리소스는 CLI 명령을 사용하여 만들어집니다. 이 문서는 끌어오기 배달 기능의 빠른 테스트에 적합합니다. 데이터 평면 SDK를 사용하는 샘플 코드는 .NET 또는 Java 샘플을 참조하세요. Java의 경우 두 가지 문서인 이벤트 게시이벤트 수신 빠른 시작에서 샘플 코드를 제공합니다. 끌어오기 배달 모델에 대한 자세한 내용은 개념끌어오기 배달 개요 문서를 참조하세요.

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

사전 요구 사항

  • 이 문서에는 Azure CLI 버전 2.0.70 이상이 필요합니다. Azure Cloud Shell을 사용하는 경우 최신 버전이 이미 설치되어 있습니다.

리소스 그룹 만들기

az group create 명령을 사용하여 Azure 리소스 그룹을 만듭니다. 이 리소스 그룹을 사용하여 이 문서에서 만든 모든 리소스를 포함할 수 있습니다.

Cloud Shell을 사용하여 명령을 실행하는 일반적인 단계는 다음과 같습니다.

  • 오른쪽 창에서 Azure Cloud Shell 창을 보려면 Cloud Shell 열기를 선택합니다.
  • 명령을 복사하여 Azure Cloud Shell 창에 붙여넣습니다.
  • Enter 키를 눌러 명령을 실행 합니다.
  1. Azure 리소스 그룹의 이름을 저장할 변수를 선언합니다. <your-resource-group-name>을 원하는 값으로 바꿔 리소스 그룹의 이름을 지정합니다.

    resource_group="<your-resource-group-name>"
    
  2. 리소스 그룹을 만듭니다. 원하는 대로 위치를 변경합니다.

    az group create --name $resource_group --location eastus
    

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를 사용하여 리소스 그룹에 네임스페이스를 만듭니다. 네임스페이스 이름은 DNS(Domain Name System) 항목의 일부이므로 고유해야 합니다. 네임스페이스 이름은 다음 규칙을 충족해야 합니다.

  • 3~50자 사이여야 합니다.
  • 지역별로 고유해야 합니다.
  • 허용되는 문자는 a-z, A-Z, 0-9 및 -입니다
  • 예약된 키워드 접두사(예: Microsoft, System 또는EventGrid)로 시작해서는 안 됩니다.
  1. Event Grid 네임스페이스의 이름을 저장할 변수를 선언합니다. <your-namespace-name>을 원하는 값으로 바꿔 네임스페이스의 이름을 지정합니다.

    namespace="<your-namespace-name>"
    
  2. 네임스페이스를 만듭니다. 배포되는 위치를 변경할 수 있습니다.

    az eventgrid namespace create -g $resource_group -n $namespace -l eastus
    

네임스페이스 토픽 만들기

네임스페이스 엔드포인트에 게시된 모든 이벤트를 저장하는 데 사용되는 토픽을 만듭니다.

  1. 네임스페이스 토픽의 이름을 저장할 변수를 선언합니다. <your-topic-name>을 원하는 값으로 바꿔 네임스페이스 토픽의 이름을 지정합니다.

    topic="<your-topic-name>"
    
  2. 네임스페이스 토픽 만들기:

    az eventgrid namespace topic create -g $resource_group -n $topic --namespace-name $namespace 
    

이벤트 구독 만들기

배달 모드를 로 설정하여 끌어오기 배달을 지원하는 이벤트 구독을 만듭니다. 모든 구성 옵션에 대한 자세한 내용은 최신 Event Grid 컨트롤 플레인 REST API를 참조하세요.

  1. 네임스페이스 토픽에 대한 이벤트 구독의 이름을 저장할 변수를 선언합니다. <your-event-subscription-name>을 원하는 값으로 바꿔 이벤트 구독의 이름을 지정합니다.

    event_subscription="<your-event-subscription-name>"
    
  2. 네임스페이스 토픽에 대한 이벤트 구독을 만들기:

    az eventgrid namespace topic event-subscription create -g $resource_group --topic-name $topic -n $event_subscription --namespace-name $namespace --delivery-configuration "{deliveryMode:Queue,queue:{receiveLockDurationInSeconds:300,maxDeliveryCount:4,eventTimeToLive:P1D}}"
    

토픽에 이벤트 보내기

이제 이 섹션의 단계에 따라 네임스페이스 토픽에 샘플 이벤트를 보냅니다.

네임스페이스 액세스 키 나열

  1. 만든 네임스페이스와 연결된 액세스 키를 가져옵니다. 이 중 하나를 사용하여 이벤트를 게시할 때 인증합니다. 키를 나열하려면 먼저 전체 네임스페이스 리소스 ID가 필요합니다. 다음 명령을 실행하여 가져옵니다.

    namespace_resource_id=$(az eventgrid namespace show -g $resource_group -n $namespace --query "id" --output tsv)
    
  2. 네임스페이스에서 첫 번째 키를 가져옵니다.

    key=$(az eventgrid namespace list-key -g $resource_group --namespace-name $namespace --query "key1" --output tsv)
    

이벤트 게시

  1. 네임스페이스 호스트 이름을 검색합니다. 이벤트를 보낼 네임스페이스 HTTP 엔드포인트를 구성하는 데 사용합니다. 다음 작업은 API 버전 2023-06-01-preview에서 처음 사용할 수 있었습니다.

    publish_operation_uri="https://"$(az eventgrid namespace show -g $resource_group -n $namespace --query "topicsConfiguration.hostname" --output tsv)"/topics/"$topic:publish?api-version=2023-06-01-preview
    
  2. 샘플 CloudEvents 규격 이벤트를 만듭니다.

    event=' { "specversion": "1.0", "id": "'"$RANDOM"'", "type": "com.yourcompany.order.ordercreatedV2", "source" : "/mycontext", "subject": "orders/O-234595", "time": "'`date +%Y-%m-%dT%H:%M:%SZ`'", "datacontenttype" : "application/json", "data":{ "orderId": "O-234595", "url": "https://yourcompany.com/orders/o-234595"}} '
    

    data 요소는 이벤트의 페이로드입니다. 모든 잘 구성된(Well-Formed) JSON은 이 필드에 배치될 수 있습니다. 이벤트에 참가할 수 있는 속성(컨텍스트 특성이라고도 함)에 대한 자세한 내용은 CloudEvents 사양을 참조하세요.

  3. CURL을 사용하여 토픽에 이벤트를 보냅니다. CURL은 HTTP 요청을 보내는 유틸리티입니다.

    curl -X POST -H "Content-Type: application/cloudevents+json" -H "Authorization:SharedAccessKey $key" -d "$event" $publish_operation_uri
    

이벤트 수신

이벤트 구독을 참조하는 엔드포인트를 사용하여 Event Grid에서 이벤트를 받습니다.

  1. 다음 명령을 실행하여 해당 엔드포인트를 작성합니다.

    receive_operation_uri="https://"$(az eventgrid namespace show -g $resource_group -n $namespace --query "topicsConfiguration.hostname" --output tsv)"/topics/"$topic/eventsubscriptions/$event_subscription:receive?api-version=2023-06-01-preview
    
  2. 이벤트를 사용하도록 요청을 제출합니다.

    curl -X POST -H "Content-Type: application/json" -H "Authorization:SharedAccessKey $key" $receive_operation_uri
    

이벤트 승인

이벤트를 수신한 후 처리를 위해 해당 이벤트를 애플리케이션에 배달합니다. 이벤트를 성공적으로 처리한 후에는 더 이상 해당 이벤트가 이벤트 구독에 있을 필요가 없습니다. Event Grid에서 이벤트를 삭제하도록 지시하려면 수신 작업의 응답에서 얻은 잠금 토큰을 사용하여 이를 승인합니다.

  1. 이전 단계에서는 lockToken 속성이 있는 brokerProperties 개체가 포함된 응답을 받았어야 합니다. 잠금 토큰 값을 복사하고 환경 변수에 설정합니다.

    lockToken="<paste-the-lock-token-here>"
    
  2. 이제 승인 받으려는 이벤트에 대한 잠금 토큰을 지정하는 승인 작업 페이로드를 빌드합니다.

    acknowledge_request_payload=' { "lockTokens": ["'$lockToken'"]} '
    
  3. 승인 작업 URI를 사용하여 문자열 빌드를 계속합니다.

    acknowledge_operation_uri="https://"$(az eventgrid namespace show -g $resource_group -n $namespace --query "topicsConfiguration.hostname" --output tsv)"/topics/"$topic/eventsubscriptions/$event_subscription:acknowledge?api-version=2023-06-01-preview
    
  4. 마지막으로, 받은 이벤트를 승인하는 요청을 제출합니다.

    curl -X POST -H "Content-Type: application/json" -H "Authorization:SharedAccessKey $key" -d "$acknowledge_request_payload" $acknowledge_operation_uri
    

    잠금 토큰이 만료되기 전(이벤트 구독을 만들 때 설정된 대로 300초)에 승인 작업이 실행되는 경우 ,다음 예제와 같은 응답이 표시됩니다.

    {"succeededLockTokens":["CiYKJDQ4NjY5MDEyLTk1OTAtNDdENS1BODdCLUYyMDczNTYxNjcyMxISChDZae43pMpE8J8ovYMSQBZS"],"failedLockTokens":[]}
    

다음 단계

끌어오기 배달 모델에 대해 자세히 알아보려면 끌어오기 배달 개요를 참조하세요.