Подключение к хранилищу BLOB-объектов Azure из функции Azure - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь использовать класс CloudBlobClient c # в своем приложении-функции v2 для чтения данных из файла, хранящегося в хранилище BLOB-объектов Azure.При локальном запуске мой код может получить данные обратно, однако, когда код развернут с той же строкой подключения и моим кодом вызова GetBlobReferenceFromServerAsync, я получаю следующую ошибку:

Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.

Я взял строку подключения из учетной записи хранения> Ключи доступа> Строка подключения для ключа 1, которая имеет следующий формат:

DefaultEndpointsProtocol=https;AccountName=<AccountName>;AccountKey=<AccountKey>;EndpointSuffix=core.windows.net

Я попытался передать владельца учетной записи службы приложений.доступ к учетной записи хранения и пробовал использовать подписи общего доступа, но пока ничего не получалось.Существуют ли определенные разрешения, которые необходимо применить к приложению-функции или к учетной записи хранения, чтобы эта функция работала?

Ниже приведен фрагмент кода:

var storageConnectionString = blobConfig.ConnectionString;
if (CloudStorageAccount.TryParse(storageConnectionString, out var storageAccount))
{
    try
    {
        // Create the CloudBlobClient that represents the Blob storage endpoint for the storage account.
        var cloudBlobClient = storageAccount.CreateCloudBlobClient();

        var container = cloudBlobClient.GetContainerReference(containerName);
        var uri = new Uri(cloudBlobClient.BaseUri, $"/{containerName}{path}");

        // get the blob object and download to file
        // ---- THROWS ON NEXT LINE ----
        var blobRef = await cloudBlobClient.GetBlobReferenceFromServerAsync(uri); 

        var tempFilePath = System.IO.Path.GetTempFileName();
        await blobRef.DownloadToFileAsync(tempFilePath, System.IO.FileMode.Truncate);

        return tempFilePath;
    }
    catch (StorageException ex)
    {
        log.LogError(ex, "Error returned from the service: {0}", ex.Message);
        throw;
    }
}

Изменить Следует отметить, что развернутая версия этой функции работает по подписке Azure Dev / Test.Не уверен, что это здесь.Я попытаюсь развернуть подписку не на Dev и посмотреть, разрешит ли она что-нибудь.

1 Ответ

0 голосов
/ 11 декабря 2018

Так что после некоторого тестирования похоже, что это проблема, изолированная для подписок Dev / Test.Немного расстраивает то, что мне пришлось целый день биться головой об стену, чтобы понять это, но я думаю, это название игры.

Надеюсь, это может помочь кому-то еще столкнуться с этой проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...