Cloud Spannerの定期バックアップ
Cloud Scheduler → Cloud Pub/Sub → Cloud Functions
元ネタ
1. pub/sub topicの作成
(ブログのコマンド抜粋)
$ gcloud pubsub topics create cloud-spanner-scheduled-backups
2. バックアップソースコードをcloneする
# HTTPS
$ git clone https://github.com/cloudspannerecosystem/scheduled-backups.git
# SSH
$ git clone git@github.com:cloudspannerecosystem/scheduled-backups.git
3. Cloud Functionsを作成
cloneしたディレクトリに移動し、実行する。
(ブログのコマンド抜粋)
$ gcloud functions deploy SpannerCreateBackup --trigger-topic cloud-spanner-scheduled-backups --runtime go113 --region asia-northeast1
4. Cloud Schedulerの作成
※事前にGAEアプリをasia-northeast1で作成・APIを有効化する(Schedulerは裏でGAEを動かすため)
cloneしたディレクトリの schedule-template.yaml
から schedule.config.yaml
を作成し
以下のようにコードを修正する
例)
プロジェクトID: PROJECT_ID
インスタンス名: test-instance
データベース名: test-db
name: PROJECT_ID
instances:
- name: test-instance
databases:
- name: test-db
schedule: 0 * * * * # 1時間ごと
expire: 6h # バックアップ有効期限
time_zone: Asia/Tokyo
Cloud Schedulerの作成(ブログのコマンド抜粋)
$ go run cmd/scheduler/main.go -config schedule.config.yaml
※ 手元にgoの環境がなければGUIでも作成できます
トピック: cloud-spanner-scheduled-backups
ペイロード: {"backupId":"","database":"projects/[PROJECT_ID]/instances/[INSTANCE_ID]/databases/[DATABASE_ID]", "expire": "6h"}
4. テストする
Cloud Schedulerの「今すぐ実行」ボタンを押下し、実行。
Spannerのバックアップ/復元ページにてバックアップが実行されているか確認する。
GCEから実行する場合
compute Engineデフォルトサービスアカウントを使用する場合は すべての Cloud API に完全アクセス権を許可
がないと権限エラーがでる。
カスタムサービスアカウントを使用するのを推奨。IAMの権限設定だけでよしなにやってくれます。
なお、スコープを指定することはできないです。
参考・メモ
Cloud Functions デプロイドキュメント
Cloud Functions SDKドキュメント
--source=SOURCE
デプロイするソースコードの場所。ソースの場所は、次の3つのオプションのいずれかになります。
・Google Cloud Storageのソースコード(.zipアーカイブである必要があります)
・Cloud Source Repositoriesへの参照
・ローカルファイルシステムパス(関数ソースのルートディレクトリ)
Discussion