데이터 내보내기 예약

이 페이지에서는 Cloud Firestore 데이터. 일정에 따라 내보내기를 실행하려면 Cloud FunctionsCloud Scheduler 사용

시작하기 전에

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

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

Cloud 함수 및 Cloud Scheduler 작업 만들기

아래 단계를 따라 다음 단계를 따라 Node.js Cloud 함수를 만듭니다. Cloud Firestore 데이터 내보내기 및 Cloud Scheduler 작업 시작 함수를 호출합니다.

Firebase CLI
  1. Firebase CLI를 설치합니다. 새 디렉터리에서 다음을 위한 CLI를 초기화합니다. Cloud Functions:

    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;
      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
Google Cloud Console
Cloud 함수 만들기
  1. Google Cloud 콘솔에서 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.GCP_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);
        });
    };
    드림 위 코드에서 다음을 수정합니다. <ph type="x-smartling-placeholder">
      </ph>
    • 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. Google Cloud 콘솔에서 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 콘솔의 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개에서 Cloud Firestore 데이터베이스에 액세스할 수 없게 됩니다. App Engine 서비스 계정을 사용 중지한 경우 다시 사용 설정할 수 있습니다. 서비스 계정 사용 설정을 참조하세요. 지난 30일 이내에 App Engine 서비스 계정을 삭제한 경우 서비스 계정을 복원하고 서비스 계정 삭제 취소가 가능합니다.

Cloud Scheduler 작업 및 Cloud 함수 테스트

다음 Cloud Scheduler 페이지에서 Cloud Scheduler 작업을 테스트할 수 있습니다. Google Cloud 콘솔

  1. Google Cloud 콘솔에서 Cloud Scheduler 페이지로 이동합니다.
    Cloud Scheduler(으)로 이동

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

    몇 초 후 Cloud Scheduler 작업에서 결과를 업데이트합니다. 열을 성공으로, 최종 실행으로 현재 시간을 설정합니다. 필요한 경우 새로고침을 클릭합니다.

Cloud Scheduler 페이지는 작업이 Cloud 함수입니다. 함수의 로그를 확인하려면 Cloud 함수 페이지를 엽니다.

Cloud 함수 로그 보기

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

Firebase Console

Firebase Console에서 Cloud Functions 페이지로 이동합니다.

함수 로그로 이동

GCP Console

Google Cloud 콘솔에서 Cloud Functions 페이지로 이동합니다.

로그 뷰어로 이동

내보내기 진행률 보기

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

내보내기 작업이 완료되면 버킷 Cloud Storage개:

Cloud Storage 브라우저를 엽니다.