Развертывание функционального кода Azure (Python) --- триггер Zip Deployments не работает

У меня есть приложение-функция Azure Linux, которое я развертываю с помощью TerraForm.

У меня есть функция Linux + план потребления.

Функция .zip содержит 3 .py scripts, one __init__.py and function.json.

Развертывание кода проходит успешно, но триггер не работает (функция представляет собой триггер BLOB-объектов службы хранилища Azure, который срабатывает при загрузке определенного файла в контейнер BLOB-объектов).

Если я использую Azure Function Core Tools, развертывание проходит успешно, и запуск работает (я открываю потоки/монитор журналов и вижу, что функция постоянно опрашивает объекты внутри этого контейнера).

Если я использую CLI или TerraForm для загрузки кода, запуск не работает.

Вот мой код для function_app:

resource "azurerm_linux_function_app" "blurring_fn_app" {
  name                        = "blurring-app-new4"
  location                    = var.location
  resource_group_name         = var.resource_group
  storage_account_name        = var.storage_account
  storage_account_access_key  = data.azurerm_key_vault_secret.sensestgaccountkey.value
  service_plan_id             = azurerm_service_plan.blurring_app_service_plan.id
  functions_extension_version = "~4"
  app_settings = {
    "APPINSIGHTS_INSTRUMENTATIONKEY" = "${data.azurerm_key_vault_secret.appinsightskey.value}"
    "AzureWebJobsStorage"            = "${data.azurerm_key_vault_secret.azure_web_jobs_storage.value}" 
    "ENABLE_ORYX_BUILD"              = true
    "SCM_DO_BUILD_DURING_DEPLOYMENT" = true
  }
  site_config {
    application_insights_key               = data.azurerm_key_vault_secret.appinsightskey.value
    application_insights_connection_string = data.azurerm_key_vault_secret.appinsightsconnstr.value
    application_stack {
      python_version = "3.9"
    }
  }
}

Что я уже пробовал:

  1. Я попытался использовать развертывание func CLI, которое работает для загрузки, но функция не запускается.

  2. Я попытался использовать "WEBSITE_RUN_FROM_PACKAGE"= azurerm_storage_blob.storage_blob_function.url (.zip скриптов, загруженных в большой двоичный объект хранилища Azure, это должен быть URL-адрес в случае приложений Linux + план потребления), который также работает для загрузки, но функция не запускается.

  3. Я также пытался использовать zip_deploy_file = path_to_local_zip в качестве параметра внутри azurerm_linux_function_app, но это все равно не сработало.

  4. Для всех трех вариантов выше я попытался вручную синхронизировать триггеры: https://learn.microsoft.com/en-us/rest/api/appservice/web-apps/sync-function-triggers?tryIt=true&source= docs#code-try-0 но и это не сработало.

function.json это следующее:

   {
      "scriptFile": "__init__.py",
      "bindings": [
        {
          "name": "myblob",
          "type": "blobTrigger",
          "direction": "in",
          "path": "blobcontainername/{name}.mp4",
          "connection": "AzureWebJobsStorage"
        }
      ]
    }

Как я могу убедиться, что функция запущена?

Непрерывное развертывание пока не поддерживается для приложений Linux, работающих в плане потребления.

Bingo 05.05.2023 00:10

Можете ли вы показать мне источник? Можете ли вы опубликовать это как ответ, чтобы я мог принять его? @Бинго

Timbus Calin 05.05.2023 07:19

@Bingo Я решил проблему, см. мой ответ ниже.

Timbus Calin 19.05.2023 14:39
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
250
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Если я использую CLI или TerraForm для загрузки кода, запуск не работает. Я попытался использовать развертывание func CLI, которое работает для загрузки, но функция не запускается.

Да, у меня это работает, когда я развертываю его с помощью Azure CLI, используя следующие команды:

$u = "C:\Users\Downloads\BlobTrigger.zip"
az functionapp deployment source config-zip -g "name of resource grp" -n "function app name"  --src $u

Развернуто:

После успешного развертывания я загрузил файл, как показано ниже:

Затем, чтобы проверить, я проверил журналы, как показано ниже:

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

Спасибо за ваш ответ. К сожалению, как я упоминал в вопросе, проблема не в том, как я пишу код развертывания az cli, а в том, что триггер не синхронизирован. Я подозреваю, что это проблема с azurerm_linux_function_app, некоторые настройки я не правильно выставил. Я успешно загружаю код как с помощью CLI, так и с помощью команды TerraForm, но запуск не синхронизирован (опрос на блобе не работает).

Timbus Calin 29.04.2023 11:47

Если у вас есть какие-либо другие идеи о том, какую конфигурацию следует выполнить в коде TerraForm, сообщите мне. Спасибо.

Timbus Calin 02.05.2023 09:51

@TimbusCalin, можете ли вы попробовать упомянутое решение для устранения неполадок?

Hassan Sohail 03.05.2023 00:54

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

Timbus Calin 03.05.2023 09:24

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

Непрерывное развертывание для функций Azure

Значит, это означает, что код ни от DevOps, ни от TerraForm нельзя успешно развернуть в плане Linux App + Consumer?

Timbus Calin 06.05.2023 10:15
Ответ принят как подходящий

Проблема заключалась в том, что host.json и requirements.txt не находились в папке верхнего уровня.

По сути, это был неправильно сделанный архив .zip, а не код TerraForm.

Структура .zip должна иметь следующую иерархию:

 <project_root>/
 | - .venv/
 | - .vscode/
 | - my_first_function/
 | | - __init__.py
 | | - function.json
 | | - example.py
 | - my_second_function/
 | | - __init__.py
 | | - function.json
 | - shared_code/
 | | - __init__.py
 | | - my_first_helper_function.py
 | | - my_second_helper_function.py
 | - tests/
 | | - test_my_second_function.py
 | - .funcignore
 | - host.json
 | - local.settings.json
 | - requirements.txt
 | - Dockerfile

В моем случае я просто забыл добавить - host.json.

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