Недавно я перешел с 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 активно развивается и обновляется, чтобы соответствовать современным стандартам и требованиям.
Проблема обнаружена после изучения раздела «Диагностика и решение проблемы» на портале Azure, в частности, утилиты «Функции, которые не запускают», поскольку функции были развернуты только с несинхронизированными привязками.
Ошибка указывала на то, что одну из функций невозможно загрузить из-за пакета argon2, который, согласно этому ответу, нуждался в другой команде для установки на MacOS. После запуска функции развернулись правильно.