Ошибка конвейера приложения-функции Azure для Key Vault: имя параметра не может быть пустым

Получение следующей ошибки:

##[error]Error: Failed to update App service 'function-app-name' application settings. Error: BadRequest - Parameter name cannot be empty. (CODE: 400)

Я следую документации, найденной здесь: https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/azure-function-app-v2?view=azure-pipelines

Не уверен, почему это терпит неудачу. Вот моя задача:

- task: AzureFunctionApp@2
            displayName: 'Azure functions app deploy'
            inputs:
              azureSubscription: '$(azureSubscription)'
              appType: functionAppLinux
              appName: $(functionAppName)
              package: '$(Pipeline.Workspace)/drop/$(Build.BuildId).zip'
              appSettings: |
                -AzureWebJobsStorage "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/AzureWebJobsStorage)"
                -repeatorderstorage_STORAGE "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/repeatorderstorage-STORAGE)"
                -AZURE_OPENAI_API_KEY "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/AZURE-OPENAI-API-KEY)"
                -AZURE_OPENAI_ENDPOINT "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/AZURE-OPENAI-ENDPOINT)"
                -AZURE_OPENAI_API_VERSION "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/AZURE-OPENAI-API-VERSION)"

Вам нужно добавить пустое место в конце каждой строки настроек приложения.

Vivek Vaibhav Shandilya 23.07.2024 09:18

Привет @Sean, доброго дня тебе. Если вам будет удобно, сообщите нам, может ли любой из приведенных ниже ответов appSettings решить вашу проблему в этом посте. Спасибо за ваше время и усилия.

Alvin Zhao - MSFT 23.07.2024 12:17
Стоит ли изучать 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
2
79
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Чтобы использовать многострочный ключ и значение настроек приложения, добавьте пробел в конце каждой строки. например:

appSettings: |
-key1 value1 
-key2 value2 
-key3 value3 

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

Ниже файл работал для меня

steps:
          - task: AzureFunctionApp@1
            displayName: 'Azure functions app deploy'
            inputs:
              azureSubscription: '$(azureSubscription)'
              appType: functionAppLinux
              appName: $(functionAppName)
              package: '$(Pipeline.Workspace)/drop/$(Build.BuildId).zip'
              appSettings: |
                -AzureWebJobsStorage "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/)" 
                -repeatorderstorage_STORAGE "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/)" 
                -AZURE_OPENAI_API_KEY "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/)" 
                -AZURE_OPENAI_ENDPOINT "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/)" 
                -AZURE_OPENAI_API_VERSION "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/)" 
                -Test Vivek 

OUTPUT:

Я смог воспроизвести проблему при развертывании приложения-функции с многострочными настройками приложения. Из журналов мы увидели, что контекст JSON был преобразован неправильно.

Хитрость заключается в том, чтобы изменить индикатор многострочной строки для appSettings с | на >.

- task: AzureFunctionApp@2
  inputs:
    connectedServiceNameARM: '$(ARMSvcCnn)'
    appType: 'functionAppLinux'
    appName: '$(AzureFunctionApp)'
    package: '$(Pipeline.Workspace)/drop/build$(Build.BuildId).zip'
    appSettings: >
      -TestEnvVar $(Build.BuildId)
      -CONNECTION_URL example$(Build.BuildId).com
      -AzureWebJobsStorage "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/AzureWebJobsStorage)"
      -repeatorderstorage_STORAGE "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/repeatorderstorage-STORAGE)"
      -AZURE_OPENAI_API_KEY "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/AZURE-OPENAI-API-KEY)"
      -AZURE_OPENAI_ENDPOINT "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/AZURE-OPENAI-ENDPOINT)"
      -AZURE_OPENAI_API_VERSION "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/AZURE-OPENAI-API-VERSION)"
    deploymentMethod: 'runFromPackage'

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

Спасибо, я понял ##[error]Error: Unable to find the storage account associated with the function app. Есть какие-нибудь советы, как решить эту проблему? Для учетной записи хранения включен брандмауэр.

Sean 23.07.2024 17:46

Как упоминалось в моем ответе, эта ошибка была вызвана изменением вами значения по умолчанию AzureWebJobsStorage в настройках приложения с выражением для получения секретного значения из Key Vault. Именно поэтому я предложил в ответе дважды проверить, нужно ли вам устанавливать значение AzureWebJobsStorage во время развертывания. Значение по умолчанию было примерно DefaultEndpointsProtocol=https;AccountName=<AccountName>;Acc‌​ountKey=<AccountKey>‌​;EndpointSuffix=core‌​.windows.net. Пожалуйста, рассмотрите возможность создания еще одного поста, если предложение вам не подходит.

Alvin Zhao - MSFT 24.07.2024 03:59

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

Как создать функцию Azure, которая развертывает мой сценарий бицепса из учетной записи хранения Azure
Попытка подключиться к базе данных SQL — поставщик: поставщик TCP, ошибка: 26 — ошибка при обнаружении указанного сервера/экземпляра
Монитор хранилища функциональных BLOB-объектов Azure
Обработка WorkerErrorEvent для среды выполнения: dotnet-isolated, workerId: dotnet-isolated. Ошибка: System.TimeoutException: время ожидания операции истекло
Скрипты для уведомления об очереди недоставленных писем
Как скачать файл в учетную запись хранения Azure из приложения-функции
Функция, запускаемая Blob-объектом, работает локально, но не развертывается (не вызывается)
Получение статуса активности федерального пользователя Microsoft Graph API
Как я могу подтвердить доступ к хранилищу BLOB-объектов в Python с помощью токена OAuth2?
Невозможно настроить непрерывное развертывание в новом приложении-контейнере Azure из-за ошибки «отклонить назначение»

Похожие вопросы

В файлах trx на локальном агенте не обнаружено вложений покрытия кода
Как гарантировать, что Azure Pipelines принимает мои файлы trx для публикации результатов тестов?
Создать секрет Azure Keyvault, не раскрывая значения
Возникает ошибка при попытке отключить конвейер Azure DevOps с помощью Powershell
Автоматическое преобразование значения Azure DevOps в целочисленный тип в yaml
Есть ли способ создать повторно используемые и масштабируемые конвейеры сборки и развертывания для аналогичных служб в среде Azure DevOps?
Проблема при создании рабочего элемента Azure DevOps с полями Microsoft.VSTS.Common.Priority и Microsoft.VSTS.Common.StackRank
Некоторые конвейеры сборки ADO отображают все рабочие элементы в связанных элементах, а другие — только соответствующие элементы. Ищем идеи
Родительская ссылка Azure DevOps REST API на существующую ошибку рабочего элемента
Как предоставить разрешения на вызов REST API Azure DevOps с помощью System.AccessToken?