Prepare Azure apps for deployment (infra Bicep/Terraform, azure.yaml, Dockerfiles). Use for create/modernize or create+deploy; not cross-cloud migration (use azure-cloud-migrate). WHEN: "create app", "build web app", "create API", "create serverless HTTP API", "create frontend", "create back end", "build a service", "modernize application", "update application", "add authentication", "add caching", "host on Azure", "create and deploy", "deploy to Azure", "deploy to Azure using Terraform", "deploy to Azure App Service", "deploy to Azure App Service using Terraform", "deploy to Azure Container Apps", "deploy to Azure Container Apps using Terraform", "generate Terraform", "generate Bicep", "function app", "timer trigger", "service bus trigger", "event-driven function", "containerized Node.js app", "social media app", "static portfolio website", "todo list with frontend and API", "prepare my Azure application to use Key Vault", "managed identity".
Install with Tessl CLI
npx tessl i github:microsoft/github-copilot-for-azure --skill azure-prepare90
Does it follow best practices?
If you maintain this skill, you can automatically optimize it using the tessl CLI to improve its score:
npx tessl skill review --optimize ./path/to/skillEvaluation — 98%
↑ 1.24xAgent success when using this skill
Validation for skill structure
.NET Aspire deployment initialization
Plan created first
100%
100%
Uses azd init --from-code
0%
100%
Includes -e flag
0%
100%
Sets AZURE_SUBSCRIPTION_ID
100%
100%
Sets AZURE_LOCATION
100%
100%
No manual azure.yaml
100%
100%
No manual infra/ files
100%
100%
Subscription confirmed in plan
100%
100%
Verifies env after init
100%
100%
Next step mentions azure-validate
0%
100%
Without context: $0.4427 · 2m 22s · 20 turns · 25 in / 7,674 out tokens
With context: $0.7944 · 2m 28s · 29 turns · 1,470 in / 8,229 out tokens
AZD Bicep infrastructure generation
main.bicep targetScope subscription
100%
100%
Module targetScope resourceGroup
0%
100%
Resource naming pattern
100%
100%
azd-env-name tag on resource group
100%
100%
azd-service-name tag on hosting resource
100%
100%
AZURE_RESOURCE_GROUP output
0%
100%
AZURE_CONTAINER_REGISTRY_ENDPOINT output
100%
100%
Module accepts name/location/tags
62%
50%
No hardcoded IDs
100%
100%
ManagedIdentityCredential in production
100%
100%
DefaultAzureCredential for dev
100%
100%
No secrets in code
100%
100%
Container Apps CPU json() syntax
100%
100%
Without context: $0.5490 · 2m 5s · 26 turns · 81 in / 8,836 out tokens
With context: $0.8834 · 2m 28s · 31 turns · 67 in / 9,538 out tokens
AZD Terraform recipe and azure.yaml configuration
Plan created
100%
100%
AZD+Terraform recipe
100%
100%
azure.yaml infra provider
100%
100%
Both services in azure.yaml
100%
100%
Correct web host type
100%
100%
Correct web dist configuration
100%
100%
Valid web language value
100%
100%
API uses containerapp host
100%
100%
Terraform outputs present
100%
100%
No hardcoded identifiers
100%
100%
Next step: azure-validate
0%
100%
Without context: $0.5444 · 2m 12s · 29 turns · 71 in / 9,327 out tokens
With context: $0.9242 · 2m 32s · 30 turns · 4,261 in / 9,356 out tokens
Table of Contents
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.