Azure 数据工厂在自定义 activity 中获取带有 sas 令牌的 blob 路径
Azure Data Factory get blob path with sas token in custom activity
我正在尝试在 Azure 数据工厂中构建自定义 activity,它获取一个 blob 作为输入数据集,并希望将此 blob 的 sas 令牌路径传递给需要此类型的 API的路径。
有没有办法在自定义 activity 中使用 sas 令牌获取 blob 的路径?
我想出了一个办法。 ADF v1 中的部分自定义 activity 是具有上下文参数的 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();
我正在尝试在 Azure 数据工厂中构建自定义 activity,它获取一个 blob 作为输入数据集,并希望将此 blob 的 sas 令牌路径传递给需要此类型的 API的路径。
有没有办法在自定义 activity 中使用 sas 令牌获取 blob 的路径?
我想出了一个办法。 ADF v1 中的部分自定义 activity 是具有上下文参数的 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();