소스 Mongo 데이터베이스에서 가져오기

이 페이지에서는 Datastream 스트림을 사용하여 MongoDB 호환 소스 데이터베이스의 콘텐츠를 캡처하고 Cloud Storage 버킷으로 전송하는 마이그레이션 프로세스의 첫 번째 단계를 설명합니다.

스트림의 YAML 구성 파일 만들기

일반적인 명령줄 플래그 외에도 스트림을 만들려면 YAML 형식의 구성 파일 두 개가 필요합니다.

  • mongo_source_config.yaml 파일은 데이터베이스 이름과 같은 마이그레이션할 특정 리소스의 선택을 구성합니다. 호스트 이름, 사용자 이름, 비밀번호와 같은 Mongo 연결 매개변수는 모두 연결 프로필의 속성입니다. 하지만 데이터베이스 (및 해당 데이터베이스 내의 특정 컬렉션)는 스트림의 속성입니다.

  • gcs_dst_config.yaml 파일은 Cloud Storage 내의 데이터 배치를 구성합니다. Cloud Storage 버킷과 버킷 내의 루트 경로는 연결 프로필의 속성입니다. 하지만 데이터 형식과 Cloud Storage 버킷 구조 내의 데이터 배치 방식은 스트림의 속성입니다.

다음 명령어 예시에서는 이러한 파일을 만들고 이전에 설정한 환경 변수의 값으로 파일을 채웁니다. 또는 텍스트 편집기에서 이러한 파일을 만들고 값을 수동으로 대체할 수 있습니다.

echo "$(cat <<EOF
includeObjects:
  databases:
  - database: ${MONGODB_DATABASE_NAME}
EOF
)" > mongo_source_config.yaml

echo "$(cat <<EOF
path: "/${GCS_BUCKET_SUB_PATH}"
avroFileFormat: {}
EOF
)" > gcs_dst_config.yaml

이전 예에서는 이전할 $MONGODB_DATABASE_NAME의 전체 콘텐츠를 구성합니다. 데이터베이스 내의 특정 컬렉션으로 이전을 제한할 수도 있습니다. 예를 들어 userschats 컬렉션만 이전하려면 다음을 사용합니다.

includeObjects:
  databases:
  - database: ${MONGODB_DATABASE_NAME}
    collections:
      - collection: users
      - collection: chats

Datastream 스트림 만들기

그런 다음 소스와 대상을 연결하는 스트림을 만듭니다.

스트림 라벨 json_canonical_mode=true를 사용하면 Datastream이 Infinity 또는 NaN와 같은 비표준 값을 포함하는 MongoDB 문서 이벤트를 올바르게 처리할 수 있습니다.

gcloud datastream streams create "$DATASTREAM_NAME" \
--display-name="$DATASTREAM_NAME" \
--location="$LOCATION" \
--source="$SRC_CONNECTION_PROFILE_NAME" \
--destination="$DST_CONNECTION_PROFILE_NAME" \
--mongodb-source-config=./mongo_source_config.yaml \
--gcs-destination-config=./gcs_dst_config.yaml \
--labels="json_canonical_mode=true" \
--backfill-all

Datastream 스트림 생성 모니터링에 관한 자세한 내용은 문제 해결을 참고하세요.

Datastream 스트림 활성화

마지막으로 새 스트림을 활성화합니다.

스트림이 Mongo 소스에서 데이터를 가져오고 변경사항을 스트리밍하기 시작하면 연결 프로필과 스트림에 구성된 경로 아래 Cloud Storage 버킷에 생성된 새 디렉터리와 파일을 확인할 수 있습니다.

스트림을 활성화하려면 다음 명령어를 실행합니다.

gcloud datastream streams update "$DATASTREAM_NAME" \
--location="$LOCATION" \
--state=RUNNING \
--update-mask=state

다음 단계

대상 데이터베이스에 데이터 쓰기로 진행합니다.