DataStoreをメインで使ってる
redash用のgceサーバーがあり
やるとこ
1. DataStoreのバックアップをGCS(Google Cloud Storage)に保存する
2. GCSのバックアップをBigQueryにロードする
3. gceのサーバーにcron登録する
やったこと
環境が整って入れば以下のスクリプトをcron登録すればOK
#!/usr/bin/env bash
set -e
PROJECT="[プロジェクトID]"
BUCKET="[バケット]"
KINDS=("KIND1" "KIND2")
# kindsをカンマ区切りにする
kinds_str="$(IFS=,; echo "${KINDS[*]}")"
gcloud config set project ${PROJECT}
# 前回のファイルが残っている場合、削除する
gsutil -m rm -rf gs://${BUCKET}
# バックアップ作成
gcloud beta datastore export --kinds="$kinds_str" --format=json gs://${BUCKET}
# インポートする
for x in ${KINDS[@]}
do
echo import ${x}
bq load --project_id=${PROJECT} --headless --source_format=DATASTORE_BACKUP --replace datastore.${x} ${BUCKET}/all_namespaces/kind_${x}/all_namespaces_kind_${x}.export_metadata
done
1つずつ説明
1. DataStoreのバックアップを作成
gcloud beta datastore export --kinds="KIND1, KIND2" --format=json gs://${BUCKET}
--kindを指定しなければ全てのkindを作成する
またすでにexport先にbacketが存在する場合、エラーになるので、実行する前にファイルを削除する
gsutil -m rm -rf gs://${BUCKET}
2. GCSのバックアップをBigQueryにロードする
bq load --project_id=${PROJECT} --headless --source_format=DATASTORE_BACKUP --replace datastore.[table name] ${BUCKET}/all_namespaces/kind_[KIND1]/all_namespaces_kind_[KIND1].export_metadata
--replaceを指定しないと追加される
3. gceのサーバーにcron登録する
デフォルトの権限設定ではdatastoreやBigQueryのアクセス時に権限エラーとなる
Computer Engineではデフォルトでサービスアカウントが追加されている
[PROJECT_NUMBER]-compute@developer.gserviceaccount.com
このアカウントに対して、IAMで権限を付与しても権限エラーは直らない
一度vmを停止してから設定を変更する
$ crontab -e
0 15 * * * /home/username/load_datastore.sh
0 件のコメント:
コメントを投稿