views4GCPのストレージサービスについてまとめてみた。Exp:2961最近はGolangをよく触っています。cronを用いて行う方法を紹介いたします。デフォルトサービスアカウントの役割追加プロジェクト作成エンドポイント実装cronの設定cronジョブのデプロイcronジョブの確認BackupのローテーションBigQueryへのインポートまとめFirestoreとはGCPが提供するフルマネジドなNoSQLサービスです。モード)について扱っていきます。モード)のことをDatastoreと呼ぶことにします。Datastoreの作成方法Firestoreの利用開始時に下記のようにどちらを作成するか、選択できるようになっています。作成時にはDatastoreのリージョンを選択します。Engineを作成すると同じリージョンで旧Datastoreが裏側で作成されますが、その場合でもDatastoreのコンソールより、FirestoreにUpgradeすることが可能です。Datastoreにまだ一度もデータを挿入していないことが条件となります。DatastoreのExport機能についてDatastoreにはEntityのExport/Import機能が用意されています。今回は既に用意されているこの機能を使用し、Datastoreの日次Backupを取得していきます。Bucket作成DatastoreのEntityをExportする為のGCSのBucketを作成します。BucketのリージョンはDatastore作成時に決定したリージョンと合わせる必要があります。ナビゲーションメニューより、Storageを開き、「バケットを作成」をクリックします。任意のBucket名を付け、場所はDatastoreのリージョンと合わせるようにし、作成をクリックします。Backupジョブ作成Backupを行うジョブを作成していきます。今回紹介するのは下記の二種類です。cronサービスアカウントの準備DatastoreのEntityをGCSへExportする必要がある為、下記の2つの権限を付けたサービスアカウントを用意します。Datastoreインポート/エクスポート管理者GCSオブジェクト作成者インスタンス作成GCEではデフォルトのサービスアカウントを指定できるので、前の手順で作成したサービスアカウントを指定します。プロダクトというものがあり、制限内であればトライアル期間等関係なく、無料で利用できるサービスというものが存在します。GCEでは特定リージョンのf1-microというマシンタイプが無料で使用できます。Bucketについては、Datastoreと同リージョンにしなければならない制限がありましたが、GCEで行うのはgcloudコマンドの定期実行だけなので、GCEインスタンス自身のリージョンについてはDatastoreと合わせる必要はありません。今回は下記のように作成します。cronの設定cronの設定を行う前に、デフォルトのGCEインスタンスのTimeZoneを変更しておきます。デフォルトはUTCになっており、そのままでも問題なくcronは動きますが、設定ミスを防ぐ為にJSTに変更しておくのがよいかと思います。設定方法については下記が参考になります。メインOS全まとめ下記cronの設定です。gs://${Bucket}下記のようにKindを指定しないExportもできますが、後述するBigQueryへのインポートにはKind毎にExportしておく必要があります。gs://${Bucket}スケジュール後に指定したGCSのBucketにBackupがExportされていればOKです。cronを利用する場合は、gcloudコマンドを直接実行する術が無い為、Export用のエンドポイントを実装してやる必要があります。GAEは複数の言語に対応していますが、最近個人的にGo言語をよく触っているので、こちらを使用してやってみたいと思います。Clientを使用し、DatastoreのExport用のAPIにRequestを投げる形で実装をします。cronの実行はGAEのデフォルトのサービスアカウントで行われます。cronでExportを実行する際には、GCEで設定したサービスアカウントと同様権限を追加してやる必要があります。GAEのデフォルトサービスアカウントは${PROJECT_ID}@appspot.gserviceaccount.comなので、このアカウントに下記の権限を追加します。Datastoreインポート/エクスポート管理者GCSオブジェクト作成者プロジェクト作成まずは個人的な備忘録も兼ねて、GO1.11からのModulesに慣れていないのでプロジェクト作成からやります。github.com/cloud-ace/gae-go-datastore-backup-exampleプロジェクトを作成したら、GAEに必要なファイルを配置していきます。GoのQuickStartで使用されているサンプルコードを利用します。今回はmain.goに下記のように実装をしました。GCPの認証についてはこちらのパッケージを利用しています。Bucketの指定、Kindの指定はQueryパラメータから受け取るようにしています。cronの設定はcron.yamlという設定ファイルを使用して行います。ジョブの実行日時とTimeZoneを指定しています。Asia/Tokyoスケジュール後に指定したGCSのBucketにBackupがExportされていればOKです。cronジョブのデプロイcronジョブのデプロイはcron.yamlを指定してデプロイします。cron.yamlcronジョブの確認またGAEにデプロイされているcronジョブは、GCPコンソール上から確認ができます。現状のcronジョブ一覧が表示されます。ジョブの一覧が確認できるだけではなく、スケジューリングされた日時以外にもcronジョブを手動実行することも可能です。Backupのローテーション上記までで、DatastoreのEntityのBackupはされるようになりましたが、このままではGCS内に延々とBackupファイルが増え続けていってしまいます。不要なBackupファイルでGCS料金が嵩んでしまってはもったいないので、必要な分だけBackupファイルを取っておくように設定してみましょう。Bucketのライフサイクル機能を使用します。ルールを追加」をクリックします。オブジェクト条件の選択で「年齢」をチェックし、任意の日数を設定、アクションを選択するで「削除」をチェックし、ルールを保存します。Bucketを一覧から確認し、「ライフサイクル列」が有効になっていることを確認します。ライフサイクル設定後は、設定した日数以前のBackupファイルが消えていることを確認してみてください。公式ドキュメントBigQueryへのインポートDatastoreのデータをSQLを使って柔軟に解析をしたい等の用途でBigQueryにDatastoreBackupのインポートができます。BigQueryはデフォルトでDatastoreのExportデータに対応しており、そのままインポートすることが可能です。DatastoreのBackupはKind毎に別れている必要があります。BigQueryへのインポートは下記の手順で行えます。ナビゲーションメニューより、「BigQuery」をクリックして、BigQueryUIまで移動します。左メニューからプロジェクト名を選択し、「データセットを作成」をクリックします。任意のID、ロケーションを選択し、データセットを作成します。作成したデータセットを選択し、「テーブルを作成」をクリックします。バックアップ」を指定し、テーブルを作成します。指定したデータセット配下にテーブルが作成され、データがインポートされていればOKです。まとめいかがでしたでしょうか。弊社のGitHubに置いてありますので、ご参考にして頂ければ幸いです。ご意見・ご感想お待ちしております。