Скопируйте из BLOB-объекта Azure в AWS S3 с помощью C#
Обратите внимание, что я впервые делаю что-то в C#, поэтому, пожалуйста, будьте добры, возможно, я допустил некоторые очень элементарные ошибки. (и да, я знаю, что не должен жестко кодировать ключи, но исправлю это, когда код сделает то, что я хочу).
Я пытаюсь создать функцию Azure, которая копирует любые новые элементы из хранилища BLOB-объектов в AWS S3. Мне удалось скопировать из blob в blob, используя код из этой статьи: https://cmatskas.com/copy-azure-blob-data-between-storage-accounts-using-functions/
Я попытался изменить этот код, чтобы вместо этого сохранить в корзину AWS S3. Хотя этот код успешно компилируется и дает мне успешный вход в систему, он не копирует файлы. Есть идеи?
using System;
using System.IO;
using Amazon.S3;
using Amazon.S3.Model;
using Amazon.S3.Transfer;
using Microsoft.Azure;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
public async static void Run(CloudBlockBlob myBlob, TraceWriter log)
{
await CopyBlob(myBlob, log);
}
private async static Task CopyBlob(CloudBlockBlob myBlob, TraceWriter log)
{
var existingBucketName = "bucketname";
var keyName = "backup";
var accessKey = "key";
var secretKey = "secretkey";
TransferUtility fileTransferUtility = new TransferUtility(new AmazonS3Client(accessKey,secretKey,Amazon.RegionEndpoint.eu-west-2));
log.Info("Starting Copy");
try{
using (var stream = await myBlob.OpenReadAsync())
{
await fileTransferUtility.UploadAsync(stream, existingBucketName, keyName);
}
log.Info("Copy completed");
}
catch(Exception ex){
log.Error(ex.Message);
log.Info("Copy failed");
}
finally{
log.Info("Operation completed");
}
}
Изменить: Получил работу для всех, кто найдет это в будущем.
using System;
using System.IO;
using Amazon.S3;
using Amazon.S3.Model;
using Amazon.S3.Transfer;
using Microsoft.Azure;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
public async static void Run(CloudBlockBlob myBlob, TraceWriter log)
{
await CopyBlob(myBlob, log);
}
private async static Task CopyBlob(CloudBlockBlob myBlob, TraceWriter log)
{
var existingBucketName = "bucketname";
var keyName = myBlob.Name;
var accessKey = "accesskey";
var secretKey = "secretkey";
TransferUtility fileTransferUtility = new TransferUtility(new AmazonS3Client(accessKey,secretKey,Amazon.RegionEndpoint.eu-west-2));
log.Info("Starting Copy");
try{
using (var stream = await myBlob.OpenReadAsync())
{
await fileTransferUtility.UploadAsync(stream,existingBucketName,keyName);
}
log.Info("Copy completed");
}
catch(Exception ex){
log.Error(ex.Message);
log.Info("Copy failed");
}
finally{
log.Info("Operation completed");
}
}
1 ответ
Вы должны увидеть предупреждение об этом, но ваш void
Метод, вероятно, вызывает проблему здесь.
Пожалуйста, обновите ваш код функции следующим образом:
public async static Task Run(CloudBlockBlob myBlob, TraceWriter log)
{
await CopyBlob(myBlob, log);
}
Обратите внимание на изменение от void
в Task