Триггер большого двоичного объекта приложения-функции Azure не может отправить файл

Я создал триггер большого двоичного объекта, который принимает файл из большого двоичного объекта, распаковывает его и перемещает в другой большой двоичный объект с помощью потоков.

Мой код выглядит так

[FunctionName("Requests")]
[StorageAccount("samplecontainer")]
public static void Run([BlobTrigger("incoming/{name}")]Stream myBlob,
    [Blob("processing/{name}.xml", FileAccess.Write)] TextWriter output,
    string name, ILogger log)
{
    log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
    string returnValue;

    using (Stream blob = myBlob)
    {
        using (GZipStream decompressionStream = new GZipStream(blob, CompressionMode.Decompress))
        {
            log.LogInformation($"Unzipping file");
            name = name.Replace(".gz", "");
            var content = String.Empty;
            using (StreamReader reader = new StreamReader(decompressionStream))
            {
                content = reader.ReadToEnd();
                reader.Close();

            }
            returnValue = content;
        }
    }
    log.LogInformation($"C# Blob trigger function finished processing blob\n Name:{name} \n Now writing to xml");
    output.WriteLine(returnValue);
}

Фактически, это будет работать при локальном запуске с использованием AzureWebJobsStorage: UseDevelopmentStorage = true в моем файле local.settings.json.

Однако после того, как я развернул это приложение и загрузил файл в реальный контейнер с помощью обозревателя хранилищ Azure, ничего не происходит, и журнал активности показывает, что операция завершилась неудачно в Write.Tiny.txt.gz, не удалось найти файл 'D: \ home \ site \ wwwroot \ Requests \ tiny.txt.gz '.

У меня есть триггеры http, которые действительно работают, и я попытался отключить конфигурацию WEBSITE_RUN_FROM_PACKAGE, но безрезультатно. Возможно, мне не хватает какой-то настройки или конфигурации? Когда я подключаюсь к этому пути в приложении-функции и перехожу к функции function.json, я получаю следующее:

{
  "generatedBy": "Microsoft.NET.Sdk.Functions-1.0.29",
  "configurationSource": "attributes",
  "bindings": [
    {
      "type": "blobTrigger",
      "connection": "samplecontainer",
      "path": "incoming/{name}",
      "name": "myBlob"
    }
  ],
  "disabled": false,
  "scriptFile": "../bin/azure-functions.dll",
  "entryPoint": "Requests.Run"
}

person Sixsmith    schedule 08.03.2021    source источник
comment
Значение, которое вы используете для [StorageAccount], samplecontainer, соответствует ли оно настройке приложения с именем samplecontainer или AzureWebJobssamplecontainer?   -  person eli    schedule 09.03.2021


Ответы (2)


Хорошо, я могу воспроизвести вашу проблему.

Поскольку вы можете работать на локальном компьютере, это не должно вызывать проблем с вашим кодом.

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

Следующие шаги могут решить проблему:

Во-первых, создайте удостоверение вашего приложения-функции.

введите описание изображения здесь

Во-вторых, добавьте роль RBAC вашего приложения-функции в учетную запись хранения.

введите описание изображения здесь

Кстати, указанные выше настройки вступят в силу не сразу, вам нужно подождать несколько минут, чтобы они вступили в силу.

person Bowman Zhu    schedule 09.03.2021
comment
К сожалению, это не решило мою проблему - person Sixsmith; 09.03.2021

Я полностью уверен, что мне также нужен был ответ Боумена Чжу, чтобы это сработало, но в моем конкретном случае я забыл добавить учетную запись хранения в качестве строки подключения в моем appSettings.json, поскольку мы недавно обновились до Microsoft.Azure.WebJobs.Extensions .Storage версии 3, и это был наш первый триггер большого двоичного объекта.

В appSettings.json:

{
  "ConnectionStrings": {
    "AzureWebJobsStorage": "{endpoint}"
  }
}
person Sixsmith    schedule 09.03.2021
comment
Рад слышать, что вы наконец решили эту проблему. :) - person Bowman Zhu; 09.03.2021