Настройка строки подключения в качестве параметра приложения / переменной среды в функции Azure - PullRequest
0 голосов
/ 21 марта 2020

В моей функции Azure я указал переменную среды / параметр приложения для строки подключения к базе данных. Я могу использовать переменную среды, когда я запускаю функцию локально на моей Azure Data Science Virtual Machine с использованием кода VS и Python.

Однако при развертывании функции в Azure я получаю сообщение об ошибке: KeyValue имеет значение None, что означает, что он не может найти переменную среды для строки подключения. См. Ошибку:

Exception while executing function: Functions.matchmodel Result: Failure
Exception: KeyError: 'CONNECTIONSTRINGS:PDMPDBCONNECTIONSTRING'
Stack:   File "/azure-functions 
  host/workers/python/3.7/LINUX/X64/azure_functions_worker/dispatcher.py", line 315, in 
  _handle__invocation_request self.__run_sync_func, invocation_id, fi.func, args)
File "/usr/local/lib/python3.7/concurrent/futures/thread.py", line 57, in run
  result = self.fn(*self.args, **self.kwargs)
File "/azure-functions-host/workers/python/3.7/LINUX/X64/azure_functions_worker/dispatcher.py", 
  line 434, in __run_sync_func
  return func(**params)
File "/home/site/wwwroot/matchmodel/__init__.py", line 116, in main
File "/home/site/wwwroot/matchmodel/production/dataload.py", line 28, in query_dev_database
  setting = os.environ["CONNECTIONSTRINGS:PDMPDBCONNECTIONSTRING"]
File "/usr/local/lib/python3.7/os.py", line 679, in __getitem__
  raise KeyError(key) from None'

Я пробовал следующие решения:

  • Добавил «CONNECTIONSTRINGS», чтобы указать переменную среды в сценарии Python (что сделало ее работать локально) setting = os.environ["CONNECTIONSTRINGS:PDMPDBCONNECTIONSTRING"]

  • Используется logging.info(os.environ) для вывода моих переменных среды в консоль. Моя строка подключения указана в списке.

  • Добавлена ​​строка подключения в качестве настройки приложения на портале функций Azure.

enter image description here

  • Добавлена ​​строка подключения в качестве строки подключения на функциональном портале Azure.

enter image description here

У кого-нибудь есть другие решения, которые я могу попробовать?

Ответы [ 3 ]

1 голос
/ 25 марта 2020

На самом деле вы почти получаете правильную строку подключения, однако вы используете неверную предварительно добавленную строку. Более подробную информацию вы можете получить по этой ссылке. c: Настройка строк подключения .

Какая строка для использования, зависит от того, какой тип вы выберете, например, в моем тесте я использую пользовательский тип. Тогда я должен использовать os.environ['CUSTOMCONNSTR_testconnectionstring'] для получения значения.

Из do c вы можете найти следующие типы:

  • SQL Сервер: SQLCONNSTR_
  • MySQL: MYSQLCONNSTR_
  • SQL База данных: SQLAZURECONNSTR_
  • Пользовательский: CUSTOMCONNSTR_

enter image description here

enter image description here

enter image description here

0 голосов
/ 27 марта 2020

Я выяснил проблему с помощью Джорджа и выбрал ответ Джорджа как правильный ответ.

Я изменил код на os.environ["SQLCONNSTR_PDMPDBCONNECTIONSTRING"], но также развертывал пакет из кода VS в Azure с помощью следующего кода, используя Azure Интерфейс командной строки (Azure CLI). Этот код перезаписывает Azure Настройки приложения с помощью local.settings. json.

func azure functionapp publish <MY_FUNCTION_NAME> --publish-local-settings -i --overwrite-settings -y

Я думаю, что это вызывает изменения в типе базы данных, который я указал в Azure Настройки приложения (SQL Сервер), поэтому, когда я ранее пытался os.environ["SQLCONNSTR_PDMPDBCONNECTIONSTRING"], он не работал, потому что я перезаписывал свои настройки Azure, используя мои local.settings. json, которые не указывали базу данных тип.

Наконец-то я запустил его, развернув с помощью расширения кода VS под названием Azure Функции (Azure Функции: развертывание в приложении функций). При этом сохраняются настройки, которые я создал в Azure Службах приложений.

0 голосов
/ 23 марта 2020

В настройках приложения функций, таких как строки подключения к сервису, во время выполнения они отображаются как переменные среды. Вы можете получить доступ к этим настройкам, объявив import os, а затем используя

setting = os.environ["mysetting"]

Как сказал Алекс, попробуйте удалить CONNECTIONSTRINGS: из имени переменной среды. На портале azure просто добавьте mysetting в настройках приложения как keyName.

enter image description here

...