This guide walks you through deploying the Container Migration Solution Accelerator to Azure. The deployment process takes approximately 10-15 minutes for the default Development/Testing configuration and includes both infrastructure provisioning and application setup.
🆘 Need Help? If you encounter any issues during deployment, check our Troubleshooting Guide for solutions to common problems.
Ensure you have access to an Azure subscription with the following permissions:
| Required Permission/Role | Scope | Purpose |
|---|---|---|
| Contributor | Subscription level | Create and manage Azure resources |
| User Access Administrator | Subscription level | Manage user access and role assignments |
| Role Based Access Control | Subscription/Resource Group level | Configure RBAC permissions |
| App Registration Creation | Azure Active Directory | Create and configure authentication |
🔍 How to Check Your Permissions:
Azure Portal
- Go to Azure Portal
- Navigate to Subscriptions (search for "subscriptions" in the top search bar)
- Click on your target subscription
- In the left menu, click Access control (IAM)
- Scroll down to see the table with your assigned roles - you should see:
- Contributor
- User Access Administrator
- Role Based Access Control Administrator (or similar RBAC role)
For App Registration permissions:
- Go to Microsoft Entra ID → Manage → App registrations
- Try clicking New registration
- If you can access this page, you have the required permissions
- Cancel without creating an app registration
📖 Detailed Setup: Follow Azure Account Set Up for complete configuration.
Required Azure Services:
- Azure AI Foundry
- Azure OpenAI Service
- Azure Blob Storage
- Azure Container Apps
- Azure Container Registry
- Azure App Configuration
- Azure Cosmos DB
- Azure Queue Storage
- o3 Model Capacity
Recommended Regions: East US, East US2, Australia East, UK South, France Central
🔍 Check Availability: Use Azure Products by Region to verify service availability.
💡 RECOMMENDED: Check your Azure OpenAI quota availability before deployment for optimal planning.
📖 Follow: Quota Check Instructions to ensure sufficient capacity.
Recommended Configuration:
- Default: 200k tokens (minimum)
- Optimal: 500k tokens (recommended for best performance)
Note: When you run
azd up, the deployment will automatically show you regions with available quota, so this pre-check is optional but helpful for planning purposes. You can customize these settings later in Step 3.3: Advanced Configuration.
📖 Adjust Quota: Follow Azure AI Model Quota Settings if needed.
Select one of the following options to deploy the Container Migration Solution Accelerator:
| Option | Best For | Prerequisites | Setup Time |
|---|---|---|---|
| GitHub Codespaces | Quick deployment, no local setup required | GitHub account | ~3-5 minutes |
| VS Code Dev Containers | Fast deployment with local tools | Docker Desktop, VS Code | ~5-10 minutes |
| VS Code Web | Quick deployment, no local setup required | Azure account | ~2-4 minutes |
| Local Environment | Enterprise environments, full control | All tools individually | ~15-30 minutes |
💡 Recommendation: For fastest deployment, start with GitHub Codespaces - no local installation required.
Option A: GitHub Codespaces (Easiest)
- Click the badge above (may take several minutes to load)
- Accept default values on the Codespaces creation page
- Wait for the environment to initialize (includes all deployment tools)
- Proceed to Step 3: Configure Deployment Settings
Option B: VS Code Dev Containers
Prerequisites:
- Docker Desktop installed and running
- VS Code with Dev Containers extension
Steps:
- Start Docker Desktop
- Click the badge above to open in Dev Containers
- Wait for the container to build and start (includes all deployment tools)
- Proceed to Step 3: Configure Deployment Settings
Option C: Visual Studio Code Web
-
Click the badge above (may take a few minutes to load)
-
Sign in with your Azure account when prompted
-
Select the subscription where you want to deploy the solution
-
Wait for the environment to initialize (includes all deployment tools)
-
When prompted in the VS Code Web terminal, choose one of the available options shown below:
-
Proceed to Step 3: Configure Deployment Settings
Option D: Local Environment
Required Tools:
Setup Steps:
- Install all required deployment tools listed above
- Clone the repository:
azd init -t microsoft/Container-Migration-Solution-Accelerator/
- Open the project folder in your terminal
- Proceed to Step 3: Configure Deployment Settings
PowerShell Users: If you encounter script execution issues, run:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy BypassReview the configuration options below. You can customize any settings that meet your needs, or leave them as defaults to proceed with a standard deployment.
| Aspect | Development/Testing (Default) | Production |
|---|---|---|
| Configuration File | main.parameters.json (sandbox) |
Copy main.waf.parameters.json to main.parameters.json |
| Security Controls | Minimal (for rapid iteration) | Enhanced (production best practices) |
| Cost | Lower costs | Cost optimized |
| Use Case | POCs, development, testing | Production workloads |
| Framework | Basic configuration | Well-Architected Framework |
| Features | Core functionality | Reliability, security, operational excellence |
To use production configuration:
Copy the contents from the production configuration file to your main parameters file:
Option 1: Manual Copy (Recommended for beginners)
- Navigate to the
infrafolder in your project - Open
main.waf.parameters.jsonin a text editor (like Notepad, VS Code, etc.) - Select all content (Ctrl+A) and copy it (Ctrl+C)
- Open
main.parameters.jsonin the same text editor - Select all existing content (Ctrl+A) and paste the copied content (Ctrl+V)
- Save the file (Ctrl+S)
Option 2: Using Command Line
For Linux/macOS/Git Bash:
# Copy contents from production file to main parameters file
cat infra/main.waf.parameters.json > infra/main.parameters.jsonFor Windows PowerShell:
# Copy contents from production file to main parameters file
Get-Content infra/main.waf.parameters.json | Set-Content infra/main.parameters.jsonNote: This section only applies if you selected Production deployment type in section 3.1. VMs are not deployed in the default Development/Testing configuration.
By default, random GUIDs are generated for VM credentials. To set custom credentials:
azd env set AZURE_ENV_VM_ADMIN_USERNAME <your-username>
azd env set AZURE_ENV_VM_ADMIN_PASSWORD <your-password>Configurable Parameters
Customize these settings by following Parameter Customization Guide:
| Setting | Description | Default |
|---|---|---|
| Azure Region | Primary deployment region | Resource Group location |
| Secondary Location | Fallback region for Cosmos DB | - |
| Deployment Type | Infrastructure configuration | GlobalStandard |
| o3 Model | AI model selection | o3 |
| o3 Model Version | Model version | 2025-04-16 |
| o3 Model Capacity | Token capacity | 200k |
Reuse Existing Resources
To optimize costs and integrate with your existing Azure infrastructure, you can configure the solution to reuse compatible resources already deployed in your subscription.
Supported Resources for Reuse:
-
Log Analytics Workspace: Integrate with your existing monitoring infrastructure by reusing an established Log Analytics workspace for centralized logging and monitoring. Configuration Guide
-
Azure AI Foundry Project: Leverage your existing AI Foundry project and deployed models to avoid duplication and reduce provisioning time. Configuration Guide
Key Benefits:
- Cost Optimization: Eliminate duplicate resource charges
- Operational Consistency: Maintain unified monitoring and AI infrastructure
- Faster Deployment: Skip resource creation for existing compatible services
- Simplified Management: Reduce the number of resources to manage and monitor
Important Considerations:
- Ensure existing resources meet the solution's requirements and are in compatible regions
- Review access permissions and configurations before reusing resources
- Consider the impact on existing workloads when sharing resources
💡 Before You Start: If you encounter any issues during deployment, check our Troubleshooting Guide for common solutions.
azd auth loginFor specific tenants:
azd auth login --tenant-id <tenant-id>Finding Tenant ID:
- Open the Azure Portal.
- Navigate to Microsoft Entra ID from the left-hand menu.
- Under the Overview section, locate the Tenant ID field. Copy the value displayed.
azd upDuring deployment, you'll be prompted for:
- Environment name (e.g., "conmig") - Must be 3-16 characters long, alphanumeric only
- Azure subscription selection
- Region selection (choose one with adequate quota)
Expected Duration: 4-6 minutes
Deployment Issues: If you encounter errors or timeouts, try a different region as there may be capacity constraints. For detailed error solutions, see our Troubleshooting Guide.
After successful deployment:
- Open Azure Portal
- Navigate to your resource group
- Find the Container App with "frontend" in the name
- Copy the Application URI
This step is mandatory for application access:
- Follow App Authentication Configuration
- Wait up to 10 minutes for authentication changes to take effect
- Access your application using the URL from Step 4.3
- Upload sample YAML files from the
/datafolder - Test the migration functionality
azd downNote: If you deployed with
enableRedundancy=trueand Log Analytics workspace replication is enabled, you must first disable replication before runningazd downelse resource group delete will fail. Follow the steps in Handling Log Analytics Workspace Deletion with Replication Enabled, wait until replication returnsfalse, then runazd down.
If deployment fails or you need to clean up manually:
- Follow Delete Resource Group Guide
If your deployment failed or encountered errors, here are the steps to recover:
Recover from Failed Deployment
If your deployment failed or encountered errors:
- Try a different region: Create a new environment and select a different Azure region during deployment
- Clean up and retry: Use
azd downto remove failed resources, thenazd upto redeploy - Check troubleshooting: Review Troubleshooting Guide for specific error solutions
- Fresh start: Create a completely new environment with a different name
Example Recovery Workflow:
# Remove failed deployment (optional)
azd down
# Create new environment (3-16 chars, alphanumeric only)
azd env new conmigretry
# Deploy with different settings/region
azd upIf you need to deploy to a different region, test different configurations, or create additional environments:
Create a New Environment
Create Environment Explicitly:
# Create a new named environment (3-16 characters, alphanumeric only)
azd env new <new-environment-name>
# Select the new environment
azd env select <new-environment-name>
# Deploy to the new environment
azd upExample:
# Create a new environment for production (valid: 3-16 chars)
azd env new conmigprod
# Switch to the new environment
azd env select conmigprod
# Deploy with fresh settings
azd upEnvironment Name Requirements:
- Length: 3-16 characters
- Characters: Alphanumeric only (letters and numbers)
- Valid examples:
conmig,test123,myappdev,prod2024- Invalid examples:
co(too short),my-very-long-environment-name(too long),test_env(underscore not allowed),myapp-dev(hyphen not allowed)
Switch Between Environments
List Available Environments:
azd env listSwitch to Different Environment:
azd env select <environment-name>View Current Environment:
azd env get-values- Use descriptive names:
conmigdev,conmigprod,conmigtest(remember: 3-16 chars, alphanumeric only) - Different regions: Deploy to multiple regions for testing quota availability
- Separate configurations: Each environment can have different parameter settings
- Clean up unused environments: Use
azd downto remove environments you no longer need
🚀 Get Started: Follow the Sample Workflow to explore the application features.
📚 Learn More:
- 🐛 Issues: Check Troubleshooting Guide
- 💬 Support: Review Support Guidelines
- 🔧 Development: See Contributing Guide
To Deploy your local changes rename the below files.
Rename azure.yaml to azure_custom2.yaml and azure_custom.yaml to azure.yaml.
Go to infra directory
Rename main.bicep to main_custom2.bicep and main_custom.bicep to main.bicep. Continue with the deploying steps.
