AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
Azure Cloud Migrate provides a structured, multi-phase workflow for transitioning applications from various cloud platforms to Azure. It focuses on assessing the current architecture, mapping services to Azure equivalents, and performing the necessary code and configuration conversions. The skill ensures a methodical approach by requiring an assessment report before any migration actions occur, and it provides specific guidance for common migration paths such as AWS Lambda to Azure Functions, Heroku to App Service, and Kubernetes to Container Apps.
What it does
- Generates comprehensive migration assessment reports for cross-cloud workloads.
- Maps source platform services, compute configurations, and dependencies to Azure equivalents.
- Provides guidance for converting application code and configuration files.
- Audits source code for platform-specific service discovery patterns.
- Creates architecture diagrams for both current and target states.
- Tracks migration progress and provides resource-level status updates.
When to use it
- When planning to migrate workloads from AWS Lambda, Elastic Beanstalk, or Fargate to Azure.
- When moving applications from Heroku or Google App Engine to Azure App Service.
- When transitioning Kubernetes or Cloud Run deployments to Azure Container Apps.
- When you need a structured assessment of migration readiness and effort.
Advantages
- Ensures a consistent, step-by-step migration process.
- Reduces risk by requiring a detailed assessment report before code changes.
- Provides clear mapping between source platform features and Azure services.
- Includes specific checks for common migration pitfalls like hardcoded service discovery.
Usage examples
- “Assess my current AWS Lambda project for migration to Azure Functions.”
- The agent will analyze the Lambda project, map the services to Azure Functions, and generate a migration assessment report in the output directory.
- “Migrate my Heroku application to Azure App Service.”
- The agent will perform an assessment, guide the conversion of configuration files, and assist in setting up the application for Azure App Service.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/microsoft/azure-cloud-migrate/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip azure-cloud-migrate.zip -d .agents/skills
Documentation by Microsoft
Azure Cloud Migrate
This skill handles assessment and code migration of existing cloud workloads to Azure.
Rules
Follow phases sequentially — do not skip
Generate assessment before any code migration
Load the scenario reference and follow its rules
Use
mcp_azure_mcp_get_azure_bestpracticesandmcp_azure_mcp_documentationMCP toolsUse the latest supported runtime for the target service
Destructive actions require
ask_user— functions global-rules | app-service global-rulesReport progress to user — During long-running operations (deployments, image pushes), provide resource-level status updates so the user is never left waiting without feedback — see workflow-details.md
Audit service discovery in app code — Kubernetes DNS names (e.g.,
http://order-service:3001) do not resolve in Container Apps. During assessment, scan source code for hardcoded hostnames/ports in HTTP clients and flag them for env-var-driven URL injection
Migration Scenarios
| Source | Target | Reference |
|---|---|---|
| AWS Lambda | Azure Functions | lambda-to-functions.md (assessment, code-migration) |
| AWS Elastic Beanstalk | Azure App Service | beanstalk-to-app-service.md |
| Heroku | Azure App Service | heroku-to-app-service.md |
| Google App Engine | Azure App Service | app-engine-to-app-service.md |
| AWS Fargate (ECS) | Azure Container Apps | fargate-to-container-apps.md (assessment, deployment) |
| Kubernetes (GKE/EKS/Self-hosted) | Azure Container Apps | k8s-to-container-apps.md |
| GCP Cloud Run | Azure Container Apps | cloudrun-to-container-apps.md |
| Spring Boot (Azure Spring Apps/VMs) | Azure Container Apps | spring-apps-to-aca.md |
No matching scenario? Use
mcp_azure_mcp_documentationandmcp_azure_mcp_get_azure_bestpracticestools.
Output Directory
All output goes to <workspace-root-basename>-azure/ at workspace root, where <workspace-root-basename> is the name of the top-level workspace directory itself (NOT a subdirectory within it). Never modify the source directory.
Steps
Create
<workspace-root-basename>-azure/at workspace rootAssess — Analyze source, map services, generate report using the scenario-specific assessment guide → functions assessment | app-service assessment
Migrate — Convert code/config using the scenario-specific migration guide → functions code-migration | app-service code-migration
Ask User — "Migration complete. Test locally or deploy to Azure?"
Hand off to azure-prepare for infrastructure, testing, and deployment
Track progress in migration-status.md — see workflow-details.md.
Files
- ATTRIBUTION.mdAdded by AutoGineer989 B
- LICENSELicence file added by AutoGineer1.1 KiB
- SKILL.md4.3 KiB
- references/services/app-service/app-engine-to-app-service.md7.1 KiB
- references/services/app-service/assessment.md5.2 KiB
- references/services/app-service/beanstalk-to-app-service.md6.4 KiB
- references/services/app-service/code-migration.md5.0 KiB
- references/services/app-service/global-rules.md2.8 KiB
- references/services/app-service/heroku-to-app-service.md7.5 KiB
- references/services/container-apps/assessment-guide.md7.0 KiB
- references/services/container-apps/cloudrun-assessment-guide.md2.5 KiB
- references/services/container-apps/cloudrun-deployment-guide.md7.9 KiB
- references/services/container-apps/cloudrun-to-container-apps.md2.2 KiB
- references/services/container-apps/deployment-guide.md9.6 KiB
- references/services/container-apps/fargate-assessment-guide.md2.4 KiB
- references/services/container-apps/fargate-deployment-guide.md10.1 KiB
- references/services/container-apps/fargate-to-container-apps.md4.0 KiB
- references/services/container-apps/k8s-to-container-apps.md4.9 KiB
- references/services/container-apps/spring-apps-to-aca.md3.8 KiB
- references/services/container-apps/spring-assessment-guide.md5.2 KiB
- references/services/container-apps/spring-dependency-patterns.md1.2 KiB
- references/services/container-apps/spring-deployment-guide.md15.1 KiB
- references/services/functions/assessment.md6.3 KiB
- references/services/functions/code-migration.md6.0 KiB
- references/services/functions/global-rules.md3.3 KiB
- references/services/functions/lambda-to-functions.md10.2 KiB
- references/services/functions/runtimes/csharp.md5.5 KiB
- references/services/functions/runtimes/java.md6.4 KiB
- references/services/functions/runtimes/javascript.md8.5 KiB
- references/services/functions/runtimes/powershell.md5.0 KiB
- references/services/functions/runtimes/python.md6.4 KiB
- references/services/functions/runtimes/typescript.md3.5 KiB
- references/workflow-details.md2.3 KiB
references/services/functions/lambda-to-functions.md
AWS Lambda to Azure Functions Migration
Detailed guidance for migrating AWS Lambda functions to Azure Functions.
Overview
| AWS Service | Azure Equivalent |
|---|---|
| Lambda | Azure Functions |
| API Gateway | Azure Functions HTTP Trigger / API Management |
| S3 | Azure Blob Storage |
| S3 Event | Azure Blob Storage + Event Grid |
| DynamoDB | Cosmos DB |
| SQS | Azure Service Bus / Storage Queue |
| SNS | Azure Event Grid |
| EventBridge | Azure Event Grid |
| CloudWatch | Application Insights / Azure Monitor |
| IAM Roles | Managed Identity + Azure RBAC |
| CloudFormation / SAM | Bicep / ARM Templates |
| Rekognition | Azure AI Computer Vision (Image Analysis) |
Programming Model Mapping
| AWS Lambda | Azure Functions |
|---|---|
exports.handler | app.http(), app.storageBlob(), etc. (v4) |
event object | request / blob / trigger-specific param |
context object | context (InvocationContext) |
callback | Return value |
function.json (v1-v3) | Inline bindings in code (v4 JS, v2 Python) |
Trigger Mapping
| AWS Trigger | Azure Trigger | Notes |
|---|---|---|
| API Gateway (REST/HTTP) | app.http() | Direct equivalent |
| S3 Event | app.storageBlob() | Use source: 'EventGrid' for reliability |
| SQS | app.storageQueue() or app.serviceBusQueue() | Service Bus for advanced scenarios |
| SNS | app.eventGrid() | Event Grid is push-based |
| EventBridge | app.eventGrid() | Map event patterns to filters |
| CloudWatch Events (Scheduled) | app.timer() | NCRONTAB expressions |
| DynamoDB Streams | Cosmos DB Change Feed trigger | Via app.cosmosDB() |
Runtime-Specific Migration Patterns
For language-specific migration rules, correct/incorrect patterns, and code examples, see the runtime reference for the target language:
| Runtime | Migration Patterns |
|---|---|
| JavaScript (Node.js v4) | runtimes/javascript.md — Lambda Migration Rules |
| Python (v2) | runtimes/python.md — Lambda Migration Rules |
| TypeScript (v4) | runtimes/typescript.md |
| C# (Isolated Worker) | runtimes/csharp.md |
| Java | runtimes/java.md |
| PowerShell | runtimes/powershell.md |
Project Structure
REQUIRED for Azure Functions:
src/
├── app.js (or function_app.py) # Main entry point
├── host.json # Function host configuration
├── local.settings.json # Local development settings
├── package.json (or requirements.txt)
├── [helper-modules] # Business logic
└── tests/ # Test files
❌ NEVER create:
├── [functionName]/ # No individual function directories
│ ├── function.json # No function.json (JS v4, Python v2)
│ └── index.jsEnvironment Variables
✅ Use managed identity connections for Azure Functions storage:
AzureWebJobsStorage__blobServiceUri
AzureWebJobsStorage__queueServiceUri
AzureWebJobsStorage__tableServiceUri
✅ Use specific endpoint variables for other services:
COMPUTER_VISION_ENDPOINT
STORAGE_ACCOUNT_URL
SOURCE_CONTAINER_NAME
❌ Avoid:
CONNECTION_STRING (use managed identity)
API_KEY (use managed identity)Reference Links
Flex Consumption + Blob Trigger with EventGrid Source
⚠️ CRITICAL: When deploying blob triggers with
source: 'EventGrid'on Flex Consumption, there are three infrastructure requirements that are NOT automatically handled and will cause silent trigger failures if missed.
1. Always-Ready Instances (Bootstrap Problem)
On Flex Consumption, trigger groups only start when there's work to do. But the blob extension needs to be running to create the Event Grid subscription that would deliver work — a chicken-and-egg problem.
Solution: Configure alwaysReady for the blob trigger group in the function app's scaleAndConcurrency:
// In api.bicep — functionAppConfig section
scaleAndConcurrency: {
alwaysReady: [
{
name: 'blob'
instanceCount: 1
}
]
instanceMemoryMB: 2048
maximumInstanceCount: 100
}Without this, the trigger group never starts → Event Grid subscription never gets created → no events are delivered → function never triggers.
2. Queue Endpoint Required
The blob extension internally uses Storage Queues for poison-message tracking when source: 'EventGrid' is configured. Without the queue endpoint, the function fails to index with:
Unable to find matching constructor while trying to create an instance of QueueServiceClient.
Expected: serviceUri. Found: credential, clientId, blobServiceUriSolution: Always enable the queue endpoint alongside blob when using EventGrid source:
// In identity-based storage configuration
AzureWebJobsStorage__blobServiceUri: storageAccount.properties.primaryEndpoints.blob
AzureWebJobsStorage__queueServiceUri: storageAccount.properties.primaryEndpoints.queue // REQUIRED for EventGrid source
AzureWebJobsStorage__credential: 'managedidentity'
AzureWebJobsStorage__clientId: managedIdentityClientIdAlso assign Storage Queue Data Contributor RBAC role to the UAMI.
3. Event Grid Subscription via Bicep (Not CLI)
Do NOT create Event Grid event subscriptions via CLI. The az eventgrid system-topic event-subscription create command requires a webhook validation handshake that consistently fails on Flex Consumption with "response code Unknown" (timeout during cold start).
Solution: Deploy the Event Grid system topic and event subscription as Bicep resources. ARM handles the webhook validation internally and reliably:
// eventGrid.bicep
resource systemTopic 'Microsoft.EventGrid/systemTopics@2024-06-01-preview' = {
name: 'evgt-${storageAccountName}'
location: location
properties: {
source: storageAccount.id
topicType: 'Microsoft.Storage.StorageAccounts'
}
}
resource eventSubscription 'Microsoft.EventGrid/systemTopics/eventSubscriptions@2024-06-01-preview' = {
parent: systemTopic
name: 'blob-trigger-sub'
properties: {
destination: {
endpointType: 'WebHook'
properties: {
// ARM resolves system key and handles validation at deployment time
endpointUrl: 'https://${functionApp.properties.defaultHostName}/runtime/webhooks/blobs?functionName=${functionName}&code=${listKeys('${functionApp.id}/host/default', '2023-12-01').systemKeys.blobs_extension}'
}
}
filter: {
includedEventTypes: [ 'Microsoft.Storage.BlobCreated' ]
subjectBeginsWith: '/blobServices/default/containers/${sourceContainerName}/'
}
}
}RBAC requirement: Assign EventGrid EventSubscription Contributor role to the UAMI.
User Assigned Managed Identity (UAMI) Auth Patterns
DefaultAzureCredential with UAMI
When using UAMI, DefaultAzureCredential() without arguments tries SystemAssigned first and fails. Always pass the client ID:
const { DefaultAzureCredential } = require('@azure/identity');
const credential = new DefaultAzureCredential({
managedIdentityClientId: process.env.AZURE_CLIENT_ID
});Add AZURE_CLIENT_ID as an app setting pointing to the UAMI client ID:
appSettings: {
AZURE_CLIENT_ID: managedIdentity.outputs.clientId
}Identity-Linked Storage Connection
AzureWebJobsStorage__credential: 'managedidentity'
AzureWebJobsStorage__clientId: managedIdentityClientId
AzureWebJobsStorage__blobServiceUri: storageAccount.properties.primaryEndpoints.blob
AzureWebJobsStorage__queueServiceUri: storageAccount.properties.primaryEndpoints.queueRequired RBAC Roles for Face Blur Pattern
| Role | Scope | Purpose |
|---|---|---|
| Storage Blob Data Owner | Storage Account | Read source blobs, write destination blobs |
| Storage Queue Data Contributor | Storage Account | Poison-message queue for blob extension |
| EventGrid EventSubscription Contributor | Resource Group | Create/manage Event Grid subscriptions |
| Cognitive Services User | Cognitive Services Account | Call Computer Vision API |
| Monitoring Metrics Publisher | Application Insights | Emit telemetry |
AWS Rekognition → Azure AI Computer Vision
| AWS | Azure |
|---|---|
@aws-sdk/client-rekognition | @azure-rest/ai-vision-image-analysis |
DetectFaces | Image Analysis People feature |
FaceDetails[].BoundingBox (relative 0-1) | peopleResult.values[].boundingBox (pixel coordinates) |
⚠️ Package version:
@azure-rest/ai-vision-image-analysisis still in beta. The^1.0.0semver does NOT resolve. Pin explicitly:"@azure-rest/ai-vision-image-analysis": "1.0.0-beta.3"
Coordinate Conversion
AWS Rekognition returns relative coordinates (0-1). Azure AI returns pixel coordinates. Convert for consistent face processing:
const sharp = require('sharp');
const metadata = await sharp(imageBuffer).metadata();
const faces = result.body.peopleResult.values.map(person => ({
BoundingBox: {
Width: person.boundingBox.width / metadata.width,
Height: person.boundingBox.height / metadata.height,
Left: person.boundingBox.x / metadata.width,
Top: person.boundingBox.y / metadata.height
}
}));Auth: Use UAMI (No API Keys)
// computerVision.bicep
resource computerVision 'Microsoft.CognitiveServices/accounts@2024-10-01' = {
kind: 'ComputerVision'
properties: {
disableLocalAuth: true // Enterprise policy compliance — no API keys
}
}Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Security
What our scanner noticed· Low risk
- Instructions that use the network
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- Microsoft
- Publisher
- Microsoft (Official)
- Source
- microsoft/skills · .github/plugins/azure-skills/skills/azure-cloud-migrate · commit 0696600
- Licence
- MIT License (redistribution allowed)
- LICENSE (added by AutoGineer from .github/plugins/azure-skills/LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
- Also distributed in
- microsoft/azure-skills
AutoGineer is not affiliated with or endorsed by Microsoft.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download azure-cloud-migrate.zip