
Azure App Service
- 358 installs
- 305 repo stars
- Updated March 4, 2026
- aj-geddes/useful-ai-prompts
azure-app-service is a skill for deploying and managing web apps on Azure App Service with auto-scaling, deployment slots, SSL/TLS and monitoring.
About
A skill for deploying and managing web apps on Azure App Service. A developer uses it to host web applications, REST APIs and mobile backends with auto-scaling, deployment slots, SSL/TLS and monitoring. It provides Azure CLI quick-start commands and reference guides for CLI and Terraform configuration.
- Deploys and manages web apps on Azure App Service
- Covers auto-scaling, deployment slots, SSL/TLS and monitoring
- Includes Azure CLI and Terraform configuration references
Azure App Service by the numbers
- 358 all-time installs (skills.sh)
- Ranked #400 of 1,039 Cloud & Infrastructure skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
azure-app-service capabilities & compatibility
Requires an Azure account and paid App Service plan (docs use SKU P1V2); the skill itself is free.
- Capabilities
- ci cd · devops
- Works with
- azure · terraform
- Use cases
- devops · ci cd · api development
- Pricing
- Bring your own API key
What azure-app-service says it does
Deploy and manage web apps using Azure App Service with auto-scaling, deployment slots, SSL/TLS, and monitoring. Use for hosting web applications on Azure.
Azure App Service provides a fully managed platform for building and hosting web applications, REST APIs, and mobile backends.
npx skills add https://github.com/aj-geddes/useful-ai-prompts --skill azure-app-serviceAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 358 |
|---|---|
| repo stars | ★ 305 |
| Last updated | March 4, 2026 |
| Repository | aj-geddes/useful-ai-prompts ↗ |
What it does
Deploy and manage a web app on Azure App Service with auto-scaling, slots and monitoring.
Who is it for?
Hosting and scaling web apps, REST APIs and mobile backends on Azure App Service
Skip if: Kubernetes-only deployments, static sites on blob storage alone, or teams not using Microsoft Azure cloud.
When should I use this skill?
The user wants to deploy or host a web application, REST API or backend on Azure with auto-scaling
What you get
A deployed, auto-scaling Azure App Service with slots, HTTPS and Application Insights.
- az CLI deployment commands
- Terraform App Service config
- autoscaling and health-check setup
By the numbers
- 4 reference guides (CLI, Terraform, deployment, health check)
Files
Azure App Service
Table of Contents
Overview
Azure App Service provides a fully managed platform for building and hosting web applications, REST APIs, and mobile backends. Support multiple programming languages with integrated DevOps, security, and high availability.
When to Use
- Web applications (ASP.NET, Node.js, Python, Java)
- REST APIs and microservices
- Mobile app backends
- Static website hosting
- Production applications requiring scale
- Applications needing auto-scaling
- Multi-region deployments
- Containerized applications
Quick Start
Minimal working example:
# Login to Azure
az login
# Create resource group
az group create --name myapp-rg --location eastus
# Create App Service Plan
az appservice plan create \
--name myapp-plan \
--resource-group myapp-rg \
--sku P1V2 \
--is-linux
# Create web app
az webapp create \
--resource-group myapp-rg \
--plan myapp-plan \
--name myapp-web \
--deployment-container-image-name nodejs:18
# Configure app settings
az webapp config appsettings set \
--resource-group myapp-rg \
--name myapp-web \
--settings \
// ... (see reference guides for full implementation)Reference Guides
Detailed implementations in the references/ directory:
| Guide | Contents |
|---|---|
| App Service Creation with Azure CLI | App Service Creation with Azure CLI |
| Terraform App Service Configuration | Terraform App Service Configuration |
| Deployment Configuration | Deployment Configuration |
| Health Check Configuration | Health Check Configuration |
Best Practices
✅ DO
- Use deployment slots for zero-downtime deployments
- Enable Application Insights
- Configure autoscaling based on metrics
- Use managed identity for Azure services
- Enable HTTPS only
- Store secrets in Key Vault
- Monitor performance metrics
- Implement health checks
❌ DON'T
- Store secrets in configuration
- Disable HTTPS
- Ignore Application Insights
- Use single instance for production
- Deploy directly to production
- Ignore autoscaling configuration
App Service Creation with Azure CLI
App Service Creation with Azure CLI
# Login to Azure
az login
# Create resource group
az group create --name myapp-rg --location eastus
# Create App Service Plan
az appservice plan create \
--name myapp-plan \
--resource-group myapp-rg \
--sku P1V2 \
--is-linux
# Create web app
az webapp create \
--resource-group myapp-rg \
--plan myapp-plan \
--name myapp-web \
--deployment-container-image-name nodejs:18
# Configure app settings
az webapp config appsettings set \
--resource-group myapp-rg \
--name myapp-web \
--settings \
NODE_ENV=production \
PORT=8080 \
DATABASE_URL=postgresql://... \
REDIS_URL=redis://...
# Enable HTTPS only
az webapp update \
--resource-group myapp-rg \
--name myapp-web \
--https-only true
# Configure custom domain
az webapp config hostname add \
--resource-group myapp-rg \
--webapp-name myapp-web \
--hostname www.example.com
# Create deployment slot
az webapp deployment slot create \
--resource-group myapp-rg \
--name myapp-web \
--slot staging
# Swap slots
az webapp deployment slot swap \
--resource-group myapp-rg \
--name myapp-web \
--slot staging
# Get publish profile for deployment
az webapp deployment list-publish-profiles \
--resource-group myapp-rg \
--name myapp-web \
--query "[0].publishUrl"Deployment Configuration
Deployment Configuration
# .github/workflows/deploy.yml
name: Deploy to App Service
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: "18"
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
- name: Build
run: npm run build
- name: Deploy to Azure
uses: azure/webapps-deploy@v2
with:
app-name: myapp-web-prod
publish-profile: ${{ secrets.AZURE_PUBLISH_PROFILE }}
package: .
- name: Swap slots
uses: azure/CLI@v1
with:
azcliversion: 2.0.76
inlineScript: |
az webapp deployment slot swap \
--resource-group myapp-rg-prod \
--name myapp-web-prod \
--slot stagingHealth Check Configuration
Health Check Configuration
# Enable health check
az webapp config set \
--resource-group myapp-rg \
--name myapp-web \
--generic-configurations HEALTHCHECK_PATH=/health
# Monitor health
az monitor metrics list-definitions \
--resource /subscriptions/{subscription}/resourceGroups/myapp-rg/providers/Microsoft.Web/sites/myapp-webTerraform App Service Configuration
Terraform App Service Configuration
# app-service.tf
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 3.0"
}
}
}
provider "azurerm" {
features {}
}
variable "environment" {
default = "prod"
}
variable "location" {
default = "eastus"
}
# Resource group
resource "azurerm_resource_group" "main" {
name = "myapp-rg-${var.environment}"
location = var.location
}
# App Service Plan
resource "azurerm_service_plan" "main" {
name = "myapp-plan-${var.environment}"
location = azurerm_resource_group.main.location
resource_group_name = azurerm_resource_group.main.name
os_type = "Linux"
sku_name = "P1V2"
tags = {
environment = var.environment
}
}
# Log Analytics Workspace
resource "azurerm_log_analytics_workspace" "main" {
name = "myapp-logs-${var.environment}"
location = azurerm_resource_group.main.location
resource_group_name = azurerm_resource_group.main.name
sku = "PerGB2018"
retention_in_days = 30
}
# Application Insights
resource "azurerm_application_insights" "main" {
name = "myapp-insights-${var.environment}"
location = azurerm_resource_group.main.location
resource_group_name = azurerm_resource_group.main.name
application_type = "web"
retention_in_days = 30
workspace_id = azurerm_log_analytics_workspace.main.id
}
# Web App
resource "azurerm_linux_web_app" "main" {
name = "myapp-web-${var.environment}"
location = azurerm_resource_group.main.location
resource_group_name = azurerm_resource_group.main.name
service_plan_id = azurerm_service_plan.main.id
https_only = true
app_settings = {
WEBSITES_ENABLE_APP_SERVICE_STORAGE = false
DOCKER_ENABLE_CI = true
APPINSIGHTS_INSTRUMENTATIONKEY = azurerm_application_insights.main.instrumentation_key
APPLICATIONINSIGHTS_CONNECTION_STRING = azurerm_application_insights.main.connection_string
NODE_ENV = "production"
PORT = "8080"
}
site_config {
always_on = true
http2_enabled = true
minimum_tls_version = "1.2"
websockets_enabled = false
application_stack {
node_version = "18-lts"
}
cors {
allowed_origins = ["https://example.com"]
}
}
identity {
type = "SystemAssigned"
}
tags = {
environment = var.environment
}
}
# Deployment slot (staging)
resource "azurerm_linux_web_app_slot" "staging" {
name = "staging"
app_service_id = azurerm_linux_web_app.main.id
service_plan_id = azurerm_service_plan.main.id
https_only = true
app_settings = {
WEBSITES_ENABLE_APP_SERVICE_STORAGE = false
NODE_ENV = "staging"
PORT = "8080"
}
site_config {
always_on = true
http2_enabled = true
minimum_tls_version = "1.2"
application_stack {
node_version = "18-lts"
}
}
identity {
type = "SystemAssigned"
}
}
# Autoscale settings
resource "azurerm_monitor_autoscale_setting" "app_service" {
name = "app-service-autoscale"
location = azurerm_resource_group.main.location
resource_group_name = azurerm_resource_group.main.name
target_resource_id = azurerm_service_plan.main.id
profile {
name = "default"
capacity {
default = 2
minimum = 1
maximum = 5
}
rule {
metric_trigger {
metric_name = "CpuPercentage"
metric_resource_id = azurerm_service_plan.main.id
time_grain = "PT1M"
statistic = "Average"
time_window = "PT5M"
operator = "GreaterThan"
threshold = 75
}
scale_action {
direction = "Increase"
type = "ChangeCount"
value = 1
cooldown = "PT5M"
}
}
rule {
metric_trigger {
metric_name = "CpuPercentage"
metric_resource_id = azurerm_service_plan.main.id
time_grain = "PT1M"
statistic = "Average"
time_window = "PT5M"
operator = "LessThan"
threshold = 25
}
scale_action {
direction = "Decrease"
type = "ChangeCount"
value = 1
cooldown = "PT5M"
}
}
}
}
# Diagnostic settings
resource "azurerm_monitor_diagnostic_setting" "app_service" {
name = "app-service-logs"
target_resource_id = azurerm_linux_web_app.main.id
log_analytics_workspace_id = azurerm_log_analytics_workspace.main.id
enabled_log {
category = "AppServiceHTTPLogs"
}
enabled_log {
category = "AppServiceAntivirusScanAuditLogs"
}
metric {
category = "AllMetrics"
}
}
# Key Vault for secrets
resource "azurerm_key_vault" "main" {
name = "myappkv${var.environment}"
location = azurerm_resource_group.main.location
resource_group_name = azurerm_resource_group.main.name
tenant_id = data.azurerm_client_config.current.tenant_id
sku_name = "standard"
access_policy {
tenant_id = data.azurerm_client_config.current.tenant_id
object_id = azurerm_linux_web_app.main.identity[0].principal_id
secret_permissions = [
"Get",
"List"
]
}
tags = {
environment = var.environment
}
}
# Key Vault secrets
resource "azurerm_key_vault_secret" "database_url" {
name = "database-url"
value = "postgresql://user:pass@host/db"
key_vault_id = azurerm_key_vault.main.id
}
resource "azurerm_key_vault_secret" "api_key" {
name = "api-key"
value = "your-api-key-here"
key_vault_id = azurerm_key_vault.main.id
}
data "azurerm_client_config" "current" {}
output "app_url" {
value = "https://${azurerm_linux_web_app.main.default_hostname}"
}
output "app_insights_key" {
value = azurerm_application_insights.main.instrumentation_key
sensitive = true
}#!/bin/bash
# validate-schema.sh - Validate database schema
# Usage: ./validate-schema.sh <schema_file>
set -euo pipefail
SCHEMA_FILE="${{1:?Usage: $0 <schema_file>}}"
echo "Validating schema: $SCHEMA_FILE"
# TODO: Add schema validation
# - Check SQL syntax
# - Verify foreign key references
# - Check index definitions
# - Validate naming conventions
# - Check for missing constraints
echo "Schema validation complete."
-- Migration: [description]
-- Created: [date]
-- TODO: Customize for your migration framework
BEGIN;
-- Up migration
-- TODO: Add schema changes
-- CREATE TABLE IF NOT EXISTS ...
-- ALTER TABLE ...
-- Down migration (rollback)
-- TODO: Add rollback statements
-- DROP TABLE IF EXISTS ...
COMMIT;
Related skills
How it compares
Pick azure-app-service over generic cloud skills when you need Azure App Service-specific slots, health checks, and az CLI or Terraform patterns rather than container orchestration guides.
FAQ
What can you host on Azure App Service?
Web applications (ASP.NET, Node.js, Python, Java), REST APIs and microservices, mobile app backends, static sites and containerized apps.
What deployment best practices does the skill recommend?
Use deployment slots for zero-downtime deploys, enable Application Insights, configure autoscaling, enforce HTTPS only and store secrets in Key Vault.