Фабрика данных Azure получает путь BLOB-объекта с токеном sas в пользовательском действии
Я пытаюсь создать пользовательскую операцию в фабрике данных Azure, которая получает большой двоичный объект в качестве входного набора данных и хотела бы передать путь sas-токена этого большого двоичного объекта в API, который требует этот тип пути.
Есть ли способ получить путь BLOB-объекта с помощью токена SAS в пользовательском действии?
1 ответ
Решение
Я нашел способ сделать это. Частью пользовательского действия в ADF v1 является метод Execute, имеющий параметр контекста. Из этого контекста вы можете получить строку подключения к хранилищу BLOB-объектов и путь к BLOB-объекту, а затем вы можете извлечь токен sas следующим образом:
public override IDictionary<string, string> Execute(
AOMDotNetActivityContext context,
IActivityLogger logger)
{
string blobConnectionString = context.ConnectionString;
CloudStorageAccount inputStorageAccount = CloudStorageAccount.Parse(blobConnectionString);
var blob = new CloudBlob(new Uri(inputStorageAccount.BlobEndpoint, Path.Combine(context.FolderPath, context.FileName)), inputStorageAccount.Credentials);
SharedAccessBlobPolicy adHocSAS = new SharedAccessBlobPolicy()
{
SharedAccessExpiryTime = DateTime.UtcNow.AddHours(48),
Permissions = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.Delete
};
string sasBlobToken = blob.GetSharedAccessSignature(adHocSAS);
string fullUri = new Uri(blob.Uri, sasBlobToken).ToString();