Microsoft Azure を使っていた頃は重要なファイルのバックアップ先に Azure Storage を利用していたが、 最近は Google Cloud Platform で遊んでいるので、Google Cloud Storage を使ってみることにした。 NuGet に公式のクライアントライブラリが存在するので、それを使うと簡単。
手間なのはアクセスファイルキーの入手だけ。 Firestore のときと同様に、 GCP の 「API とサービス」の「認証情報」でサービスアカウントを作成して、 アクセスキーファイルをダウンロードする必要がある。 入手さえしてしまえば、あとはサクッとファイルをアップロードできた。
using Google.Cloud.Storage.V1; using System; using System.IO; using System.Threading.Tasks; namespace CloudStorageSample { class Program { static void Main(string[] args) { if (args.Length == 0) { Console.WriteLine("コマンドライン引数でファイルを指定してください。"); } else { MainAsync(args).GetAwaiter().GetResult(); } Console.WriteLine("Enter で終了します。"); Console.ReadLine(); } static async Task MainAsync(string[] args) { var path = Path.GetFullPath(args[0]); var fileName = Path.GetFileName(path); // API とサービスの認証情報でサービスアカウントを作成し、 // ダウンロードしたアクセスキーファイルのパスを環境変数で指定 Environment.SetEnvironmentVariable( "GOOGLE_APPLICATION_CREDENTIALS", Path.Combine(AppContext.BaseDirectory, "your-access-key.json")); var client = StorageClient.Create(); using (var stream = File.OpenRead(path)) { // 既存のバケットにアップロード var obj = await client.UploadObjectAsync( bucket: "your-bucket-name", objectName: fileName, contentType: "application/octet-stream", source: stream, options: new UploadObjectOptions { // バケットのオーナーだけが管理できるようにする PredefinedAcl = PredefinedObjectAcl.BucketOwnerFullControl, }); Console.WriteLine($"{obj.SelfLink} をアップロードしました。"); } } } }