데이터 내보내기 예약
이 페이지에서는 Firestore 데이터 내보내기를 예약하는 방법을 설명합니다. 일정에 따라 내보내기를 실행하려면 Cloud Run Functions 및 Cloud Scheduler를 사용하는 것이 좋습니다.
시작하기 전에
관리형 데이터 내보내기를 예약하려면 먼저 다음 작업을 완료해야 합니다.
- Google Cloud 프로젝트에 결제를 사용 설정합니다. 결제가 사용 설정된 Google Cloud프로젝트에만 내보내기 및 가져오기 기능을 사용할 수 있습니다.
- 내보내기 작업에는 대상 Cloud Storage 버킷이 필요합니다. Firestore 데이터베이스 위치와 가까운 위치에 Cloud Storage 버킷을 만듭니다. 내보내기 작업에는 요청자 지불 버킷을 사용할 수 없습니다.
Cloud 함수 및 Cloud Scheduler 작업 만들기
Firestore 데이터 내보내기를 시작하는 Node.js Cloud 함수와 이 함수를 호출하는 Cloud Scheduler 작업을 만들려면 다음 안내를 따르세요.
Firebase CLI
-
Firebase CLI 설치. 새 디렉터리에서 Cloud Run 함수용 CLI를 초기화합니다.
firebase init functions --project PROJECT_ID
- 언어에 자바스크립트를 선택합니다.
- 원할 경우 ESLint를 사용 설정합니다.
y를 눌러 종속 항목을 설치합니다.
-
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'); }); });
- 위의 코드를 다음과 같이 수정합니다.
BUCKET_NAME을 버킷의 이름으로 바꿉니다.- 여기서
YOUR_PROJECT_ID를 프로젝트 ID로 바꿉니다. every 24 hours를 수정하여 내보내기 일정을 설정합니다. AppEngine cron.yaml 구문 또는 unix-cron 형식(* * * * *)을 사용합니다.-
지정된 컬렉션 그룹만 내보내도록
collectionIds: []를 수정합니다. 컬렉션 그룹을 모두 내보내려면 그대로 두세요.
-
예약된 함수를 배포합니다.
firebase deploy --only functions
Google Cloud 콘솔
Cloud 함수 만들기
-
Google Cloud 콘솔에서 Cloud Functions 페이지로 이동합니다.
- 함수 작성을 클릭합니다.
- 함수 이름을 입력합니다(예:
firestore-export). - 트리거에서 Cloud Pub/Sub를 선택합니다.
- 주제에서 새 주제 만들기를 선택합니다. Pub/Sub 주제의 이름을 입력합니다(예:
initiateFirestoreExport). 주제 이름은 Cloud Scheduler 작업을 만들 때 필요하므로 기록해 둡니다. - 소스 코드에서 인라인 편집기를 선택합니다.
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( YOUR_PROJECT_ID, '(default)' ); return client .exportDocuments({ name: databaseName, outputUriPrefix: bucket, // Leave collectionIds empty to export all collection groups // or define a list of collection group 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: []를 수정합니다. 컬렉션 그룹을 모두 내보내려면 그대로 두세요.
package.json에 다음 종속 항목을 추가합니다.{ "dependencies": { "@google-cloud/firestore": "^1.3.0" } }- 실행할 함수에
index.js에 있는 함수의 이름인scheduledFirestoreExport를 입력합니다. - 만들기를 클릭하여 Cloud 함수를 배포합니다.
Cloud Scheduler 작업 만들기
이제 Cloud 함수를 호출하는 Cloud Scheduler 작업을 만듭니다.
-
Google Cloud 콘솔에서 Cloud Scheduler 페이지로 이동합니다.
- 작업 만들기를 클릭합니다.
- 작업의 이름을 입력합니다(예:
scheduledFirestoreExport). - 빈도를 입력합니다(예:
every 24 hours). - 시간대를 선택합니다.
- 대상에서 Pub/Sub를 선택합니다. 주제 필드에 Cloud 함수와 함께 정의한 Pub/Sub 주제의 이름을 입력합니다(예:
initiateFirestoreExport). - 페이로드 필드에
start export을 입력합니다. 작업에는 정의된 페이로드가 필요하지만 위의 Cloud 함수에서는 이 값을 실제로 사용하지는 않습니다. - 만들기를 클릭합니다.
액세스 권한 구성
다음으로 Cloud 함수에 내보내기 작업을 시작하고 GCS 버킷에 쓸 수 있는 권한을 부여합니다.
이 Cloud 함수는 프로젝트의 기본 서비스 계정을 사용하여 내보내기 작업을 인증하고 승인합니다. 프로젝트를 만들면 다음과 같은 이름의 기본 서비스 계정이 생성됩니다.
PROJECT_ID@appspot.gserviceaccount.com
이 서비스 계정에는 내보내기 작업을 시작하고 Cloud Storage 버킷에 쓸 수 있는 권한이 필요합니다. 이러한 권한을 부여하려면 다음 IAM 역할을 기본 서비스 계정에 할당합니다.
Cloud Datastore Import Export Admin-
버킷에 대한
Owner또는Storage Admin역할
이러한 역할은 gcloud 및 gsutil 명령줄 도구를 사용하여 할당할 수 있습니다.
이 도구를 아직 설치하지 않았으면 Google Cloud 콘솔의 Cloud Shell에서 이 도구에 액세스할 수 있습니다.
Cloud Shell 시작
-
Cloud Datastore 가져오기 내보내기 관리자 역할을 할당합니다. PROJECT_ID를 바꾸고 다음 명령어를 실행합니다.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:PROJECT_ID@appspot.gserviceaccount.com \ --role roles/datastore.importExportAdmin
-
버킷에 대한 스토리지 관리자 역할을 할당합니다. PROJECT_ID 및 BUCKET_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 콘솔의 Cloud Scheduler 페이지에서 Cloud Scheduler 작업을 테스트할 수 있습니다.
Google Cloud 콘솔에서 Cloud Scheduler 페이지로 이동합니다.
Cloud Scheduler로 이동새 Cloud Scheduler 작업의 행에서 지금 실행을 클릭합니다.
몇 초 후 Cloud Scheduler 작업의 결과 열이 성공으로, 최종 실행이 현재 시간으로 업데이트됩니다. 새로고침을 클릭해야 할 수도 있습니다.
Cloud Scheduler 페이지에서는 작업이 Cloud 함수를 호출한 것만 확인할 수 있습니다. 함수의 로그를 확인하려면 Cloud 함수 페이지를 엽니다.
Cloud 함수 로그 보기
Cloud 함수가 내보내기 작업을 성공적으로 시작했는지 확인하려면 함수의 로그를 엽니다.
Firebase Console
Firebase Console에서 호스팅 및 서버리스 > 함수로 이동합니다.
GCP Console
Google Cloud 콘솔에서 Cloud Run 함수 페이지로 이동합니다.
내보내기 진행률 보기
gcloud firestore operations list 명령어를 사용하면 내보내기 작업의 진행률을 볼 수 있습니다. 내보내기 및 가져오기 작업 관리를 참조하세요.
내보내기 작업이 완료된 후에는 Cloud Storage 버킷에서 출력 파일을 볼 수 있습니다.