Функции Azure исчезают из приложения при смене компьютеров

Недавно я перешел с Unbuntu на ноутбук MacOS, и, похоже, у меня возникли проблемы с развертыванием на нем приложения-функции nodejs Azure.

Я только что клонировал репозиторий, и мне понравился файл local.settings.json на компьютере MacOS, но всякий раз, когда я запускаю func azure functionapp publish workers-app-staging из MacOS, он не может развернуться, единственное, что я получаю, это то, что интерфейс существует

Getting site publishing info...
[2024-08-06T05:59:25.030Z] Starting the function app deployment...
Uploading package...
Uploading 43.42 MB [##############################################################################]
Upload completed successfully.
Deployment completed successfully.
[2024-08-06T05:59:47.200Z] Syncing triggers...
Functions in workers-app-staging:

С другой стороны, запуск той же команды из Linux работает, как и ожидалось, и cli выводит в терминал все функции проекта поверх вывода, приведенного выше. Функции развернуты, и я вижу их на портале Azure.

Журнал сбоев отсутствует, zip-файл обновляется в корзине, а WEBSITE_RUN_FROM_PACKAGE env обновляется правильной строкой. (Приложение Azure Func использует Linux)

Есть идеи, в чем будет разница между ними? На что мне следует обратить внимание больше, чтобы отладить это?

Попробовал отладить и настроить параметры и убедиться, что конфигурации одинаковы на Linux и MacOS.

У меня есть следующие версии

❯ func version                                                                                                                                                  
4.0.5907 

❯ npm list @azure/functions
[email protected] /Users/george/code/workers-app
└── @azure/[email protected]

❯ node --version         
v18.20.4

Код функции

app.cosmosDB('forwardInvoiceOutEventsToTopic', {
  ...COSMOSDB_DEFAULT_CONFIG_WITH_LEASE,
  containerName: 'invoice-out-events',
  leaseContainerPrefix: 'forwardToTopic',
  maxItemsPerInvocation: 5,
  retry: DEFAULT_RETRY,
  handler: (document) => {console.info('this has a real implementation')}
})
app.eventGrid('invoiceOutGenerateDocument', {
  handler: (event) => {console.info('this has a real implementation')},
  return: output.cosmosDB({
    ...COSMOSDB_DEFAULT_CONFIG,
    containerName: 'invoice-out-events',
    createIfNotExists: false,
    connectionStringSetting: 'COSMOSDB_CONNECTION_STRING',
    collectionName: 'invoice-out-events'
  })
})
app.http('sandboxInsertInvoiceOut', {
  methods: ['GET', 'POST'],
  authLevel: 'anonymous',
  handler: (request) => {console.info('this has a real implementation')},
})

local.settings.json

{
  "IsEncrypted": false,
  "Values": {
    "APPLICATIONINSIGHTS_CONNECTION_STRING": "InstrumentationKey=...",
    "AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=...",
    "FUNCTIONS_EXTENSION_VERSION": "~4",
    "FUNCTIONS_WORKER_RUNTIME": "node",
    "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING": "DefaultEndpointsProtocol=https;AccountName=...",
    "WEBSITE_CONTENTSHARE": "workers-app-staging-9180",
    "WEBSITE_ENABLE_SYNC_UPDATE_SITE": "false",
    "WEBSITE_MOUNT_ENABLED": "1",
    "WEBSITE_NODE_DEFAULT_VERSION": "18",
    "WEBSITE_RUN_FROM_PACKAGE": "....",
    "FUNCTIONS_NODE_BLOCK_ON_ENTRY_POINT_ERROR": "true",
    "AzureWebJobsFeatureFlags": "EnableWorkerIndexing"
  },
  "ConnectionStrings": {}
}

хосты.json

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      }
    }
  },
  "extensions": {
    "cosmosDB": {
      "connectionMode": "Gateway",
      "protocol": "Https"
    },
    "eventGrid": {
      "maxConcurrentCallsPerWorker": 1
    },
    "http": {
      "routePrefix": "",
      "maxOutstandingRequests": 200,
      "maxConcurrentRequests": 100,
      "dynamicThrottlesEnabled": true,
      "hsts": {
        "isEnabled": true,
        "maxAge": "10"
      }
    }
  },
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[4.0.0, 5.0.0)"
  }
}

🤔 А знаете ли вы, что...
Node.js активно развивается и обновляется, чтобы соответствовать современным стандартам и требованиям.


51
1

Ответ:

Решено

Проблема обнаружена после изучения раздела «Диагностика и решение проблемы» на портале Azure, в частности, утилиты «Функции, которые не запускают», поскольку функции были развернуты только с несинхронизированными привязками.

Ошибка указывала на то, что одну из функций невозможно загрузить из-за пакета argon2, который, согласно этому ответу, нуждался в другой команде для установки на MacOS. После запуска функции развернулись правильно.