あるバケットからファイルを定期的にバックアップして、あるバケットからファイルが削除された場合にいつでも別のバケットから復元できるようにする方法はありますか?
このために検討できるオプションがいくつかあります。
まず、 Storage Transfer Service を使用して転送ジョブを作成できます([ストレージ]> [転送]に移動します)。これは、あるバケットから別のバケットにデータを自動的にバックアップするように構成できます(AWSバケットをGoogle Cloud Storageにバックアップするように構成することもできます)。転送はかなり柔軟なツールであり、とりわけ、ファイルの接頭辞、変更日時、または特定のオブジェクトのURLに基づいて転送するファイルを定義できます。
別のオプションは、gsutil
コマンドを使用して、あるバケットから別のバケットにファイルをコピーまたは同期することです。このプロセスを自動化する場合は、コマンドをインスタンスのcronjobとして追加し、選択した時間/間隔で実行できます。
たとえば、ソースバケットのすべてを宛先バケットにコピーするには、次のようなコマンドを使用できます。
$ gsutil cp -r gs://SOURCE_BUCKET_NAME/* gs://DESTINATION_BUCKET_NAME/
または、-rスイッチを指定したgsutil rsyncを使用して、ソースバケットの内容を宛先バケットと同期させることもできます。例えば:
$ gsutil rsync -r gs://SOURCE_BUCKET_NAME gs://DESTINATION_BUCKET_NAME/
ファイルの削除が気になる場合は、 Cloud Storage Object Versioning を確認してください。この機能が有効になっている場合、バケット内のオブジェクトが上書きまたは削除されると、元のオブジェクトのアーカイブバージョンが作成され、後日必要になったときに元のオブジェクトを取得できます。これにより、オブジェクトが誤って削除されるのを防ぐことができます。
オブジェクトのバージョニングでは、アーカイブされた各オブジェクトがライブオブジェクトのバージョンと同じ容量を使用し、アーカイブストレージとライブストレージの両方に同じ料金が請求されることに注意してください。 Object Lifecyle Management を使用すると、アーカイブされたオブジェクトを管理できます(たとえば、特定の年齢に達したときに自動的に削除されます)。
Cloud SchedulerとCloud Functionsを使用して、自動バックアップ用のcronジョブを設定できます。
Node.jsを使用すると、次のコードのようなファイル名のリストを取得できます。
const [sourceFiles] = await sourceBucket.getFiles({
prefix: 'data/'
});
次に、このコードのようにファイルを別のバケットにコピーします。
let promises = [];
for (let fileName of sourceFileNames) {
const copyFilePromise = sourceBucket.file(fileName).copy(destBucket.file(`${dateStr}/${fileName}`));
promises.Push(copyFilePromise);
}
await Promise.all(promises);
自動バックアップソリューション全体のセットアップ方法についてもブログを書いています。 https://medium.com/@anthonychiu/backup-cloud-storage-data-with-cloud-functions-77ee01f4ec02