AZ

azure-deployment-operations

Standardized production deployment configurations for Azure services, covering SWA, containerized apps, and custom domains.

Install

mkdir -p .claude/skills/azure-deployment-operations && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/10541" && unzip -o skill.zip -d .claude/skills/azure-deployment-operations && rm skill.zip

Installs to .claude/skills/azure-deployment-operations

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Production deployment patterns for Azure Static Web Apps, Container Apps, App Service, and infrastructure
105 charsno explicit “when” trigger
Intermediate

Key capabilities

  • Deploy Azure Static Web Apps
  • Configure Container Apps health probes
  • Manage App Service staging slots
  • Implement rate limiting strategies
  • Execute infrastructure inventory

How it works

Uses Azure CLI commands and Bicep templates to manage resources and deployment pipelines. It enforces specific flags like --env production for SWA and staging slots for App Service.

Inputs & outputs

You give it
Deployment command or infrastructure configuration
You get back
Azure resource state update

When to use azure-deployment-operations

  • Deploying to Azure SWA
  • Configuring Container Apps
  • Setting up production environments

About this skill

Azure Deployment Operations

Battle-tested patterns for deploying and operating Azure services in production.

Scope: Inheritable skill. Covers SWA, Container Apps, App Service, security posture, rate limiting, production checklists, and multi-subscription management.

Azure Static Web Apps (SWA)

Environment Deployment

SWA defaults to preview environments. Always specify production explicitly:

# Anti-pattern: deploys to preview environment
swa deploy

# Correct: explicitly target production
swa deploy --env production

Rule: Every SWA deployment command in CI/CD and scripts MUST include --env production unless creating a preview intentionally.

Custom Domain Registration

Custom domains require a two-step process:

StepActionValidates
1. CNAME recordPoint domain to SWA default hostnameDNS ownership
2. Hostname registrationaz staticwebapp hostname setAzure binding

Common error: Adding CNAME but forgetting hostname registration. Both steps are required.

SWA Configuration

{
  "navigationFallback": {
    "rewrite": "/index.html",
    "exclude": ["/api/*", "/assets/*"]
  },
  "routes": [
    { "route": "/api/*", "allowedRoles": ["authenticated"] }
  ],
  "globalHeaders": {
    "X-Content-Type-Options": "nosniff",
    "X-Frame-Options": "DENY"
  }
}

Azure Container Apps

Health Probe Configuration

Container Apps health probes have specific threshold ranges:

ParameterMinMaxRecommended
failureThreshold1483-5 for liveness, 10-30 for startup
periodSeconds124010 for liveness, 5 for startup
initialDelaySeconds0600 for liveness (use startup probe instead)
timeoutSeconds12405

Pattern: Use a startup probe with high failure threshold (30) for slow-starting apps instead of a high initialDelaySeconds on the liveness probe.

Container Apps Deployment

# Update with new image
az containerapp update \
  --name myapp \
  --resource-group myrg \
  --image myregistry.azurecr.io/myapp:v1.2.3

# Scale configuration
az containerapp update \
  --name myapp \
  --resource-group myrg \
  --min-replicas 1 \
  --max-replicas 10

Azure App Service

11-Step Deployment Pipeline

Typical App Service deployment takes ~7 minutes:

StepDurationAction
15sAuthenticate to Azure
210sValidate resource group exists
330sBuild application
415sRun tests
520sPackage artifacts
610sUpload to staging slot
760sWarm up staging slot
85sRun smoke tests on staging
930sSwap staging → production
1010sValidate production health
115sTag release in source control

Rule: Always use staging slots for zero-downtime deployment. Direct-to-production deployments cause cold-start downtime.

Production Readiness Checklist

CategoryRequirementWhy
ComputeP1v3 or higherBurstable tiers have CPU throttling
NetworkingVNet integrationIsolate from public internet
DataPrivate endpoints for storage/DBNo public connection strings
IdentityManaged identity (no connection strings)Eliminates secret rotation
MonitoringApplication Insights enabledObservability
ScalingAuto-scale rules configuredHandle load spikes
BackupAutomated backup policyDisaster recovery
SSLCustom domain + managed certificateTrust and security

Security Posture Assessment

Pass/Fail Matrix

Use a matrix to track security controls across all resources:

ControlApp ServiceSQL DBStorageKey Vault
Managed Identity
Private Endpoint
Diagnostic Logs
RBAC (no keys)
Encryption at Rest

Rule: Any ❌ in the matrix is a tracked remediation item with a priority (P0-P3) and SLA.

Rate Limiting

Spread vs. Burst

For API calls and deployment operations:

StrategyPatternUse When
Spread10 calls/sec evenly spacedSustained throughput
Burst100 calls then waitQuick batch operations

Rule: Prefer spread over burst for production workloads. Azure APIs throttle based on request rate, and burst patterns hit throttle limits earlier than spread patterns with the same total throughput.

Retry Pattern

async function withRetry<T>(
  fn: () => Promise<T>,
  maxRetries = 3,
  baseDelay = 1000
): Promise<T> {
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
    try {
      return await fn();
    } catch (err: any) {
      if (attempt === maxRetries) throw err;
      if (err.statusCode === 429) {
        // Use Retry-After header if available
        const delay = err.headers?.['retry-after']
          ? parseInt(err.headers['retry-after']) * 1000
          : baseDelay * Math.pow(2, attempt);
        await new Promise(r => setTimeout(r, delay));
      } else {
        throw err; // Don't retry non-throttle errors
      }
    }
  }
  throw new Error('Unreachable');
}

Multi-Subscription Management

Folder Organization

For organizations with multiple Azure subscriptions:

azure/
├── production/
│   ├── main.bicep
│   └── parameters.prod.json
├── staging/
│   ├── main.bicep
│   └── parameters.staging.json
├── development/
│   └── parameters.dev.json
└── shared/
    ├── modules/          # Shared Bicep modules
    └── policies/         # Azure Policy definitions

Resource Inventory

Before any infrastructure changes, document what exists:

# List all resources in subscription
az resource list --subscription "My Subscription" \
  --output table \
  --query "[].{Name:name, Type:type, RG:resourceGroup, Location:location}"

# Export to JSON for diff tracking
az resource list --subscription "My Subscription" -o json > inventory.json

Subscription Documentation Template

Each subscription should have a living document with:

SectionContent
PurposeWhat this subscription is for
OwnerTeam/person responsible
BudgetMonthly spend limit and alerts
ResourcesLink to inventory command output
AccessRBAC assignments and justification
NetworkingVNet topology, peering, DNS zones

Known Gotchas

Mail.Send on Corporate Tenants

Microsoft 365 corporate tenants often block Mail.Send permission for third-party apps. If your app needs to send email:

  1. Check tenant admin consent policies first
  2. Consider SendMail via Graph with delegated (not application) permissions
  3. Have a fallback (SMTP, SendGrid) for blocked tenants
  4. Document the limitation clearly for users

Azure CLI Context

# Always verify which subscription is active
az account show --query "{Name:name, Id:id}" -o table

# Set explicitly before operations
az account set --subscription "Target Subscription"

Rule: Never assume the correct subscription is active. Always verify or set explicitly in scripts.

Infrastructure as Code

Bicep Best Practices for Deployment

PracticeWhy
Use modules for reusable componentsDRY principle
Parameters file per environmentEnvironment isolation
@secure() decorator for secretsPrevents logging
existing keyword for referencesNo accidental recreation
What-if before deployCatch unintended changes
# Always preview changes before deploying
az deployment group what-if \
  --resource-group myrg \
  --template-file main.bicep \
  --parameters @parameters.prod.json

When not to use it

  • Direct-to-production deployments
  • Assuming active subscription context

Prerequisites

Azure CLIAzure subscription

Limitations

  • Requires explicit subscription setting
  • SWA preview environment default behavior

How it compares

Provides specific production-hardened patterns and rules rather than generic deployment scripts.

Compared to similar skills

azure-deployment-operations side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
azure-deployment-operations (this skill)04moReviewIntermediate
ado-create-wif03moReviewIntermediate
azure-functions105moReviewIntermediate
azure-deployment-preflight76moReviewAdvanced

Try saying

Example prompts that trigger this skill in your AI assistant.

You might also like

ado-create-wif

alexander-kastil

Automate creation of Azure DevOps workload identity federation service connections. Use this when users need to create or delete Azure service connections with workload identity federation.

00

azure-functions

aj-geddes

Create serverless functions on Azure with triggers, bindings, authentication, and monitoring. Use for event-driven computing without managing infrastructure.

10104

azure-deployment-preflight

github

Performs comprehensive preflight validation of Bicep deployments to Azure, including template syntax validation, what-if analysis, and permission checks. Use this skill before any deployment to Azure to preview changes, identify potential issues, and ensure the deployment will succeed. Activate when users mention deploying to Azure, validating Bicep files, checking deployment permissions, previewing infrastructure changes, running what-if, or preparing for azd provision.

746

skypilot-multi-cloud-orchestration

davila7

Multi-cloud orchestration for ML workloads with automatic cost optimization. Use when you need to run training or batch jobs across multiple clouds, leverage spot instances with auto-recovery, or optimize GPU costs across providers.

10

aspire

davidortinau

**WORKFLOW SKILL** - Orchestrates Aspire applications using the Aspire CLI and MCP tools for running, debugging, deploying, and managing distributed apps. USE FOR: aspire run, aspire stop, aspire deploy, start aspire app, aspire describe, list aspire integrations, debug aspire issues, view aspire lo

00

azure-observability-baseline

Insightpulseai

Wire Azure-native monitoring for Odoo on ACA with Application Insights, Log Analytics, and alert rules

00

Search skills

Search the agent skills registry