【问题标题】:Can you read connection strings from function bindings?你能从函数绑定中读取连接字符串吗?
【发布时间】:2020-01-01 23:21:58
【问题描述】:

我们可以绑定到连接字符串值以便简单地输出绑定到特定的存储帐户吗?

我想创建一个 blob 移动器,消费者将在其中传递一个对象,例如:

{
    "sourceConnection":"..blob connection string",
    "destinationConnection":"...blob connection string",
    "filename":"/someContainer/someDir/myfile.jpg"
}

该函数将由队列触发:

    {
        "name": "myQueueItem",
        "queueName": "myqueue-items",
        "connection":"",
        "type": "queueTrigger",
        "direction": "in"
    }

...myQueueItem 将具有上述有效负载。

我们如何将 blob 从 sourceConnection 移动到 destinationConnection

我同时指定了javascriptc# 标签,因为我需要在其中一个中制定解决方案。

如果我们假设源存储帐户和目标存储帐户相同,我们可以简单地编写一个函数来在两个容器之间移动 blob,如下所示:

public static class BlobMover
{
    [StorageAccount("Connection")]
    [FunctionName("BlobMover")]
    public static async Task Run(
        [QueueTrigger("%BlobMover:TriggerQueue%")] BlobMessage msg,
        [Blob("{source}-error/{name}", FileAccess.Write)] CloudBlockBlob error,
        [Blob("{destination}/{name}", FileAccess.Write)] CloudBlockBlob @out,
        [Blob("{source}/{name}", FileAccess.Read)] CloudBlockBlob @in,
        ILogger log)
    {
        await @out.StartCopyAsync(@in);
    }
}

但是,存储帐户会有所不同,因此上述解决方案不起作用。

【问题讨论】:

  • 目标是正确移动 blob?无论如何,您从消费者那里获得了有效载荷?我可以建议使用 httptrigger 的解决方案吗?
  • 没有。我需要在存储帐户之间移动 blob。我想强迫它与绑定兼容不是优先事项

标签: javascript c# node.js azure-functions


【解决方案1】:

假设您使用 HTTP Triggered Azure 函数接收有效负载输入:

public class Payload
{
    public string SourceContainer { get; set; }
    public string DestinationContainer { get; set; }
    public string SourceConnection{ get; set; }
    public string DestinationConnection{ get; set; }
}

现在从请求中接收信息:

var payload = req.Content.ReadAsAsync<Payload>();
var sourceConnection = payload.SourceConnection;
var destConnection = payload.DestinationConnection;
var sourceContainer = payload.SourceContainer;
var destContainer= payload.DestinationContainer;

创建sourceClientdestinationClient

#SOURCE
CloudStorageAccount sourceAccount = CloudStorageAccount.Parse(sourceConnection);
CloudBlobClient sourceClient = sourceAccount.CreateCloudBlobClient();

#DEST
CloudStorageAccount destAccount = CloudStorageAccount.Parse(destConnection);
CloudBlobClient destClient = destAccount .CreateCloudBlobClient();

从源下载

CloudBlobContainer sourceBlobContainer = sourceClient.GetContainerReference(sourceContainer);
ICloudBlob sourceBlob = await sourceBlobContainer.GetBlobReferenceFromServerAsync("MyBlob.doc");
await sourceBlob.DownloadToFileAsync("MyFile.doc", FileMode.Create);

上传到目的地

CloudBlobContainer destBlobContainer = destClient.GetContainerReference(destContainer);
CloudBlockBlob destBlob = destBlobContainer.GetBlockBlobReference("NewBlob.doc");
await destBlob.UploadFromFileAsync("MyFile.doc");

【讨论】:

  • 也在寻找 javascript 答案
猜你喜欢
  • 1970-01-01
  • 2011-09-02
  • 2013-02-23
  • 2020-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-01
  • 1970-01-01
相关资源
最近更新 更多