VS Code and Azure Functions: Zip Deploy Successful but No Functions Found

Timothy J. Harpster 0 Reputation points
2025-05-09T15:28:51.23+00:00

I successfully completed a zip deployment for my Azure Functions using VS Code, but no functions are recognized in the Azure portal.

Here are the steps taken:

Installed Azure Tools and Azure Functions Core Tools via (Ctrl + Shift + P).

Followed the setup instructions from this answer:

Ran func init <foldername> --model V4 to create the workspace with node_modules (3k+ files) and the necessary JSON files.

Created functions using func new.

npm install @azure/ai-form-recognizer

npm install @azure/functions

Started the function with func start. This just locked up so I CTRL-C

I right click on my function, click deploy to function. The result is what you see in the image.

Despite these steps, the functions were deployed to my function storage account as a zip file, and the files were unzipped in the function app, but they are not recognized (as shown in the image).

Azure setup details:

Two storage accounts: one for the Function App and another for the app.

The functionStorage account has managed identity roles set for reading and writing blobs, tables, and queues.

Azure Function App:

Using a Flex Consumption plan
NOTE: I created my function app in the Azure portal using Create Function app not like https://learn.microsoft.com/en-us/azure/azure-functions/flex-consumption-how-to?tabs=azure-portal%2Cvs-code-publish&pivots=programming-language-javascript#configure-deployment-settings states (this webpage seems obsolete).


To configure deployment settings when you create your function app in the Flex Consumption plan:

You can't currently configure deployment storage when creating your app in the Azure portal. To configure deployment storage during app creation, instead use the Azure CLI to create your app.

You can use the portal to modify the deployment settings of an existing app, as detailed in the next section.

--

Deployment Center - not setup currently (I had previously set up github to deploy using a workflow which was deploying with the same No HTTP triggers found error so i disconnected it and moved deployment to VS Code - now using my connected github to VS Code for version control not deployment)

Environment Variables:

APP_STORAGE_ACCOUNT_KEY, APPLICATIONINSIGHTS_CONNECTION_STRING,

AzureWebJobsFeatureFlags, AzureWebStorage__accountname, DEPLOYMENT_STORAGE_CONNECTION_STRING, FUNC_STORAGE_ACCOUNT_KEY, FUNCTIONS_EXTENSION_VERSION are all properly set in both the workspace local settings and Azure Function - Settings - Environment Variables - App Settings (and SQL_CONNECTION STRING in Connection strings).

Configuration: Node.js version: 22, SCM Basic Auth ON, HTTP version 1.1, TLS version 1.2 and the storage account is connected.

Deployment Settings: Storage assigned, container assigned, System assigned identity auth

Assistance would be greatly appreciated.

extension.json

{
  "recommendations": [
    "ms-azuretools.vscode-azurefunctions"
  ]
}

launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Attach to Node Functions",
      "type": "node",
      "request": "attach",
      "restart": true,
      "port": 9229,
      "preLaunchTask": "func: host start"
    }
  ]
}

settings.json

{
  "azureFunctions.deploySubpath": ".",
  "azureFunctions.projectSubpath": ".",
  "azureFunctions.postDeployTask": "npm install (functions) --verbose",
  "azureFunctions.projectLanguage": "JavaScript",
  "azureFunctions.projectRuntime": "~4",
  "debug.internalConsoleOptions": "neverOpen",
  "azureFunctions.projectLanguageModel": 4,
  "azureFunctions.preDeployTask": "npm prune (functions) --verbose"  
}

tasks.json

{
  "version": "2.0.0",
  "tasks": [
    {
      "type": "func",
      "label": "func: host start --verbose",
      "command": "host start --verbose",
      "problemMatcher": "$func-node-watch",
      "isBackground": true,
      "dependsOn": "npm install (functions) -- verbose",
    },
    {
      "type": "shell",
      "label": "npm install (functions) --verbose",
      "command": "npm install --verbose"
    },
    {
      "type": "shell",
      "label": "npm prune (functions) --verbose",
      "command": "npm prune --production --verbose",
      "problemMatcher": []
    }
  ]
}

host.json

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      }
    }
  },
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[4.*, 5.0.0)"
  }
}

package.json

{
  "name": "vs-code",
  "version": "1.0.0",
  "description": "",
  "main": "src/functions/index.js",
  "scripts": {
    "start": "func start --verbose",
    "test": "echo \"No tests yet...\""
  },
  "dependencies": {
    "@azure/ai-form-recognizer": "^5.0.0",
    "@azure/functions": "^4.7.0"
  },
  "devDependencies": {
    "azure-functions-core-tools": "^4.x"
  }
}

example function in src/functions folder

const { app } = require('@azure/functions');

app.http('CreateUser', {
    methods: ['GET', 'POST'],
    authLevel: 'anonymous',
    handler: async (request, context) => {
        context.log(`Http function processed request for url "${request.url}"`);

        const name = request.query.get('name') || await request.text() || 'world';

        return { body: `Hello, ${name}!` };
    }
});

index.js (note i moved this into src/functions folder since the image was posted - troubleshooting)

const { app } = require('@azure/functions');

app.setup({
    enableHttpStream: true,
});

Azure Functions output from VS CODE after deployment

9:57:49 AM omni-func-dev-eus: c:\Users\tjhar\OneDrive - Intek Inc\One Mission\OMNI 2\VS Code\src\functions\CreateUser.js
9:57:49 AM omni-func-dev-eus: Zip package size: 26.2 kB
9:57:50 AM omni-func-dev-eus: Starting deployment pipeline.
9:57:50 AM omni-func-dev-eus: [SourcePackageUriDownloadStep] starting.
9:57:50 AM omni-func-dev-eus: Zip package is present at /tmp/zipdeploy/faaffaec-1ec5-4b7d-871d-7f71ad84fef3.zip
9:57:50 AM omni-func-dev-eus: [ValidationStep] starting.
9:57:50 AM omni-func-dev-eus: [AppSettingValidation] starting.
9:57:50 AM omni-func-dev-eus: [DeploymentStorageValidation] starting.
9:57:50 AM omni-func-dev-eus: Validation completed
9:57:50 AM omni-func-dev-eus: [SourcePackageUriDownloadStep] starting.
9:57:50 AM omni-func-dev-eus: Zip package is present at /tmp/zipdeploy/faaffaec-1ec5-4b7d-871d-7f71ad84fef3.zip
9:57:50 AM omni-func-dev-eus: [ExtractZipStep] starting.
9:57:50 AM omni-func-dev-eus: Cleaning files in /tmp/zipdeploy/extracted
9:57:50 AM omni-func-dev-eus: Extracted zip package in /tmp/zipdeploy/extracted
9:57:50 AM omni-func-dev-eus: [OryxBuildStep] starting.
9:57:50 AM omni-func-dev-eus: Skipping oryx build (remotebuild = false).
9:57:50 AM omni-func-dev-eus: [PackageZipStep] starting.
9:57:50 AM omni-func-dev-eus: Linux Consumption plan has a 1.5 GB memory limit on a remote build container. To check our service limit, please visit https://docs.microsoft.com/en-us/azure/azure-functions/functions-scale#service-limits
9:57:50 AM omni-func-dev-eus: Created zip file with artifacts as /home/site/artifacts/faaffaec-1ec5-4b7d-871d-7f71ad84fef3.zip.
9:57:50 AM omni-func-dev-eus: [UploadPackageStep] starting.
9:57:50 AM omni-func-dev-eus: Using Kudu.Legion.Core.Storage.BlobContainerStorage
9:57:50 AM omni-func-dev-eus: Created blob name: released-package.zip
9:57:50 AM omni-func-dev-eus: Created blob uri: https://omnifuncsadeveus.blob.core.windows.net/app-package-omni-func-dev-eus-e6db756/released-package.zip
9:57:50 AM omni-func-dev-eus: Created Storage Credentials using storage account connection string
9:57:50 AM omni-func-dev-eus: Uploaded blob successfully.
9:57:50 AM omni-func-dev-eus: Uploaded package to storage blob. Deployment is partially successful from here.
9:57:50 AM omni-func-dev-eus: [RemoveWorkersStep] starting.
9:57:50 AM omni-func-dev-eus: RemoveAllWorkers, statusCode = NoContent
9:57:50 AM omni-func-dev-eus: Reset all workers was successful.
9:57:50 AM omni-func-dev-eus: [SyncTriggerStep] starting.
9:57:50 AM omni-func-dev-eus: Waiting 60 seconds for the workers to recycle with deployed content.
9:58:50 AM omni-func-dev-eus: [CleanUpStep] starting.
9:58:50 AM omni-func-dev-eus: Cleaned the source packages directory.
9:58:50 AM omni-func-dev-eus: Cleaned the result artifact directory.
9:58:50 AM omni-func-dev-eus: Finished deployment pipeline.
9:58:51 AM omni-func-dev-eus: FunctionHostSyncTrigger, statusCode = OK
9:58:51 AM omni-func-dev-eus: Performed sync triggers successfully.
9:58:52 AM omni-func-dev-eus: Started postDeployTask "npm install (functions) --verbose".
9:58:53 AM omni-func-dev-eus: Querying triggers...
9:58:55 AM omni-func-dev-eus: No HTTP triggers found.

Azure diagnostics that seem helpful:
As of 2025-05-09 15:10:00, the Function App runtime encountered the below exceptions:

General Info Exception TypeTotal OccurrencesException MessageLatest TimestampAn error occurred initializing the Table Storage Client. We are8An error occurred initializing the Table Storage Client. We are unable to record diagnostic events, so the diagnostic logging service is being stopped.5/9/2025 2:45:21 PMWorker was unable to load entry point 'src/functions/index.js':8Worker was unable to load entry point 'src/functions/index.js': Cannot find module '@azure/functions' Require stack: - /home/site/wwwroot/src/functions/index.js - /azure-functions-host/workers/node/dist/src/worker-bundle.js - /azure-functions-host/workers/node/dist/src/nodejsWorker.js5/9/2025 2:40:40 PMNo job functions found. Try making your job classes and methods8No job functions found. Try making your job classes and methods public. If you're using binding extensions (e.g. Azure Storage, ServiceBus, Timers, etc.) make sure you've called the registration method for the extension(s) in your startup code (e.g. builder.AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers(), etc.).5/9/2025 2:40:40 PM An error occurred initializing the Table Storage Client. We are 8 An error occurred initializing the Table Storage Client. We are unable to record diagnostic events, so the diagnostic logging service is being stopped. 5/9/2025 2:45:21 PM Worker was unable to load entry point 'src/functions/index.js': 8 Worker was unable to load entry point 'src/functions/index.js': Cannot find module '@azure/functions' Require stack: - /home/site/wwwroot/src/functions/index.js - /azure-functions-host/workers/node/dist/src/worker-bundle.js - /azure-functions-host/workers/node/dist/src/nodejsWorker.js 5/9/2025 2:40:40 PM No job functions found. Try making your job classes and methods 8 No job functions found. Try making your job classes and methods public. If you're using binding extensions (e.g. Azure Storage, ServiceBus, Timers, etc.) make sure you've called the registration method for the extension(s) in your startup code (e.g. builder.AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers(), etc.). 5/9/2025 2:40:40 PM
General Info Exception TypeTotal OccurrencesException MessageLatest TimestampAn error occurred initializing the Table Storage Client. We are8An error occurred initializing the Table Storage Client. We are unable to record diagnostic events, so the diagnostic logging service is being stopped.5/9/2025 2:45:21 PMAn error occurred initializing the Table Storage Client. We are8An error occurred initializing the Table Storage Client. We are unable to record diagnostic events, so the diagnostic logging service is being stopped.5/9/2025 2:45:21 PMWorker was unable to load entry point 'src/functions/index.js':8Worker was unable to load entry point 'src/functions/index.js': Cannot find module '@azure/functions' Require stack: - /home/site/wwwroot/src/functions/index.js - /azure-functions-host/workers/node/dist/src/worker-bundle.js - /azure-functions-host/workers/node/dist/src/nodejsWorker.js5/9/2025 2:40:40 PMNo job functions found. Try making your job classes and methods8No job functions found. Try making your job classes and methods public. If you're using binding extensions (e.g. Azure Storage, ServiceBus, Timers, etc.) make sure you've called the registration method for the extension(s) in your startup code (e.g. builder.AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers(), etc.).5/9/2025 2:40:40 PM
Azure Functions
Azure Functions
An Azure service that provides an event-driven serverless compute platform.
5,799 questions
{count} votes

1 answer

Sort by: Most helpful
  1. Ranashekar Guda 1,610 Reputation points Microsoft External Staff Moderator
    2025-05-13T18:28:21.38+00:00

    Hello @Timothy Harpster,

    I'm glad that you were able to resolve your issue and thank you for posting your solution so that others experiencing the same thing can easily reference this! Since the Microsoft Q&A community has a policy that "The question author cannot accept their own answer. They can only accept answers by others ", I'll repost your solution in case you'd like to "Accept " the answer.

    Issue: VS Code and Azure Functions: Zip Deploy Successful but No Functions Found

    Solution: I solved my function app issue. I tried a local VS Code editor and deploying from github first and failed, then tried a VS Code deploying to azure while backing up to github and failed. Then I went back to github and set it up a different way and succeeded. Here is a summary of how to set up for success (target $0/month during development and basic learning how-to/should-I-invest-in-this). Recommend, consulting Grok AI for standardized naming conventions for all resources on Azure, git and elsewhere.

    1. Create a subscription – Pay-as-you-go
    2. On Azure, setup Microsoft Entra ID
    3. On Azure, create a primary Storage account and a function Storage account (Standard General Purpose v2) (ensure all resource in same region)
    4. On Azure, create a SQL database (sets up new SQL server in the creation wizard)
    5. On Azure, create Function App (Flex Consumption, Node.js, 22)
      1. Environment Variables: APPLICATIONINSIGHTS_CONNECTION_STRING, AzureWebJobsFeatureFlags, AzureWebJobsStorage__accountName, FUNCTIONS_EXTENSION_VERSION (if not created, consult web for proper values)
      2. Configuration: set HTTP version to 2.0
      3. Deployment Settings > System assigned identity
      4. Identity > System Assigned > On
    6. On Azure, align Managed Identities to resources – start in Subscriptions, then Storage Accounts, verify in Function App
    7. On github, create Repository
      1. Actions, Deploy Node.js to Azure Functions App,
      2. Create Codespaces, use online VS Code UI
      3. Install Azure Tools
      4. Ctrl-Shift-P: install: Azure Functions Core Tools
      5. Azure (left bar) – Workspace (lower panel) –click Function (lightning bolt) – create *.js functions
      6. On VS Code, customize package.json – dependencies to include your functions dependencies
      7. On VS Code, in *.js functions, use scripts to use Managed Identities for connections to SQL (unsure how to get API’s to work yet)
      8. Profile icon > Settings > Developer settings > Personal access tokens > Tokens (classic) > Generate new token Save somewhere.
      9. Repository > Settings > Secrets and Variables > Actions > New repository secret > <your choice>_GITHUB_PAT – paste token value > Add Secret (Use Azure Key Vault later)
    8. On Azure, link Function App to github in Deployment Center – Settings
    9. On github, launch local VS Code, setup Visual Studio Code (optional if using local program ensure Tools installed)
    10. On github or VS Code, verify .vscode *.yml is setup for Azure and not the default git yml
    11. On VS Code, Source Control > Commit changes > should deploy functions properly.

    If you have any other questions or are still running into more issues, please let me know. Thank you again for your time and patience throughout this issue.

    Please remember to "Accept Answer" if any answer/reply helped, so that others in the community facing similar issues can easily find the solution.

    1 person found this answer helpful.
    0 comments No comments

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.