Loading source
Pulling the file list, source metadata, and syntax-aware rendering for this listing.
Source from repo
GitHub Copilot for Azure plugin providing Azure service management and development assistance inside Claude Code and IDEs.
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