이 문서에서는 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 대기열을 만듭니다.
- Azure 포털에서 Azure 스토리지 계정으로 이동합니다.
- 왼쪽 탐색 메뉴의 데이터 스토리지에서 대기열을 선택합니다.
- + 대기열을 클릭하여 새 대기열을 만듭니다.
- 대기열의 이름을 입력합니다 (예:
transfer-notifications)를 선택하고 확인을 클릭합니다. - 생성되면 Azure Queue의 주소를 가져옵니다. 주소는 일반적으로
AZURE_STORAGE_ACCOUNT_NAME.queue.core.windows.net/AZURE_QUEUE_NAME형식입니다.
Azure Queue에 Azure Blob Storage 이벤트 알림 사용 설정
Blob Storage 이벤트 알림을 생성한 Azure 큐로 전송하도록 Azure Event Grid를 구성합니다.
- Azure 포털에서 모니터링할 Blob Storage 컨테이너가 포함된 스토리지 계정으로 이동합니다.
- 왼쪽 탐색 메뉴의 Blob 서비스에서 이벤트를 선택합니다.
- + 이벤트 구독을 클릭합니다.
이벤트 구독을 구성합니다.
- 이벤트 구독 세부정보:
- 이벤트 구독 이름을 입력합니다 (예:
blob-transfer-events))를 제공합니다. - 시스템 주제 이름을 입력합니다 (예:
my-blob-events-topic))를 제공합니다.
- 이벤트 구독 이름을 입력합니다 (예:
- 이벤트 유형:
- 다음 이벤트 유형을 선택합니다.
- Blob 생성됨
- 디렉터리가 생성됨
- Blob 이름이 변경됨
- 디렉터리 이름이 변경됨
- Blob 등급 변경됨
- 다음 이벤트 유형을 선택합니다.
- 엔드포인트 세부정보:
- 엔드포인트 유형: 스토리지 대기열을 선택합니다.
- 엔드포인트 선택을 클릭한 다음 이전에 만든 Azure 대기열을 선택합니다.
필터:
- 제목 필터링 사용 설정을 클릭합니다.
다음과 같이 제목이 다음으로 시작 필터를 추가하여 알림을 특정 컨테이너로 제한합니다.
/blobServices/default/containers/AZURE_CONTAINER_NAME/AZURE_CONTAINER_NAME을 blob 스토리지 컨테이너 이름으로 바꿉니다.
(선택사항) 컨테이너 내에서 특정 접두사가 있는 블롭의 이벤트를 필터링하려면 다음을 사용하세요.
/blobServices/default/containers/AZURE_CONTAINER_NAME/blobs/BLOB_PREFIX
- 이벤트 구독 세부정보:
만들기를 클릭합니다.
Azure 대기열에 대한 액세스 설정
Storage Transfer Service는 Azure 대기열에 액세스하고 메시지를 읽을 수 있는 권한이 필요합니다. 공유 액세스 서명(SAS) 토큰 또는 제휴 ID를 사용하여 인증할 수 있습니다.
SAS 토큰
SAS 토큰으로 인증 안내를 따르고 다음 항목을 포함합니다.
- 허용된 서비스: Blob 및 Queue
- 허용된 권한: 읽기, 나열, 처리
제휴 ID
제휴 ID로 인증 안내를 따르세요. 애플리케이션에 Azure Storage 컨테이너에 대한 액세스 권한을 부여하는 것 외에도 Azure 대기열에 대한 액세스 권한도 부여해야 합니다. 이렇게 하려면 Azure 대기열의 애플리케이션에 스토리지 대기열 데이터 메시지 프로세서 역할을 추가하세요.
이벤트 스트림으로 전송 작업 만들기
Azure 대기열 및 이벤트 알림을 구성한 후 이벤트 스트림을 사용하여 Storage Transfer Service 작업을 만듭니다.
생성된 후에는 전송 작업이 시작되고 이벤트 리스너가 Azure 큐에서 알림을 기다립니다. 작업 세부정보 페이지에는 시간당 하나의 작업이 표시되며 각 작업에 전송되는 데이터에 대한 세부정보가 포함됩니다.
Google Cloud 콘솔
Google Cloud 콘솔에서 전송 작업 만들기 페이지로 이동합니다.
소스 유형으로 Azure Blob Storage 또는 Data Lake Storage Gen2를 선택합니다.
대상 유형으로 Google Cloud Storage를 선택합니다.
예약 모드에서 이벤트 기반을 선택합니다.
이벤트 스트림 이름 필드에 Azure 대기열의 주소를 입력합니다.
소스 및 대상 세부정보, 인증 등 전송 작업을 만드는 일반적인 단계를 완료합니다.
원하는 경우 전송 시작 시간과 종료 시간을 입력합니다. 시간을 지정하지 않으면 전송이 즉시 시작되고 수동으로 중지될 때까지 실행됩니다.
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_NAME 및 AZURE_CONTAINER_NAME: Azure Blob Storage 계정 이름 및 컨테이너 이름
- DESTINATION_BUCKET: 대상 Cloud Storage 버킷
- SOURCE_CREDS_FILE: SAS 토큰 또는 제휴 ID 구성이 포함된 머신의 로컬 파일의 상대 경로입니다.
- AZURE_QUEUE_NAME: Azure Queue의 이름입니다.
- EVENT_STREAM_STARTS: %Y-%m-%dT%H:%M:%S%z 날짜/시간 형식을 사용하여 이벤트 수신을 시작할 시간입니다 (예:
2020-04-12T06:42:12+04:00). 설정하지 않으면 create job 명령어가 성공적으로 제출된 후 작업이 실행되고 이벤트를 리슨합니다. - EVENT_STREAM_EXPIRES: 이벤트 리스닝을 중지할 시점입니다. 설정하지 않으면 작업을 수동으로 중지할 때까지 계속됩니다.
지원되는 필드의 전체 목록은 gcloud transfer jobs create 참조를 확인하세요.
REST API
TransferJob proto를 사용하여 이벤트 기반 전송 작업을 정의합니다.
{
"description": "Test Azure to GCS transfer via event stream.",
"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형식). 지정하지 않으면 전송 작업을 사용 중지하거나 삭제할 때까지 리스너가 계속됩니다.