다음을 통해 공유


네임스페이스 토픽을 사용하여 Azure Event Hubs에 이벤트 전달 - Azure CLI

이 문서에서는 CloudEvents JSON 형식 으로 Azure Event Grid에 이벤트를 게시하고 푸시 배달 모델을 사용하여 해당 이벤트를 배달하는 단계별 지침을 제공합니다. 구체적으로 말하면 Azure CLI 및 Curl을 사용하여 Event Grid의 네임스페이스 토픽에 이벤트를 게시하고 이벤트 구독에서 Event Hubs 처리기 대상으로 해당 이벤트를 푸시합니다. 푸시 배달 모델에 대한 자세한 내용은 푸시 배달 개요를 참조하세요.

비고

Azure CLI Event Grid 확장 은 네임스페이스 및 네임스페이스에 포함된 리소스를 아직 지원하지 않습니다. Azure CLI 리소스를 사용하여 Event Grid 리소스를 만듭니다.

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

필수 조건

Event Grid 리소스 공급자 사용

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

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

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

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

리소스 그룹 만들기

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>"
    
    ___location="<your-resource-group-___location>"
    
  2. 리소스 그룹을 만듭니다. 원하는 대로 위치를 변경합니다.

    az group create --name $resource_group --___location $___location
    

네임스페이스 만들기

Event Grid 네임스페이스는 이벤트를 게시하는 사용자 정의 엔드포인트를 제공합니다. 다음 예제에서는 Azure Cloud Shell에서 Bash를 사용하여 리소스 그룹에 네임스페이스를 만듭니다. 네임스페이스 이름은 DNS(도메인 이름 시스템) 항목의 일부이므로 고유해야 합니다. 네임스페이스 이름은 다음 규칙을 충족해야 합니다.

  • 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 $___location
    

네임스페이스 토픽 만들기

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

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

    topic="<your-topic-name>"
    
  2. 네임스페이스 토픽을 만듭니다.

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

새 Event Hubs 리소스 만들기

네임스페이스 토픽 푸시 배달 구독의 처리기 대상으로 사용되는 Event Hubs 리소스를 만듭니다.

  1. Event Hubs 네임스페이스 이름을 보유할 변수를 선언합니다.

    eventHubsNamespace="<your-event-hubs-namespace-name>"
    
  2. Event Hubs 네임스페이스를 만듭니다.

    az eventhubs namespace create --resource-group $resource_group --name $eventHubsNamespace --___location $___location  
    
  3. 이벤트 허브 이름을 보유할 변수를 선언합니다.

    eventHubsEventHub="<your-event-hub-name>"
    
  4. 다음 명령을 실행하여 네임스페이스에 이벤트 허브를 만듭니다.

    az eventhubs eventhub create --resource-group $resource_group --namespace-name $eventHubsNamespace --name $eventHubsEventHub 
    

관리 ID를 사용하여 Event Hubs에 이벤트 제공

관리 ID를 사용하여 Event Hubs 네임스페이스의 이벤트 허브에 이벤트를 제공하려면 다음 단계를 따릅니다.

  1. 시스템 할당 또는 사용자 할당 관리 ID인 네임스페이스를 사용하도록 설정합니다. 다음 섹션을 계속 읽어 Azure CLI를 사용하여 관리 ID를 사용하도록 설정하는 방법을 찾습니다.
  2. Event Hubs 네임스페이스의 Azure Event Hubs 데이터 발신자 역할에 ID를 추가하고, 역할 할당을 추가하는 방법을 다음 섹션에서 확인하세요.
  3. Event Hubs 네임스페이스에서 신뢰할 수 있는 Microsoft 서비스에서 이 방화벽을 우회하도록 허용 설정을 사용으로 설정합니다.
  4. 이벤트 허브를 엔드포인트로 사용하여 시스템 할당 또는 사용자 할당 관리 ID를 사용하는 이벤트 구독을 구성합니다.

Event Grid 네임스페이스에서 관리 ID 사용

Event Grid 네임스페이스에서 시스템 할당 관리 ID를 사용하도록 설정합니다.

az eventgrid namespace update --resource-group $resource_group --name $namespace --identity {type:systemassigned}

Event Grid 관리 ID에 대한 Event Hubs에 역할 할당 추가

  1. Event Grid 네임스페이스 시스템 관리 ID 보안 주체 ID를 가져옵니다.

    principalId=$(az eventgrid namespace show --resource-group $resource_group --name $namespace --query identity.principalId -o tsv)
    
  2. Event Hubs 이벤트 허브 리소스 ID를 가져옵니다.

    eventHubResourceId=$(az eventhubs eventhub show --resource-group $resource_group --namespace-name $eventHubsNamespace --name $eventHubsEventHub --query id -o tsv)
    
  3. Event Grid 시스템 관리 ID에 대한 역할 할당을 Event Hubs에 추가합니다.

    az role assignment create --role "Azure Event Hubs Data Sender" --assignee $principalId --scope $eventHubResourceId
    

이벤트 구독 만들기

새 푸시 배달 이벤트 구독을 만듭니다.

event_subscription="<your_event_subscription_name>"
az resource create --api-version 2023-06-01-preview --resource-group $resource_group --namespace Microsoft.EventGrid --resource-type eventsubscriptions --name $event_subscription --parent namespaces/$namespace/topics/$topic --___location $___location --properties "{\"deliveryConfiguration\":{\"deliveryMode\":\"Push\",\"push\":{\"maxDeliveryCount\":10,\"deliveryWithResourceIdentity\":{\"identity\":{\"type\":\"SystemAssigned\"},\"destination\":{\"endpointType\":\"EventHub\",\"properties\":{\"resourceId\":\"$eventHubResourceId\"}}}}}}"

토픽에 이벤트 보내기

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

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

  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
    

    Azure Portal에서 Event Hubs 네임스페이스 페이지로 이동하여 페이지를 새로 고치고 차트의 들어오는 메시지 카운터가 이벤트가 수신되었음을 나타내는지 확인합니다.

    이벤트가 수신되었음을 보여 주는 차트가 있는 이벤트 허브 페이지를 보여 주는 스크린샷.

다음 단계

이 문서에서는 Event Grid 네임스페이스 및 Event Hubs 리소스를 만들고 구성했습니다. 이벤트 허브에서 이벤트를 수신하는 단계별 지침은 다음 자습서를 참조하세요.