Azure Blob Storage 또는 Data Lake Storage Gen2의 이벤트 기반 전송

이 문서에서는 Storage Transfer Service를 사용하여 Azure Blob Storage 또는 Data Lake Storage Gen2에서 Cloud Storage로 이벤트 기반 데이터 전송을 구성하는 방법을 설명합니다. 이벤트 기반 전송은 새 객체와 업데이트된 객체를 Azure 컨테이너에서 Cloud Storage로 자동으로 전송합니다. 객체 삭제는 감지되지 않습니다. 소스에서 객체를 삭제해도 대상 버킷에 있는 연결된 객체는 삭제되지 않습니다.

이벤트 기반 전송은 Azure Event Grid 및 Azure Storage Queues를 사용하여 Azure 컨테이너의 변경사항을 Storage Transfer Service에 알립니다. 소스 컨테이너에서 새 Blob 생성과 같은 이벤트가 발생하면 Azure Event Grid는 구성된 Azure Storage Queue로 알림을 보냅니다. Storage Transfer Service는 이 큐를 지속적으로 모니터링하고 수신된 이벤트를 기반으로 전송을 시작합니다.

시작하기 전에

안내에 따라 대상 Cloud Storage 버킷에 필요한 권한을 부여합니다.

Azure Storage 큐 만들기

Azure Event Grid에서 알림을 수신할 Azure Storage 큐를 만듭니다.

  1. Azure Portal에서 Azure Storage 계정으로 이동합니다.
  2. 왼쪽 탐색 메뉴의 데이터 스토리지에서 를 선택합니다.
  3. + 큐 를 클릭하여 새 큐를 만듭니다.
  4. 큐 이름을 제공하고 (예: transfer-notifications) 확인 을 클릭합니다.
  5. 생성되면 Azure 큐의 주소를 가져옵니다. 주소는 일반적으로 형식입니다: AZURE_STORAGE_ACCOUNT_NAME.queue.core.windows.net/AZURE_QUEUE_NAME.

Azure 큐에 Azure Blob Storage 이벤트 알림 사용 설정

Blob Storage 이벤트 알림을 만든 Azure 큐로 보내도록 Azure Event Grid를 구성합니다.

  1. Azure Portal에서 모니터링할 Blob Storage 컨테이너가 포함된 스토리지 계정으로 이동합니다.
  2. 왼쪽 탐색 메뉴의 Blob 서비스에서 이벤트를 선택합니다.
  3. + 이벤트 구독 을 클릭합니다.
  4. 이벤트 구독을 구성합니다.

    • 이벤트 구독 세부정보:
      • 이벤트 구독 이름 을 제공합니다 (예: blob-transfer-events).
      • 시스템 주제 이름 을 제공합니다 (예: my-blob-events-topic).
    • 이벤트 유형:
      • 다음 이벤트 유형을 선택합니다.
        • Blob 생성됨
        • 디렉터리가 생성됨
        • Blob 이름 변경됨
        • 디렉터리 이름 변경됨
        • Blob 등급 변경됨
    • 엔드포인트 세부정보:
      • 엔드포인트 유형: 스토리지 큐를 선택합니다.
      • **엔드포인트 선택** 을 클릭한 후 이전에 만든 Azure 큐를 선택합니다.
    • 필터:

      • 주제 필터링 사용 설정 을 클릭합니다.
      • 알림을 특정 컨테이너로 제한하려면 다음을 주제가 다음으로 시작함 필터로 추가합니다.

        /blobServices/default/containers/AZURE_CONTAINER_NAME/

        AZURE_CONTAINER_NAME을 Blob Storage 컨테이너 이름으로 바꿉니다.

      • (선택사항) 컨테이너 내에서 특정 접두어가 있는 Blob의 이벤트를 필터링하려면 다음을 사용합니다.

        /blobServices/default/containers/AZURE_CONTAINER_NAME/blobs/BLOB_PREFIX

  5. 만들기 를 클릭합니다.

Azure 큐에 대한 액세스 설정

Storage Transfer Service는 Azure 큐에 액세스하고 메시지를 읽을 수 있는 권한이 필요합니다. 공유 액세스 서명(SAS) 토큰 또는 제휴 ID를 사용하여 인증할 수 있습니다.

SAS 토큰

SAS 토큰으로 인증하는 안내를 따르고 다음 항목을 포함합니다.

  • 허용된 서비스: Blob 및 큐
  • 허용된 권한: 읽기, 나열, 처리

제휴 ID

제휴 ID로 인증하는 안내를 따릅니다. 애플리케이션에 Azure Storage 컨테이너에 대한 액세스 권한을 부여하는 것 외에도 Azure 큐에 대한 액세스 권한도 부여해야 합니다. 이렇게 하려면 Azure 큐의 애플리케이션에 스토리지 큐 데이터 메시지 프로세서 역할을 추가합니다.

이벤트 스트림으로 전송 작업 만들기

Azure 큐 및 이벤트 알림이 구성되면 이벤트 스트림으로 Storage Transfer Service 작업을 만듭니다.

생성된 후에는 전송 작업이 시작되고 이벤트 리스너가 Azure 큐에서 알림을 기다립니다. 작업 세부정보 페이지에는 시간당 하나의 작업이 표시되며 각 작업에 전송되는 데이터에 대한 세부정보가 포함됩니다.

Google Cloud 콘솔

  1. 콘솔에서 전송 작업 만들기 페이지로 이동합니다. Google Cloud

    전송 작업 만들기 로 이동

  2. 소스 유형에서 Azure Blob Storage 또는 Data Lake Storage Gen2를 선택합니다.

  3. **대상 유형** 에서 **Google Cloud Storage** 를 선택합니다.

  4. 예약 모드에서 이벤트 기반을 선택합니다.

  5. 이벤트 스트림 이름 필드에 Azure 큐의 주소를 입력합니다.

  6. 소스 및 대상 세부정보, 인증을 비롯하여 전송 작업을 만드는 나머지 단계를 정상적으로 완료합니다.

    원하는 경우 전송 시작 시간과 종료 시간을 입력합니다. 시간을 지정하지 않으면 전송이 즉시 시작되고 수동으로 중지될 때까지 실행됩니다.

Google Cloud CLI

gcloud CLI를 사용하여 이벤트 기반 전송 작업을 만들려면 --event-stream-name 플래그와 함께 gcloud transfer jobs create 명령어를 사용합니다.

gcloud transfer jobs create \
  https://AZURE_STORAGE_ACCOUNT_NAME.blob.core.windows.net/AZURE_CONTAINER_NAME \
  gs://DESTINATION_BUCKET \
  --source-creds-file=SOURCE_CREDS_FILE \
  --event-stream-name=AZURE_STORAGE_ACCOUNT_NAME.queue.core.windows.net/AZURE_QUEUE_NAME \
  --event-stream-starts=EVENT_STREAM_STARTS \
  --event-stream-expires=EVENT_STREAM_EXPIRES

자리표시자를 실제 값으로 바꿉니다.

  • AZURE_STORAGE_ACCOUNT_NAMEAZURE_CONTAINER_NAME: Azure Blob Storage 계정 이름 및 컨테이너 이름입니다.
  • DESTINATION_BUCKET: 대상 Cloud Storage 버킷입니다.
  • SOURCE_CREDS_FILE: SAS 토큰 또는 제휴 ID 구성이 포함된 머신의 로컬 파일의 상대 경로입니다.
  • AZURE_QUEUE_NAME: Azure 큐의 이름입니다 (예: my-queue).
  • EVENT_STREAM_STARTS: %Y-%m-%dT%H:%M:%S%z 날짜/시간 형식을 사용하여 이벤트를 리슨하기 시작할 시간입니다 (예: 2020-04-12T06:42:12+04:00). 설정하지 않으면 작업이 시작되고 작업 만들기 명령어가 제출되면 이벤트를 리슨합니다.
  • EVENT_STREAM_EXPIRES: 이벤트를 리슨하는 것을 중지할 시간입니다. 설정하지 않으면 작업이 수동으로 중지될 때까지 계속됩니다.

지원되는 필드의 전체 목록은 gcloud transfer jobs create 참조를 확인하세요.

REST API

TransferJob 프로토콜을 사용하여 이벤트 기반 전송 작업을 정의합니다.

{
  "description": "Event-driven Azure to Cloud Storage transfer",
  "project_id": "PROJECT_ID",
  "transfer_spec": {
    "azure_blob_storage_data_source": {
      "storage_account": "AZURE_STORAGE_ACCOUNT_NAME",
      "container": "AZURE_CONTAINER_NAME",
      "federated_identity_config": {
        "client_id": "CLIENT_ID",
        "tenant_id": "TENANT_ID"
      }
    },
    "gcs_data_sink": {
      "bucket_name": "DESTINATION_BUCKET"
    },
    "object_conditions": {
      // optional object conditions (include_prefixes, etc)
    },
    "transfer_options": {}
  },
  "event_stream": {
    "name": "AZURE_STORAGE_ACCOUNT_NAME.queue.core.windows.net/AZURE_QUEUE_NAME",
    "event_stream_start_time": EVENT_STREAM_START_TIME,
    "event_stream_expiration_time": EVENT_STREAM_EXPIRATION_TIME
  },
  "status": "ENABLED"
}

시작 시간 및 만료 시간 필드는 선택사항입니다.

  • event_stream_start_time: YYYY-MM-DDTHH:MM:SSZ 형식으로 이벤트를 리슨하기 시작할 시간입니다. 지정하지 않으면 리스너가 즉시 시작됩니다.
  • event_stream_expiration_time: YYYY-MM-DDTHH:MM:SSZ 형식으로 이벤트 스트림 리스너가 만료되는 시간입니다. 지정하지 않으면 전송 작업이 사용 중지되거나 삭제될 때까지 리스너가 계속됩니다.