У меня есть приложение-функция 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"
}
}
}
Что я уже пробовал:
Я попытался использовать развертывание func CLI, которое работает для загрузки, но функция не запускается.
Я попытался использовать "WEBSITE_RUN_FROM_PACKAGE"= azurerm_storage_blob.storage_blob_function.url (.zip скриптов, загруженных в большой двоичный объект хранилища Azure, это должен быть URL-адрес в случае приложений Linux + план потребления), который также работает для загрузки, но функция не запускается.
Я также пытался использовать zip_deploy_file = path_to_local_zip в качестве параметра внутри azurerm_linux_function_app, но это все равно не сработало.
Для всех трех вариантов выше я попытался вручную синхронизировать триггеры: 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"
}
]
}
Как я могу убедиться, что функция запущена?
Можете ли вы показать мне источник? Можете ли вы опубликовать это как ответ, чтобы я мог принять его? @Бинго
@Bingo Я решил проблему, см. мой ответ ниже.






Если я использую 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, но запуск не синхронизирован (опрос на блобе не работает).
Если у вас есть какие-либо другие идеи о том, какую конфигурацию следует выполнить в коде TerraForm, сообщите мне. Спасибо.
@TimbusCalin, можете ли вы попробовать упомянутое решение для устранения неполадок?
@HassanSohail нет, потому что я уже пробовал то, что вы там упомянули, как вы можете видеть из текста вопроса.
Есть много ограничений на тарифный план потребления, возможно, вы можете попробовать перейти на другой план.
Непрерывное развертывание для функций Azure
Значит, это означает, что код ни от DevOps, ни от TerraForm нельзя успешно развернуть в плане Linux App + Consumer?
Проблема заключалась в том, что 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.
Непрерывное развертывание пока не поддерживается для приложений Linux, работающих в плане потребления.