All skills
microsoft avatar

/azure-deploy

@b3c238e
by microsoftmicrosoft/skills3.1k stars
351

Execute Azure deployments for ALREADY-PREPARED applications that have existing .azure/deployment-plan.md and infrastructure files. DO NOT use this skill when the user asks to CREATE a new application — use azure-prepare instead. This skill runs azd up, azd deploy, terraform apply, and az deployment commands with built-in error recovery. Requires .azure/deployment-plan.md from azure-prepare and validated status from azure-validate. WHEN: "run azd up", "run azd deploy", "execute deployment", "push to production", "push to cloud", "go live", "ship it", "bicep deploy", "terraform apply", "publish to Azure", "launch on Azure". DO NOT USE WHEN: "create and deploy", "build and deploy", "create a new app", "set up infrastructure", "create and deploy to Azure using Terraform" — use azure-prepare for these.

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

This session only. Nothing lands on disk.

referencesrecipesazdverify.md

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

AZD Verification

Verify deployment success and application health.

Step 1: Verify Resources

azd show

Expected output:

Showing deployed resources:
  Resource Group: rg-myapp-dev
  Services:
    api - Endpoint: https://api-xxxx.azurecontainerapps.io

Step 2: Health Check

# Get endpoint
ENDPOINT=$(azd env get-values | grep -E "SERVICE_.*_URI|.*_ENDPOINT" | head -1 | cut -d'=' -f2)

# Test endpoint
curl -f "$ENDPOINT/health" || curl -f "$ENDPOINT"

PowerShell:

# Get endpoint
$Endpoint = azd env get-values | Select-String -Pattern 'SERVICE_.*_URI|.*_ENDPOINT' |
    Select-Object -First 1 | ForEach-Object { ($_ -split '=', 2)[1] }

# Test endpoint
try { Invoke-WebRequest "$Endpoint/health" } catch { Invoke-WebRequest $Endpoint }

Expected: HTTP 200 response.

Step 3: Report Results to User

⛔ MANDATORY — You MUST present the deployed endpoint URLs to the user in your response. A deployment is not considered complete until the user has received the URLs.

⛔ ALWAYS run azd show after deployment to extract endpoint URLs. Do NOT rely on the azd deploy output alone — it is frequently truncated before endpoint URLs appear.

azd show

Parse the Endpoint: lines from the azd show output to collect all deployed service URLs.

Present a summary to the user that includes:

Item Source
Deployed service endpoint(s) Endpoint: lines from azd show
Aspire Dashboard URL (if applicable) Aspire Dashboard: line from azd show
Azure Portal deployment link (if available) Portal URL from provisioning output

Example response format:

✅ Deployment succeeded!

| Service | Endpoint |
|---------|----------|
| apiservice | https://apiservice.xxx.azurecontainerapps.io |

Aspire Dashboard: https://aspire-dashboard.xxx.azurecontainerapps.io

⚠️ Always use fully-qualified URLs with the https:// scheme. If a command returns a bare hostname (e.g. myapp.azurestaticapps.net), prepend https:// before presenting it to the user.

Step 4: Post-Deployment Verification (if applicable)

For deployments with Azure SQL Database and managed identity:

Verify SQL Access

⚠️ Warning: az sql db query requires the rdbms-connect extension: az extension add --name rdbms-connect --yes

# Load environment variables
eval $(azd env get-values)

# Check managed identity user exists in database
az sql db query \
  --server "$SQL_SERVER" \
  --database "$SQL_DATABASE" \
  --resource-group "$AZURE_RESOURCE_GROUP" \
  --auth-mode ActiveDirectoryDefault \
  --queries "SELECT name, type_desc FROM sys.database_principals WHERE type = 'E'"

PowerShell:

# Load environment variables
azd env get-values | ForEach-Object {
    $name, $value = $_.Split('=', 2)
    Set-Item "env:$name" $value
}

# Check managed identity user exists in database
az sql db query `
  --server $env:SQL_SERVER `
  --database $env:SQL_DATABASE `
  --resource-group $env:AZURE_RESOURCE_GROUP `
  --auth-mode ActiveDirectoryDefault `
  --queries "SELECT name, type_desc FROM sys.database_principals WHERE type = 'E'"

Expected: Should list the App Service or Container App managed identity.

Verify Database Schema

For EF Core applications:

# Check tables exist
az sql db query \
  --server "$SQL_SERVER" \
  --database "$SQL_DATABASE" \
  --resource-group "$AZURE_RESOURCE_GROUP" \
  --auth-mode ActiveDirectoryDefault \
  --queries "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'"

PowerShell:

az sql db query `
  --server $env:SQL_SERVER `
  --database $env:SQL_DATABASE `
  --resource-group $env:AZURE_RESOURCE_GROUP `
  --auth-mode ActiveDirectoryDefault `
  --queries "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'"

Expected: Should list application tables (not just __EFMigrationsHistory).

Check Application Logs

# For App Service
az webapp log tail --name <app-name> --resource-group <resource-group>

# For Container Apps
az containerapp logs show --name <app-name> --resource-group <resource-group> --follow

Look for:

  • ✅ No SQL authentication errors
  • ✅ Successful database connection
  • ✅ Application started successfully

Common Issues

Symptom Cause Fix
HTTP 500 on startup SQL authentication failure See sql-managed-identity.md
"Invalid object name" errors Migrations not applied See ef-migrations.md
Endpoint not accessible Service still starting Wait 1-2 minutes, retry
Health check fails Application error Check logs with az webapp log tail

References

Source: SKILL.md on GitHub

2 warnings15d4 checks · Risk SAFE
  • Gen Agent Trust Hub15d

    This skill provides a robust framework for executing Azure deployments using various infrastructure-as-code tools. It includes several security considerations such as remote script installation and command execution, which are essential for its deployment functionality and are managed through strict prerequisite checks and user confirmation rules.

  • Socket15d

    1 alert: gptAnomaly

  • Snyk15d

    Risk: LOW · No issues

  • Runlayer7mo

    30/31 files flagged

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

Last checked against GitHub 20 hours ago.

Activeupdated 2 months ago
metadata
{
  "author": "Microsoft",
  "version": "1.2.1"
}

README badge

README badge for microsoft/skills/azure-deploy