Loading source
Pulling the file list, source metadata, and syntax-aware rendering for this listing.
Source from repo
Assess and migrate workloads from AWS, GCP, or other clouds to Azure services.
Files
Skill
Size
Entrypoint
Format
Open file
Syntax-highlighted preview of this file as included in the skill package.
references/services/app-service/app-engine-to-app-service.md
1# Google App Engine to Azure App Service Migration23Detailed guidance for migrating Google App Engine applications to Azure App Service.45## Service Mapping67| GCP Service | Azure Equivalent |8|-------------|------------------|9| App Engine (Standard) | Azure App Service (Standard/Premium plan) |10| App Engine (Flex) | Azure App Service (Premium v3) or Container Apps |11| App Engine Services | App Service apps (one per service) |12| `app.yaml` | `azure.yaml` + Bicep |13| Datastore / Firestore | Azure Cosmos DB |14| Cloud SQL (PostgreSQL) | Azure Database for PostgreSQL Flexible Server |15| Cloud SQL (MySQL) | Azure Database for MySQL Flexible Server |16| Cloud Storage | Azure Blob Storage |17| Cloud Tasks | Azure Service Bus / Durable Functions |18| Cloud Pub/Sub | Azure Service Bus / Event Grid |19| Memcache / Memorystore | Azure Cache for Redis |20| Cloud Scheduler | Azure Functions Timer trigger |21| Cloud CDN | Azure Front Door / Azure CDN |22| Cloud DNS | Azure DNS |23| Cloud Logging | Application Insights / Azure Monitor |24| Cloud Monitoring | Azure Monitor Metrics |25| Cloud Trace | Application Insights (distributed tracing) |26| Cloud IAM | Managed Identity + Azure RBAC |27| Cloud Build | GitHub Actions / Azure DevOps |28| Traffic Splitting | Deployment Slots (weighted routing) |29| Service Versions | Deployment Slots |30| Cloud KMS | Azure Key Vault |31| Secret Manager | Azure Key Vault |32| Cloud Endpoints | Azure API Management |33| Identity-Aware Proxy | Azure Front Door + Entra ID auth |34| VPC Connector | VNet Integration |3536## Standard vs Flex โ App Service Plan Mapping3738| App Engine Tier | App Service Equivalent | Notes |39|-----------------|------------------------|-------|40| Standard (F1 instance) | Free (F1) | Dev/test only |41| Standard (B1/B2) | Basic (B1/B2) | Low-traffic apps |42| Standard (auto-scaling) | Standard (S1-S3) | Auto-scale, slots |43| Flex (custom runtime) | Premium v3 (P1v3-P3v3) | Custom containers |44| Flex (high-memory) | Premium v3 (P3v3) | Up to 32 GB RAM |4546## `app.yaml` โ `azure.yaml` + Bicep4748### App Engine Configuration Mapping4950| `app.yaml` Field | Azure Equivalent | Implementation |51|-------------------|------------------|----------------|52| `runtime: python312` | Runtime stack: Python 3.12 | Bicep `siteConfig.linuxFxVersion` |53| `instance_class: F2` | App Service Plan SKU | Bicep `sku.name` |54| `automatic_scaling` | Autoscale settings | Bicep `Microsoft.Insights/autoscalesettings` |55| `env_variables` | App Settings | Bicep `siteConfig.appSettings` |56| `handlers` (URL routing) | App Service path mappings / Front Door | Route rules |57| `entrypoint` | Startup command | `az webapp config set --startup-file` |58| `vpc_access_connector` | VNet Integration | Bicep `virtualNetworkSubnetId` |59| `inbound_services: [warmup]` | Always On | Bicep `siteConfig.alwaysOn: true` |6061### Example: `app.yaml` โ Bicep6263```yaml64# app.yaml (GCP)65runtime: python31266instance_class: F267automatic_scaling:68min_instances: 169max_instances: 1070env_variables:71DATABASE_URL: "postgres://..."72```7374```bicep75// Bicep equivalent76resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {77sku: { name: 'S2', capacity: 1 }78properties: { reserved: true }79}8081resource webApp 'Microsoft.Web/sites@2023-12-01' = {82properties: {83siteConfig: {84linuxFxVersion: 'PYTHON|3.12'85alwaysOn: true86appSettings: [87{ name: 'PGHOST', value: postgresServer.properties.fullyQualifiedDomainName }88]89}90}91}92```9394## Datastore / Firestore โ Cosmos DB9596| Datastore Feature | Cosmos DB Equivalent |97|-------------------|----------------------|98| Entity / Document | Item |99| Kind / Collection | Container |100| Namespace | Database |101| Key / ID | Partition key + ID |102| Ancestor queries | Hierarchical partition keys |103| Eventual consistency | Session or Eventual consistency |104| Strong consistency | Strong consistency |105| `ndb` / `google.cloud.datastore` | `@azure/cosmos` SDK |106107> ๐ก **Tip:** Use Cosmos DB for NoSQL API for the closest mapping from Datastore. Use Cosmos DB for MongoDB API if the app already uses MongoDB-compatible patterns.108109## Cloud Tasks โ Service Bus / Durable Functions110111| Cloud Tasks Feature | Azure Equivalent |112|--------------------|------------------|113| HTTP target tasks | Service Bus + Azure Functions |114| App Engine target tasks | Service Bus + WebJobs |115| Task scheduling (delayed) | Service Bus scheduled messages |116| Task retry / dead-letter | Service Bus retry + dead-letter queue |117| Rate limiting | Service Bus message throttling |118| Task orchestration | Durable Functions (fan-out/fan-in) |119120## Traffic Splitting โ Deployment Slots121122| App Engine Feature | Azure Equivalent |123|--------------------|------------------|124| Version traffic splitting (%) | Slot traffic routing (%) |125| Canary deployment | Slot with low traffic % |126| A/B testing | Slot traffic routing |127| Version rollback | Slot swap (revert) |128| Gradual rollout | Increase slot traffic % incrementally |129| Warmup requests | Slot warm-up (pre-swap) |130131```bicep132// Configure traffic routing: 90% production, 10% staging133resource siteConfig 'Microsoft.Web/sites/config@2023-12-01' = {134name: 'web'135properties: {136experiments: {137rampUpRules: [{138actionHostName: '${webApp.name}-staging.azurewebsites.net'139reroutePercentage: 10140name: 'staging'141}]142}143}144}145```146147## Memcache โ Azure Cache for Redis148149| Memcache Feature | Azure Cache for Redis |150|------------------|----------------------|151| `memcache.get()` / `set()` | `redis.get()` / `redis.set()` |152| Shared memcache | Azure Cache for Redis (Basic) |153| Dedicated memcache | Azure Cache for Redis (Standard/Premium) |154| Session store | Redis session store |155| Cache expiry | Redis TTL |156157## Environment Variables Migration158159| Source | Target | Notes |160|--------|--------|-------|161| `app.yaml` env_variables | App Settings | Non-sensitive config |162| Secret Manager refs | Key Vault references | `@Microsoft.KeyVault(SecretUri=...)` |163| Runtime env (auto-injected) | App Settings | Map GAE-specific vars |164| `GAE_APPLICATION` | `WEBSITE_SITE_NAME` | Auto-injected by App Service |165| `PORT` | `PORT` | Auto-injected by App Service |166| `GOOGLE_CLOUD_PROJECT` | (no equivalent) | GCP project IDs identify a runtime environment; Azure subscription IDs are a tooling/billing context, not a runtime equivalent. Use App Service `WEBSITE_RESOURCE_GROUP` or rely on `DefaultAzureCredential` to discover the subscription at runtime if needed. |167168## CI/CD Migration169170| Cloud Build / gcloud | Azure Equivalent |171|---------------------|------------------|172| `gcloud app deploy` | `az webapp deploy` or `azd deploy` |173| `cloudbuild.yaml` | `.github/workflows/deploy.yml` |174| Cloud Build triggers | GitHub Actions triggers |175| Artifact Registry | Azure Container Registry |176| `gcloud app versions` | Deployment slots |177178## Reference Links179180- [GCP to Azure services comparison](https://learn.microsoft.com/en-us/azure/architecture/gcp-professional/)181- [App Service overview](https://learn.microsoft.com/en-us/azure/app-service/overview)182- [Cosmos DB migration options](https://learn.microsoft.com/en-us/azure/cosmos-db/migration-choices)183- [App Service deployment slots](https://learn.microsoft.com/en-us/azure/app-service/deploy-staging-slots)184