All skills
microsoft avatar

/azure-prepare

@b8a1c66
by microsoftmicrosoft/skills3.1k stars
351

Prepare azd-based Azure projects for deployment: generates azure.yaml, infrastructure (Bicep/Terraform), and Dockerfiles for the Azure Developer CLI (azd) workflow. USE ONLY when the user explicitly wants to use azd as the deployment tool, or the project already has an azure.yaml file. DO NOT USE FOR: non-azd deployments, Python App Service code-only deploys (use python-appservice-deploy), or cross-cloud migration (use azure-cloud-migrate). WHEN: prepare app for azd, create azure.yaml, set up azd infrastructure, modernize app for Azure with azd, deploy with azd, function app, timer trigger, service bus trigger, event-driven function, managed identity, generate Bicep, generate Terraform, create and deploy to Azure.

Use this Skill: https://skilld.dev/gh/microsoft/skills/azure-prepare

This session only. Nothing lands on disk.

referencesservicesfunctionstemplatesrecipescommonnodejs-entry-point.md

≈1.1k tokens on demand. Your agent reads this file only when SKILL.md points to it.

Node.js Entry Point (REQUIRED)

Azure Functions Node.js v4 programming model requires an entry point file that initializes the runtime.

⛔ CRITICAL: Without this file, functions will deploy but return 404 on all endpoints.

Project Structure (CRITICAL)

The project structure MUST be:

project-root/                # ← azure.yaml project: "."
├── azure.yaml
├── package.json             # ← MUST be at ROOT, not in src/
├── host.json
├── src/
│   ├── index.js             # ← Entry point (app.setup)
│   └── functions/
│       ├── myFunction.js    # ← Functions auto-discovered
│       └── ...
└── infra/

⛔ CRITICAL: package.json MUST be at project root, NOT inside src/. The azure.yaml must have project: . (not project: ./src/).

JavaScript: src/index.js

This file MUST exist and MUST NOT be removed when replacing trigger files.

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

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

TypeScript: src/index.ts

This file MUST exist and MUST NOT be removed when replacing trigger files.

import { app } from '@azure/functions';

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

package.json Configuration

The package.json MUST be at the project root (same level as azure.yaml).

⛔ CRITICAL: The glob pattern is REQUIRED for function discovery! Using "main": "src/index.js" alone will result in 404 on all endpoints. You MUST use the glob pattern that includes function files.

JavaScript (REQUIRED pattern)

{
  "main": "src/{index.js,functions/*.js}",
  "scripts": {
    "start": "func start"
  }
}

TypeScript (REQUIRED pattern)

{
  "main": "dist/src/{index.js,functions/*.js}",
  "scripts": {
    "build": "tsc",
    "prestart": "npm run build",
    "start": "func start"
  }
}

Why the Glob Pattern is Required: The Azure Functions Node.js v4 runtime uses the main field to determine which files to load. Unlike CommonJS where require() chains work, the runtime needs ALL function files explicitly listed in the glob pattern. Without the glob, only index.js loads and functions in src/functions/ are never registered.

❌ WRONG: "main": "src/index.js" — Functions not discovered, 404 on all routes ✅ CORRECT: "main": "src/{index.js,functions/*.js}" — All functions discovered

azure.yaml Configuration

services:
  api:
    project: .           # ← ROOT directory, not ./src/
    language: js         # or ts for TypeScript
    host: function

⛔ CRITICAL: Use project: . — NOT project: ./src/. The runtime expects package.json at the project root.

Build Requirements (TypeScript only)

Before deployment, TypeScript must be compiled:

npm run build

This outputs JavaScript to dist/ which is what Azure Functions actually runs.

Common Mistakes

Mistake Symptom Fix
Using "main": "src/index.js" without glob 404 on all endpoints Use "main": "src/{index.js,functions/*.js}"
Missing src/index.js 404 on all endpoints Add the entry point file with app.setup()
Deleting src/index.js when replacing triggers 404 after recipe applied Keep index.js, only replace function files
package.json in src/ instead of root 404, functions not found Move package.json to project root
project: ./src/ in azure.yaml Deployment fails or 404 Use project: .
Missing npm run build for TypeScript 404 or old code runs Run build before deploy

⛔ #1 CAUSE OF 404 ERRORS: Using "main": "src/index.js" instead of the glob pattern. The glob src/{index.js,functions/*.js} is REQUIRED — it's not optional!

Terraform vs Bicep: Source Code is IDENTICAL

The Node.js source code and package.json are exactly the same for both IaC types.

Only the infra/ folder differs:

  • Bicep: infra/*.bicep
  • Terraform: infra/*.tf

⚠️ If you find yourself changing imports or source code because of IaC choice, something is wrong. The application code should be IaC-agnostic.

Source: SKILL.md on GitHub

2 warnings3d4 checks · Risk SAFE
  • Gen Agent Trust Hub3d

    This skill includes security considerations related to the processing of untrusted project files and the retrieval of external development templates. While these operations are essential for modernizing and preparing Azure applications, they represent a surface area for indirect prompt injection and depend on the integrity of external template repositories.

  • Socket3d

    5 alerts: gptAnomaly, gptSecurity

  • Snyk3d

    Risk: LOW · No issues

  • Runlayer7mo

    86/87 files flagged

Signed by skilld at b8a1c66. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub yesterday.

Activeupdated last week
metadata
{
  "author": "Microsoft",
  "version": "1.3.4"
}

README badge

README badge for microsoft/skills/azure-prepare