Azure: указанный контейнер не существует, Dapr с ContainerApps

Я использую привязку Dapr Azure Blob Storage для настройки хранилища файлов.

вот бицепсы

storage-account.bicep

@description('The location in which the Azure Storage resources should be deployed.')
param location string

@description('The name of the blob container.')
var containerName = 'ifms-filestore'

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-05-01' = {
  name: 'ifmsstorageaccount'
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'BlobStorage'
  properties: {
    accessTier: 'Hot'
  }
}

resource container 'Microsoft.Storage/storageAccounts/blobServices/containers@2022-05-01' = {
  name: '${storageAccount.name}/default/${containerName}'
}

output storageAccountId string = storageAccount.id
output storageAccountApiVersion string = storageAccount.apiVersion
output storageAccountName string = storageAccount.name
output storageAccountContainerName string = container.name

blobstorage.bicep

param containerAppsEnvironmentName string
param storageAccountId string
param storageAccountApiVersion string
param storageAccountName string
param storageAccountContainerName string

resource containerAppsEnvironment 'Microsoft.App/managedEnvironments@2022-06-01-preview' existing = {
  name: containerAppsEnvironmentName

  resource daprComponent 'daprComponents@2022-03-01' = {
    name: 'ifms-dapr-filestore'
    properties: {
      componentType: 'bindings.azure.blobstorage'
      version: 'v1'
      secrets: [
        {
          name: 'storage-account-account-key'
          value: listKeys(storageAccountId, storageAccountApiVersion).keys[0].value
        }
      ]
      metadata: [
        {
          name: 'accountName'
          value: storageAccountName
        }
        {
          name: 'accountKey'
          secretRef: 'storage-account-account-key'
        }
        {
          name: 'containerName'
          value: storageAccountContainerName
        }
        {
          name: 'decodeBase64'
          value: 'true'
        }
      ]
      scopes: [
        'vehicle-management-web-api'
      ]
    }
  }
}

output daprPubSubName string = containerAppsEnvironment::daprComponent.name

AddFileAsync — это вспомогательная функция, которая используется для добавления файла в хранилище файлов и использует для этого DaprtClinet.

public async Task<FileReturnType> AddFileAsync(byte[] fileContent, string path, string fileName)
{
  var filepath = Path.Combine(path, fileName);

  string base64String = Convert.ToBase64String(fileContent, 0, fileContent.Length);
  Dictionary<string, string> metadata = new Dictionary<string, string>{ {"blobName",filePath}};

  await _daprClient.InvokeBindingAsync("ifms-dapr-filestore", "create", base64String, metadata);
  long fileSize = fileContent.Length;
  var extension = Path.GetExtension(fileName);

  return new FileReturnType(filepath, fileSize, extension);
}

Когда я добавляю файл, я получаю следующее сообщение об ошибке

Dapr.DaprException: Binding operation failed: the Dapr endpoint indicated a failure. See InnerException for details.
 ---> Grpc.Core.RpcException: Status(StatusCode = "Internal", Detail = "error when invoke output binding ifms-dapr-filestore: error uploading az blob: -> github.com/Azure/azure-storage-blob-go/azblob.newStorageError, /home/vsts/work/1/go/pkg/mod/github.com/!azure/[email protected]/azblob/zc_storage_error.go:42
===== RESPONSE ERROR (ServiceCode=ContainerNotFound) =====
Description=The specified container does not exist.
RequestId:d12aeaa8-301e-0019-71b3-2d46c2000000
Time:2023-01-21T16:12:42.7329062Z, Details: 
   Code: ContainerNotFound
   PUT https://ifmsstorageaccount.blob.core.windows.net/ifmsstorageaccount/default/ifms-filestore/RequestLetters/REQ-DIH-MUN-002/REQ-DIH-MUN-002%20-%20Request%20Letter.pdf?timeout=61
   Authorization: REDACTED
   Content-Length: [958932]
   User-Agent: [dapr-1.9.5-msft-1 Azure-Storage/0.10 (go1.19; linux)]
   X-Ms-Blob-Cache-Control: []
   X-Ms-Blob-Content-Disposition: []
   X-Ms-Blob-Content-Encoding: []
   X-Ms-Blob-Content-Language: []
   X-Ms-Blob-Content-Type: []
   X-Ms-Blob-Type: [BlockBlob]
   X-Ms-Client-Request-Id: [184d2673-814b-45ea-7ad0-cfe8d1fca4b3]
   X-Ms-Date: [Sat, 21 Jan 2023 16:12:42 GMT]
   X-Ms-Meta-Contenttype: [application/grpc]
   X-Ms-Meta-Daprauthority: [127.0.0.1:50001]
   X-Ms-Meta-Daprgrpcacceptencoding: [identity,gzip,deflate]
   X-Ms-Meta-Traceparent: [00-cbed618718a728703a987fd1f50b6b25-c3d612101f033c57-00]
   X-Ms-Meta-Useragent: [grpc-dotnet/2.47.0 (.NET 7.0.2; CLR 7.0.2; net6.0; linux; x64) dapr-sdk-dotnet/v1.9.0+3224579c3e136020bbf713528965854ebbd4eefe]
   X-Ms-Version: [2019-02-02]
   --------------------------------------------------------------------------------
   RESPONSE Status: 404 The specified container does not exist.
   Content-Length: [225]
   Content-Type: [application/xml]
   Date: [Sat, 21 Jan 2023 16:12:42 GMT]
   Server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0]
   X-Ms-Client-Request-Id: [184d2673-814b-45ea-7ad0-cfe8d1fca4b3]
   X-Ms-Error-Code: [ContainerNotFound]
   X-Ms-Request-Id: [d12aeaa8-301e-0019-71b3-2d46c2000000]
   X-Ms-Version: [2019-02-02]

И хранилище Azure, и контейнер настроены на Azure, как показано на изображении ниже.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что проблема в вашем storageAccountContainerName, который, судя по ответу об ошибке, имеет формат {storageaccountName}/default/{actualContainerName}.

URL-адрес в запросе PUT в вашем выводе начинается с https://ifmsstorageaccount.blob.core.windows.net/ifmsstorageaccount/default/ifms-filestore/, который имеет формат https://{storageAccountName}.blob.core.windows.net/{storageAccountName}/default/{containerName}/{blobName}, хотя должен быть https://{storageAccountName}.blob.core.windows.net/{containerName}/{blobName}

Попробуйте изменить вывод в storageaccount.bicep на:

output storageAccountContainerName string = last(split(container.name, '/'))

Другие вопросы по теме