데이터 내보내기 예약

이 페이지에서는 Firestore 데이터 내보내기를 예약하는 방법을 설명합니다. 일정에 따라 내보내기를 실행하려면 Cloud Functions 및 Cloud Scheduler를 사용하는 것이 좋습니다.

시작하기 전에

관리형 데이터 내보내기를 예약하려면 먼저 다음 작업을 완료해야 합니다.

  1. Google Cloud 프로젝트에 결제를 사용 설정합니다. 결제가 사용 설정된 Google Cloud 프로젝트만 내보내기 및 가져오기 기능을 사용할 수 있습니다.
  2. 내보내기 작업에는 대상 Cloud Storage 버킷이 필요합니다. Firestore 데이터베이스 위치와 가까운 위치에 Cloud Storage 버킷을 만듭니다. 내보내기 작업에는 요청자 지불 버킷을 사용할 수 없습니다.

Cloud 함수 및 Cloud Scheduler 작업 만들기

Firestore 데이터 내보내기를 시작하는 Node.js Cloud 함수와 이 함수를 호출하는 Cloud Scheduler 작업을 만들려면 다음 안내를 따르세요.

Firebase CLI
  1. Firebase CLI를 설치합니다. 새 디렉터리에서 Cloud Functions용 CLI를 초기화합니다.

    firebase init functions --project PROJECT_ID
    1. 언어에 자바스크립트를 선택합니다.
    2. 원할 경우 ESLint를 사용 설정합니다.
    3. y를 눌러 종속 항목을 설치합니다.
  2. functions/index.js 파일의 코드를 다음으로 바꿉니다.

    const functions = require('firebase-functions');
    const firestore = require('@google-cloud/firestore');
    const client = new firestore.v1.FirestoreAdminClient();
    
    // Replace BUCKET_NAME
    const bucket = 'gs://BUCKET_NAME';
    
    exports.scheduledFirestoreExport = functions.pubsub
                                                .schedule('every 24 hours')
                                                .onRun((context) => {
    
      const projectId = process.env.GCP_PROJECT || process.env.GCLOUD_PROJECT;
      const databaseName =
        client.databasePath(projectId, '(default)');
    
      return client.exportDocuments({
        name: databaseName,
        outputUriPrefix: bucket,
        // Leave collectionIds empty to export all collections
        // or set to a list of collection IDs to export,
        // collectionIds: ['users', 'posts']
        collectionIds: []
        })
      .then(responses => {
        const response = responses[0];
        console.log(`Operation Name: ${response['name']}`);
      })
      .catch(err => {
        console.error(err);
        throw new Error('Export operation failed');
      });
    });
    
  3. 위의 코드를 다음과 같이 수정합니다.
    • BUCKET_NAME을 버킷의 이름으로 바꿉니다.
    • every 24 hours를 수정하여 내보내기 일정을 설정합니다. AppEngine cron.yaml 구문 또는 unix-cron 형식(* * * * *)을 사용합니다.
    • 지정된 컬렉션 그룹만 내보내도록 collectionIds: []를 수정합니다. 컬렉션을 모두 내보내려면 그대로 두세요.

  4. 예약된 함수를 배포합니다.

    firebase deploy --only functions
Cloud Console
Cloud 함수 만들기
  1. Cloud Console에서 Cloud Functions 페이지를 엽니다.

    Cloud Functions 페이지 열기

  2. 함수 만들기를 클릭합니다.
  3. 함수 이름을 입력합니다(예: firestoreExport).
  4. 트리거에서 Cloud Pub/Sub를 선택합니다.
  5. 주제에서 새 주제 만들기를 선택합니다. Pub/Sub 주제의 이름을 입력합니다(예: initiateFirestoreExport). 주제 이름은 Cloud Scheduler 작업을 만들 때 필요하므로 기록해 둡니다.
  6. 소스 코드에서 인라인 편집기를 선택합니다. index.js에 다음 코드를 작성합니다.
    const firestore = require('@google-cloud/firestore');
    const client = new firestore.v1.FirestoreAdminClient();
    // Replace BUCKET_NAME
    const bucket = 'gs://BUCKET_NAME'
    
    exports.scheduledFirestoreExport = (event, context) => {
      const databaseName = client.databasePath(
        process.env.GCLOUD_PROJECT,
        '(default)'
      );
    
      return client
        .exportDocuments({
          name: databaseName,
          outputUriPrefix: bucket,
          // Leave collectionIds empty to export all collections
          // or define a list of collection IDs:
          // collectionIds: ['users', 'posts']
          collectionIds: [],
        })
        .then(responses => {
          const response = responses[0];
          console.log(`Operation Name: ${response['name']}`);
          return response;
        })
        .catch(err => {
          console.error(err);
        });
    };
    위의 코드를 다음과 같이 수정합니다.
    • BUCKET_NAME을 버킷의 이름으로 바꿉니다.
    • 지정된 컬렉션 그룹만 내보내도록 collectionIds: []를 수정합니다. 컬렉션을 모두 내보내려면 그대로 두세요.

  7. package.json에 다음 종속 항목을 추가합니다.
    {
      "dependencies": {
        "@google-cloud/firestore": "^1.3.0"
      }
    }
  8. 실행할 함수index.js에 있는 함수의 이름인 scheduledFirestoreExport를 입력합니다.
  9. 만들기를 클릭하여 Cloud 함수를 배포합니다.
Cloud Scheduler 작업 만들기

다음으로 Cloud 함수를 호출하는 Cloud Scheduler 작업을 만듭니다.

  1. Cloud Console에서 Cloud Scheduler 페이지를 엽니다.

    Cloud Scheduler 페이지 열기

  2. 작업 만들기를 클릭합니다.
  3. 작업의 이름을 입력합니다(예: scheduledFirestoreExport).
  4. 빈도를 입력합니다(예: every 24 hours).
  5. 시간대를 선택합니다.
  6. 대상에서 Pub/Sub를 선택합니다. 주제 필드에 Cloud 함수와 함께 정의한 Pub/Sub 주제의 이름을 입력합니다(예: initiateFirestoreExport).
  7. 페이로드 필드에 start export을 입력합니다. 작업에는 정의된 페이로드가 필요하지만 위의 Cloud 함수에서는 이 값을 실제로 사용하지는 않습니다.
  8. 만들기를 클릭합니다.
지금까지 Cloud 함수와 Cloud Scheduler 작업을 배포했습니다. 단, Cloud 함수에는 내보내기 작업을 실행하는 데 필요한 액세스 권한이 있어야 합니다.

액세스 권한 구성

다음으로 Cloud 함수에 내보내기 작업을 시작하고 GCS 버킷에 쓸 수 있는 권한을 부여합니다.

이 Cloud 함수는 프로젝트의 기본 서비스 계정을 사용하여 내보내기 작업을 인증하고 승인합니다. 프로젝트를 만들면 다음과 같은 이름의 기본 서비스 계정이 생성됩니다.

PROJECT_ID@appspot.gserviceaccount.com

이 서비스 계정에는 내보내기 작업을 시작하고 Cloud Storage 버킷에 쓸 수 있는 권한이 필요합니다. 이러한 권한을 부여하려면 다음 IAM 역할을 기본 서비스 계정에 할당합니다.

  • Cloud Datastore Import Export Admin
  • 버킷에 대한 Owner 또는 Storage Admin 역할

이러한 역할은 gcloudgsutil 명령줄 도구를 사용하여 할당할 수 있습니다.

이 도구를 아직 설치하지 않았으면 Google Cloud Console의 Cloud Shell에서 이 도구에 액세스할 수 있습니다.
Cloud Shell 시작

  1. Cloud Datastore 가져오기 내보내기 관리자 역할을 할당합니다. PROJECT_ID를 바꾸고 다음 명령어를 실행합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member serviceAccount:PROJECT_ID@appspot.gserviceaccount.com \
        --role roles/datastore.importExportAdmin
    
  2. 버킷에 대한 스토리지 관리자 역할을 할당합니다. PROJECT_IDBUCKET_NAME을 바꾸고 다음 명령어를 실행합니다.

    gsutil iam ch serviceAccount:PROJECT_ID@appspot.gserviceaccount.com:admin \
        gs://BUCKET_NAME
    

App Engine 기본 서비스 계정을 사용 중지하거나 삭제하면 App Engine 앱은 Firestore 데이터베이스에 대한 액세스 권한을 상실합니다. App Engine 서비스 계정을 사용 중지한 경우 다시 사용 설정할 수 있습니다. 서비스 계정 사용 설정을 참조하세요. 지난 30일 내에 App Engine 서비스 계정을 삭제한 경우, 서비스 계정을 복원할 수 있습니다. 서비스 계정 삭제 취소를 참조하세요.

Cloud Scheduler 작업 및 Cloud 함수 테스트

Google Cloud Console의 Cloud Scheduler 페이지에서 Cloud Scheduler 작업을 테스트합니다.

  1. Cloud Console에서 Cloud Scheduler 페이지를 엽니다.
    Cloud Scheduler 페이지 열기

  2. 새 Cloud Scheduler 작업의 행에서 지금 실행을 클릭합니다.

    몇 초 후 Cloud Scheduler 작업의 결과 열이 성공으로, 최종 실행이 현재 시간으로 업데이트됩니다. 새로고침을 클릭해야 할 수도 있습니다.

작업이 Cloud 함수를 호출했는지 여부는 Cloud Scheduler 페이지에서만 확인됩니다. 함수의 로그를 확인하려면 Cloud 함수 페이지를 엽니다.

Cloud 함수 로그 보기

Cloud 함수가 내보내기 작업을 성공적으로 시작했는지 확인하려면 함수의 로그를 엽니다.

Firebase Console

Firebase Console에서 Cloud Functions 페이지를 엽니다.

함수 로그 페이지 열기

GCP Console

Cloud Console에서 Cloud Functions 페이지를 엽니다.

로그 뷰어 페이지 열기

내보내기 진행률 보기

gcloud firestore operations list 명령어를 사용하면 내보내기 작업의 진행률을 볼 수 있습니다. 내보내기 및 가져오기 작업 관리를 참조하세요.

내보내기 작업이 완료된 후에는 Cloud Storage 버킷에서 결과 파일을 볼 수 있습니다.

Cloud Storage 브라우저 열기