If you’re a .NET developer choosing a cloud platform, you’re not choosing blindly. Azure is Microsoft’s platform. AWS is Amazon’s. Both support .NET perfectly well. But “supports .NET” and “is a great experience for .NET developers” are very different claims.
This comparison is written from the perspective of a .NET developer who has shipped to both platforms. Not an infrastructure architect, not a cloud consultant — a developer who wants their apps to run reliably with minimal ops overhead.
Table of Contents
- Hosting Options Compared
- Developer Experience
- Managed Services for .NET Apps
- DevOps and CI/CD
- Pricing Reality
- Security and Compliance
- When to Choose Each
- FAQ
Hosting Options Compared
Running ASP.NET Core on Azure
Azure was built alongside .NET, and it shows. The natural progression for a .NET app on Azure:
- Azure App Service: PaaS, deploy a zip or container, no infrastructure management. The simplest path for most web apps.
- Azure Container Apps: Serverless containers with Dapr integration. Strong choice for microservices.
- Azure Kubernetes Service (AKS): Managed Kubernetes for full control.
- Azure Functions: Serverless compute with .NET Isolated Worker process support in .NET 8.
# Deploy ASP.NET Core to Azure App Service
# With Azure CLI — minimal config required
az webapp create \
--name myapp \
--resource-group myRG \
--plan myPlan \
--runtime "DOTNETCORE:8.0"
az webapp deployment source config-zip \
--name myapp \
--resource-group myRG \
--src ./publish.zip
Running ASP.NET Core on AWS
AWS has excellent .NET support but requires more explicit configuration choices:
- AWS Elastic Beanstalk: PaaS equivalent to App Service, but the abstraction leaks more — you’re more aware of the underlying EC2 instances.
- AWS App Runner: Newer, simpler container deployment. Closer to the App Service experience.
- Amazon ECS (Fargate): Serverless containers, strong choice for microservices.
- AWS Lambda: Serverless with good .NET support. Custom runtime required for .NET 8, but AWS provides it.
# Deploy ASP.NET Core to AWS App Runner via CLI
aws apprunner create-service \
--service-name myapp \
--source-configuration '{
"ImageRepository": {
"ImageIdentifier": "123456789.dkr.ecr.us-east-1.amazonaws.com/myapp:latest",
"ImageRepositoryType": "ECR",
"ImageConfiguration": {"Port": "8080"}
}
}' \
--instance-configuration '{"Cpu": "1 vCPU", "Memory": "2 GB"}'
Assessment: App Service vs. Elastic Beanstalk, Azure wins on simplicity for .NET developers. App Runner is closing the gap but is newer with less ecosystem tooling.
Developer Experience
Azure: Deep Visual Studio and VS Code Integration
Microsoft’s first-party tooling integration is a genuine advantage. Right-click publish from Visual Studio to Azure App Service, Azure Functions local debugging that matches production behavior, Azure SDK with IntelliSense in every IDE — these aren’t marketing features, they’re daily workflow improvements.
- Azure SDK for .NET is actively maintained by Microsoft, with excellent documentation
- Managed Identity works seamlessly with the Azure SDK — no credential management for Azure-to-Azure service calls
DefaultAzureCredentialhandles local dev → staging → production auth without code changes- Application Insights SDK integrates directly with ASP.NET Core telemetry pipeline
// Azure SDK with DefaultAzureCredential — works locally and in production
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
var client = new SecretClient(
new Uri("https://myvault.vault.azure.net/"),
new DefaultAzureCredential()); // uses VS/CLI credentials locally, Managed Identity in prod
var secret = await client.GetSecretAsync("my-secret");
AWS: AWS Toolkit and the AWS SDK for .NET
AWS has solid .NET support but the developer experience requires more configuration:
- AWS Toolkit for VS Code and Visual Studio exists but feels more like a management console than a development aid
- AWS SDK for .NET is comprehensive but documentation quality varies by service
- IAM roles replace Managed Identity — the concept is equivalent but configuration is more explicit
- CloudWatch is the observability platform — good but requires more setup than Application Insights to get useful ASP.NET Core metrics
// AWS SDK with profile/IAM credentials
using Amazon.SecretsManager;
using Amazon.SecretsManager.Model;
var client = new AmazonSecretsManagerClient(Amazon.RegionEndpoint.USEast1);
var response = await client.GetSecretValueAsync(new GetSecretValueRequest
{
SecretId = "my-secret"
});
Assessment: Azure wins for developer experience, especially if you’re using Visual Studio or VS Code. The Managed Identity pattern for credential-free local-to-production auth is genuinely better than AWS’s IAM role setup for most developers.
Managed Services for .NET Apps
Databases
- Azure SQL Database: Managed SQL Server. If you’re already on SQL Server on-premises, migration to Azure SQL is well-supported with EF Core and familiar tooling.
- Amazon RDS for SQL Server: Also available, but licensing complications (bring your own license vs. included) add overhead.
- Aurora PostgreSQL/MySQL: AWS’s proprietary database is excellent for open-source databases. Azure Database for PostgreSQL is competitive.
Caching
- Azure Cache for Redis: Managed Redis with IDistributedCache integration in ASP.NET Core. Easy setup.
- Amazon ElastiCache: Managed Redis and Memcached. Equivalent capability, slightly more VPC configuration required.
Messaging
- Azure Service Bus: Enterprise messaging with queues, topics, and sessions. Excellent for .NET with first-party SDK support.
- Amazon SQS/SNS: Simpler queue/notification model. Amazon MQ for more complex messaging patterns.
Serverless
- Azure Functions with .NET 8 Isolated: The Isolated Worker model provides full .NET 8 support without runtime version conflicts. Durable Functions for orchestration workflows are a standout feature.
- AWS Lambda .NET 8: Good support, cold starts improved significantly with SnapStart. Lambda Powertools for .NET is a solid utility library.
DevOps and CI/CD
Azure DevOps
Azure DevOps (Pipelines, Boards, Repos) is deeply integrated with Azure and has excellent .NET support:
# Azure Pipelines — .NET 8 build and deploy
trigger:
- main
pool:
vmImage: 'ubuntu-latest'
steps:
- task: UseDotNet@2
inputs:
version: '8.x'
- script: dotnet restore
- script: dotnet test --no-restore
- script: dotnet publish -c Release -o $(Build.ArtifactStagingDirectory)
- task: AzureWebApp@1
inputs:
azureSubscription: 'MySubscription'
appName: 'my-dotnet-app'
package: $(Build.ArtifactStagingDirectory)
GitHub Actions to Azure or AWS
GitHub Actions works well for both platforms. Azure has official actions maintained by Microsoft; AWS has AWS-published actions. Both are production-quality:
# GitHub Actions — deploy to AWS App Runner
- name: Deploy to App Runner
uses: awsactions/amazon-app-runner-deploy@v1
with:
service: my-service
image: ${{ env.ECR_REGISTRY }}/myapp:${{ github.sha }}
access-role-arn: ${{ secrets.APP_RUNNER_ROLE_ARN }}
region: us-east-1
Assessment: Azure DevOps is better if you want an all-in-one platform. GitHub Actions is better if your code is already on GitHub. Both cloud platforms support GitHub Actions equally well.
Pricing Reality
Pricing comparisons are notoriously slippery because configurations vary. Here are honest directional observations:
- Azure App Service vs. Elastic Beanstalk: Comparable at small scale. Azure reserved instances often cheaper for .NET workloads.
- Azure SQL vs. RDS SQL Server: Azure SQL is generally cheaper due to no separate SQL Server license requirement on DTU-based tiers.
- Azure Container Apps vs. AWS Fargate: Azure Container Apps (Consumption plan) is cheaper for bursty workloads that scale to zero.
- Azure Functions vs. AWS Lambda: Both have generous free tiers (1M requests/month). Comparable for typical workloads.
- Dev/Test pricing: Azure has explicit Dev/Test subscription pricing that can cut costs by 50%+ for non-production environments.
[INTERNAL_LINK: Azure App Service deployment best practices]
When to Choose Each
Choose Azure if:
- Your team is on Windows and Visual Studio
- You’re migrating from on-premises SQL Server
- You need Microsoft 365 / Active Directory integration
- You already have Microsoft enterprise licensing (Azure Hybrid Benefit)
- You’re building with .NET and want first-class SDK/tooling support
- Compliance requirements overlap with Microsoft’s certification portfolio
Choose AWS if:
- Your team has existing AWS infrastructure or expertise
- You need specific AWS services with no Azure equivalent (Kinesis, Redshift, etc.)
- Your data and storage workloads are heavy — AWS S3 is still the reference standard
- You’re in the data science / ML space (SageMaker is ahead of Azure ML for many use cases)
- Multi-cloud strategy favors the largest provider for vendor negotiation leverage
FAQ
Can I run .NET Framework (not .NET Core) apps on both platforms?
Yes, but with limitations. Azure App Service on Windows supports .NET Framework up to 4.8. AWS Elastic Beanstalk on Windows EC2 also supports .NET Framework. For containerized workloads, .NET Framework requires Windows containers, which are larger and slower to start than Linux containers.
How do Azure Managed Identity and AWS IAM Roles compare for service-to-service auth?
Both solve the same problem — eliminate hardcoded credentials for service-to-service calls. Azure Managed Identity is simpler for developers: assign an identity to your app service, grant it access to a resource, and the SDK handles everything transparently. AWS IAM Roles require more explicit configuration of trust policies and are more powerful but also more complex.
Is there a price calculator to compare specific scenarios?
Both clouds offer official calculators: Azure Pricing Calculator and AWS Pricing Calculator. For honest comparisons, build the same architecture in both calculators and compare. Cloudoptimizer and Infracost can help automate this comparison for IaC-defined infrastructure.
What about multi-cloud .NET apps?
Possible but increases complexity significantly. Use abstraction layers (cloud-agnostic interfaces) and avoid cloud-specific managed services if you need multi-cloud portability. In practice, most teams are better served by committing to one cloud and optimizing for it than trying to stay portable.
Does Azure have better support for Blazor and SignalR than AWS?
Azure SignalR Service is a managed, scalable SignalR backplane with direct integration into ASP.NET Core. AWS doesn’t have a direct equivalent — you’d build on AWS API Gateway WebSockets or use a third-party service. For SignalR-heavy apps, Azure has a clear advantage.
For most .NET developers, Azure is the path of least resistance — the tooling integration, SDK quality, and SQL Server migration story are genuinely better. But if your organization is AWS-first or your workloads overlap with AWS’s strengths in data and ML, AWS is a perfectly capable platform for .NET. The best cloud is the one your team already knows.

Leave a Reply