🔧

Cloud Spannerの定期バックアップ

2021/03/26に公開

Cloud Scheduler → Cloud Pub/Sub → Cloud Functions

元ネタ

https://medium.com/google-cloud/create-cloud-spanner-scheduled-backups-c6f30551a6fd

1. pub/sub topicの作成

(ブログのコマンド抜粋)

bash
$ gcloud pubsub topics create cloud-spanner-scheduled-backups

2. バックアップソースコードをcloneする

https://github.com/cloudspannerecosystem/scheduled-backups

bash
# HTTPS
$ git clone https://github.com/cloudspannerecosystem/scheduled-backups.git

# SSH
$ git clone git@github.com:cloudspannerecosystem/scheduled-backups.git

3. Cloud Functionsを作成

cloneしたディレクトリに移動し、実行する。
(ブログのコマンド抜粋)

bash
$ 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

schedule.config.yaml
name: PROJECT_ID
instances:
  - name: test-instance
    databases:
      - name: test-db
        schedule: 0 * * * * # 1時間ごと
        expire: 6h # バックアップ有効期限
        time_zone: Asia/Tokyo

Cloud Schedulerの作成(ブログのコマンド抜粋)

bash
$ 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 デプロイドキュメント

https://cloud.google.com/functions/docs/deploying/filesystem?hl=ja

Cloud Functions SDKドキュメント

https://cloud.google.com/sdk/gcloud/reference/functions/deploy?hl=ja#--source

--source=SOURCE
デプロイするソースコードの場所。ソースの場所は、次の3つのオプションのいずれかになります。

・Google Cloud Storageのソースコード(.zipアーカイブである必要があります)
・Cloud Source Repositoriesへの参照
・ローカルファイルシステムパス(関数ソースのルートディレクトリ)

Discussion