Skip to content

Instantly share code, notes, and snippets.

@TsuyoshiUshio
Last active February 10, 2021 07:56
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save TsuyoshiUshio/b258e20b5a4c21d24200cec222757511 to your computer and use it in GitHub Desktop.
Save TsuyoshiUshio/b258e20b5a4c21d24200cec222757511 to your computer and use it in GitHub Desktop.
Storage migration from Google Cloud Storage to Azure with Async/Await
{
"frameworks": {
"net46":{
"dependencies": {
"Google.Cloud.Storage.V1": "1.0.0-beta05"
}
}
}
}
#r "Microsoft.WindowsAzure.Storage"
using System;
using System.IO;
using Google.Cloud.Storage.V1;
using Microsoft.WindowsAzure.Storage;
using Google.Apis.Auth.OAuth2;
public async static Task Run(string message, TraceWriter log)
{
log.Info($"C# Queue trigger function processed: {message}");
// Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", "D:\\home\\site\\wwwroot\\{YOUR FUNCTION NAME}\\servicecert.json"); // this function is from 1.0.0-beta06
// Google Storage
var credential = GoogleCredential.FromStream(System.IO.File.OpenRead("D:\\home\\site\\wwwroot\\{YOUR FUNCTION NAME}\\servicecert.json"));
var client = StorageClient.Create(credential);
var bucketName = "simpleatest";
// Azure Storage Account
var storageAccount = CloudStorageAccount.Parse("BlobEndpoint={YOUR BLOB SERVICE SAS TOKEN is here}");
var blobClient = storageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference(bucketName);
await container.CreateIfNotExistsAsync();
foreach(var obj in client.ListObjects(bucketName, message))
{
if (IsDirectory(obj.Name))
{
container.GetDirectoryReference(obj.Name);
} else
{
var blockBlob = container.GetBlockBlobReference(obj.Name);
using (var stream = await blockBlob.OpenWriteAsync())
{
await client.DownloadObjectAsync(bucketName, obj.Name, stream);
}
}
log.Info($"{obj.Name}:{obj.ContentType}");
}
}
private static bool IsDirectory(string backetPath)
{
return backetPath.EndsWith("/");
}
@TsuyoshiUshio
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment