Как отладить zip-развертывание функции Python Azure?

Я развертываю приложение Python как приложение функций Azure посредством развертывания ZIP. Структура проекта выглядит следующим образом:

src/
├── lib
├── modules
    ├── __init__.py
    └── trivy/
        ├── __init__.py
        ├── fetch_release.py
        ├── send_notification.py
        ├── main.py
        └── adaptive_card_template.json
├── __init.py__
├── .funcignore
├── function_app.py
├── host.json
├── requirements.txt
└── local.settings.json
pyproject.toml
poetry.lock

где я заархивирую только папку src, поскольку она является корнем проекта Functions.

Проблема, с которой я столкнулся, заключается в том, что после запуска следующей команды az:

az functionapp deployment source config-zip --src ./dist/dependency-webhook-api.zip --resource-group ${AZURE_APP_RG} --name ${AZURE_APP_NAME} --subscription ${AZURE_APP_SUBSCRIPTION} --timeout 180

Результат указывает на то, что операция прошла успешно, однако приложение «Функция» не отображает никаких функций в своем графическом интерфейсе:

| Следует отметить, что я успешно запустил приложение локально, используя func start

Это самые важные файлы:

function_app.py

# The function_app.py file is the main Azure functions initializer,
# here the app object gets created, and other functions,
# get registered to it.

import azure.functions as func

# Imports of azure functions from modules:
from modules.trivy.main import trivy_module

# Init the azure functions app
app = func.FunctionApp()

# Register azure functions from modules
app.register_functions(trivy_module)

хост.json

{
  "version": "2.0",
  "logging": {
    "logLevel": {
      "default": "Warning",
      "Host.Aggregator": "Trace",
      "Host.Results": "Information",
      "Function": "Information"
    },
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      }
    }
  },
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[4.*, 5.0.0)"
  }
}

модули/trivy/main.py

import azure.functions as func
import logging

from lib.utils import ReleaseMode, newer_version_available

from .fetch_release import fetch_release_data
from .send_notification import send_notification

trivy_module = func.Blueprint()


@trivy_module.function_name(name = "trivy_module")
@trivy_module.timer_trigger(
    schedule = "0 12 * * 1", arg_name = "timer", run_on_startup=True
)
def main(timer: func.TimerRequest):
    logging.info("Trivy module triggered.")
    response = fetch_release_data()
    logging.info("Trivy release data fetched.")
    if newer_version_available(ReleaseMode.MINOR_MODE, "v0.48.0", response["tag_name"]):
        send_notification(response)
        logging.info("Trivy notification update sent.")

Обновлено: Добавлен файл требований.txt:

azure-functions==1.20.0 ; python_version >= "3.11" and python_version < "4.0"
certifi==2024.7.4 ; python_version >= "3.11" and python_version < "4.0"
charset-normalizer==3.3.2 ; python_version >= "3.11" and python_version < "4.0"
idna==3.7 ; python_version >= "3.11" and python_version < "4.0"
requests==2.32.3 ; python_version >= "3.11" and python_version < "4.0"
urllib3==2.2.2 ; python_version >= "3.11" and python_version < "4.0"

Если я запущу az functionapp с параметром --build-remote true, результат будет следующий:

Если у кого-нибудь есть идеи, как я могу отладить это развертывание, чтобы увидеть какие-либо ошибки или почему приложение не запускается должным образом, буду очень признателен за вашу помощь!

Важно отметить, что развертывание прошло успешно, вероятно, потому, что при развертывании zip не было фактических ошибок, но при этом никакие функции не распознавались. Я предполагаю, что это связано с относительным импортом модулей, который есть в моем коде Python. Есть ли способ увидеть отладку Python или вывод ошибок?

Vanja Stojanović 12.08.2024 09:41

Укажите свой requirements.txt.

Pravallika KV 13.08.2024 07:03

Привет @Pravallika KV, я отредактировал сообщение и добавил файл требования.txt. Он также включается в архивируемый каталог src (каталог src является корнем архива, то есть в архиве нет каталога src/).

Vanja Stojanović 13.08.2024 10:30

Можете ли вы поделиться репозиторием своего кода на GitHub, если это возможно (за исключением конфиденциальной информации, если она доступна)

Pravallika KV 13.08.2024 10:32

Я скопировал исходный проект (размещенный в частной GitLab) и удалил конфиденциальную информацию: github.com/Vanja-S/Copy-of-azure-functions

Vanja Stojanović 13.08.2024 12:34

Разверните папку src с помощью команды func azure functionapp publish functionappname, я могу развернуть, используя тот же процесс. см. изображение

Pravallika KV 13.08.2024 14:05

Есть ли способ автоматизировать этот процесс развертывания? Насколько мне известно, Microsoft не предоставляет образ докера с командой func. Обновлено: Вы можете опубликовать свой ответ, и я приму его, поскольку это был первоначальный вопрос.

Vanja Stojanović 13.08.2024 14:44
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
7
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Я выполнил следующие шаги и смог развернуть код функции , который вы предоставили в приложении-функции Azure.

  • Установите основные функциональные инструменты Azure с помощью команды:
npm i -g azure-functions-core-tools@4 --unsafe-perm true
  • Перейдите к Copy-of-azure-functions\src в CLI.
  • Разверните функцию в Azure с помощью команды func azure functionapp publish <functionapp_name>:
C:\Users\uname\Copy-of-azure-functions\src>func azure functionapp publish kpfn08
Getting site publishing info...
[2024-08-13T12:00:46.269Z] Starting the function app deployment...
Removing WEBSITE_CONTENTAZUREFILECONNECTIONSTRING app setting.
Removing WEBSITE_CONTENTSHARE app setting.
Creating archive for current directory...
Performing remote build for functions project.
Uploading 12.52 KB [##############################################################################]
Remote build in progress, please wait...
Updating submodules.
Preparing deployment for commit id 'de7a8d14-e'.
PreDeployment: context.CleanOutputPath False
PreDeployment: context.OutputPath /home/site/wwwroot
Repository path is /tmp/zipdeploy/extracted
Running oryx build...
Command: oryx build /tmp/zipdeploy/extracted -o /home/site/wwwroot --platform python --platform-version 3.11 -p packagedir=.python_packages/lib/site-packages
Operation performed by Microsoft Oryx, https://github.com/Microsoft/Oryx
You can report issues at https://github.com/Microsoft/Oryx/issues

Oryx Version: 0.2.20230210.1, Commit: a49c8f6b8abbe95bc884dea7fd0d86e, ReleaseTagName: 20230210.1

//Removed few logs

Number of duplicate files found 22
Number of inodes 416
Number of files 365
Number of fragments 26
Number of symbolic links  0
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 51
Number of ids (unique uids + gids) 1
Number of uids 1
        root (0)
Number of gids 1
        root (0)
Creating placeholder blob for linux consumption function app...
SCM_RUN_FROM_PACKAGE placeholder blob scm-latest-kpfn08.zip located
Uploading built content /home/site/artifacts/functionappartifact.squashfs for linux consumption function app...
Resetting all workers for kpfn08.azurewebsites.net
Deployment successful. deployer = Push-Deployer deploymentPath = Functions App ZipDeploy. Extract zip. Remote build.
Remote build succeeded!
[2024-08-13T12:01:39.753Z] Syncing triggers...
Functions in kpfn08:
    trivy_module - [timerTrigger]
  • Развернул функцию в Azure:

Спасибо за вашу помощь!

Vanja Stojanović 13.08.2024 15:37

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