AZD Recipe
Azure Developer CLI workflow for preparing Azure deployments.
When to Use
- New projects, multi-service apps, want
azd up - Need environment management, auto-generated CI/CD
- Team prefers simplified deployment workflow
๐ก Tip: azd supports both Bicep and Terraform as IaC providers. Choose based on your team's expertise and requirements.
IaC Provider Options
| Provider | Use When |
|---|---|
| Bicep (default) | Azure-only, no existing IaC, want simplest setup |
| Terraform | Multi-cloud IaC, existing TF expertise, want azd simplicity |
For Terraform with azd: See terraform.md
Before Generation
REQUIRED: Research best practices before generating any files.
Check for Existing Codebase Patterns
โ ๏ธ CRITICAL: For existing codebases with special patterns, use azd init --from-code -e <environment-name> instead of manual generation.
| Pattern | Detection | Action |
|---|---|---|
| .NET Aspire | *.AppHost.csproj or Aspire.Hosting package | Use azd init --from-code -e <environment-name> โ aspire.md |
| Existing azure.yaml | azure.yaml present | MODIFY mode - update existing config |
| New project | No azure.yaml, no special patterns | Manual generation (steps below) |
๐ก Note: The
-e <environment-name>flag is required when runningazd init --from-codein non-interactive environments (agents, CI/CD pipelines). Without it, the command will fail with a prompt error.
References for Manual Generation
| Artifact | Reference |
|---|---|
| azure.yaml | Schema Guide |
| .NET Aspire projects | Aspire Guide |
| Terraform with azd | Terraform Guide |
| AZD IAC rules | IAC Rules |
| Azure Functions templates | Templates |
| Bicep best practices | mcp_bicep_get_bicep_best_practices |
| Bicep resource schema | mcp_bicep_get_az_resource_type_schema |
| Azure Verified Modules | mcp_bicep_list_avm_metadata + AVM module order |
| Terraform best practices | mcp_azure_mcp_azureterraformbestpractices |
| Dockerfiles | Docker Guide |
Generation Steps
For Bicep (default)
| # | Artifact | Reference |
|---|---|---|
| 1 | azure.yaml | Schema Guide |
| 2 | Application code | Entry points, health endpoints, config |
| 3 | Dockerfiles | Docker Guide (if containerized) |
| 4 | Infrastructure | ./infra/main.bicep + modules per IAC Rules |
For Terraform
| # | Artifact | Reference |
|---|---|---|
| 1 | azure.yaml with infra.provider: terraform | Terraform Guide |
| 2 | Application code | Entry points, health endpoints, config |
| 3 | Dockerfiles | Docker Guide (if containerized) |
| 4 | Terraform files | ./infra/*.tf per Terraform Guide |
Outputs
For Bicep
| Artifact | Path |
|---|---|
| azure.yaml | ./azure.yaml |
| App Code | src/<service>/* |
| Dockerfiles | src/<service>/Dockerfile (if containerized) |
| Infrastructure | ./infra/ (Bicep files) |
For Terraform
| Artifact | Path |
|---|---|
| azure.yaml | ./azure.yaml (with infra.provider: terraform) |
| App Code | src/<service>/* |
| Dockerfiles | src/<service>/Dockerfile (if containerized) |
| Infrastructure | ./infra/ (Terraform files) |
References
- .NET Aspire Projects
- azure.yaml Schema
- .NET Aspire Apps
- Terraform with AZD
- Docker Configuration
- IAC Rules
Next
โ Update .azure/deployment-plan.md โ azure-validate