# Run a .NET Aspire application on Arm-based VMs on AWS and GCP

## In this learning path

- [Introduction](https://learn.arm.com/learning-paths/servers-and-cloud-computing/net-aspire/)
- [.NET Aspire](https://learn.arm.com/learning-paths/servers-and-cloud-computing/net-aspire/background/)
- [Create a project and then an application](https://learn.arm.com/learning-paths/servers-and-cloud-computing/net-aspire/project/)
- [Run the application](https://learn.arm.com/learning-paths/servers-and-cloud-computing/net-aspire/run_app/)
- [Modify the Project](https://learn.arm.com/learning-paths/servers-and-cloud-computing/net-aspire/modify_project/)
- [Deploy to AWS EC2](https://learn.arm.com/learning-paths/servers-and-cloud-computing/net-aspire/aws/)
- [Deploy to GCP](https://learn.arm.com/learning-paths/servers-and-cloud-computing/net-aspire/gcp/)
- [Next Steps](https://learn.arm.com/learning-paths/servers-and-cloud-computing/net-aspire/_next-steps/)

## About this Learning Path

| Skill level:          | Introductory          |
|-----------------------|-----------------------|
| Reading time:         | 1 hr                  |
| Last updated:         | 06 Oct 2026           |

| Author:               | Dawid Borycki [GitHub](https://github.com/dawidborycki) |
|-----------------------|-----------------------|
| Arm IP:               | [Neoverse](https://support.arm.com/?tab=compute-ip&Product%20Type=Infrastructure%20Processors) |
| Tags:                 | [Containers and Virtualization](https://learn.arm.com/tag/containers-and-virtualization), [AWS Graviton](https://learn.arm.com/tag/aws-graviton), [Google Axion](https://learn.arm.com/tag/google-axion), [Windows](https://learn.arm.com/tag/windows), [Linux](https://learn.arm.com/tag/linux), [dotnet](https://learn.arm.com/tag/dotnet), [csharp](https://learn.arm.com/tag/csharp), [Visual Studio Code](https://learn.arm.com/tag/visual-studio-code) |

### Who is this for?
This is an introductory topic for software developers interested in learning how to deploy .NET Aspire applications on Arm-based virtual machines (VMs) on Amazon Web Services (AWS) and Google Cloud Platform (GCP).

### What will you learn?
Upon completion of this Learning Path, you will be able to:
- Understand .NET Aspire developer tools.
- Create a .NET Aspire application.
- Modify code on a Windows on Arm development machine.
- Deploy a .NET Aspire application to Arm-powered virtual machines in the Cloud.

### Prerequisites
Before starting, you will need the following:
- A Windows on Arm machine such as the Lenovo Thinkpad X13s running Windows 11, to build the .NET Aspire project
- An [Arm-based instance](https://learn.arm.com/learning-paths/servers-and-cloud-computing/csp/) from AWS or GCP
- A code editor, such as [Visual Studio Code for Arm64](https://code.visualstudio.com/docs/?dv=win32arm64user)

### Summary
You’ll create and run a .NET Aspire application on a Windows on Arm development machine, then deploy it to an Arm-based VM. First, you’ll install the Aspire workload, trust the local HTTPS certificate, and inspect the application through its startup output and dashboard. You’ll then add a compute-intensive service, rebuild the application, and deploy it to an AWS Graviton-based EC2 instance. You can also complete these steps on an Arm-based Google Cloud VMs.

### Frequently asked questions
<details>
<summary>How do I verify the .NET SDK and install the Aspire workload before creating the project?</summary>
Run `dotnet --version` in PowerShell and confirm that you have .NET SDK 8.0 or later. Then run `dotnet workload install aspire` and check for `Successfully installed workload(s) aspire.`
</details>

<details>
<summary>Why do I need to trust the HTTPS development certificate, and how do I do it?</summary>
You use HTTPS when running the application locally. Run `dotnet dev-certs https --trust` before starting your application to trust its HTTPS development certificate.
</details>

<details>
<summary>Which project do I run to start the distributed application, and what output should I expect?</summary>
From the project directory, run `dotnet run --project NetAspire.Arm.AppHost`. You should see messages such as `Building...`, an Aspire version line, and `Distributed application starting`.
</details>

<details>
<summary>Where do I add the intensive computations, and how can I confirm the change worked?</summary>
Add the supplied `ComputationService.cs` code to `NetAspire.Arm.ApiService`. In `Program.cs`, update the `/weatherforecast` handler to call `ComputationService.PerformIntensiveCalculations(matrixSize: 800)`. Run `dotnet run --project NetAspire.Arm.AppHost`, select **Weather** in your web frontend, then open **Traces** in the dashboard to inspect the longer request duration.
</details>

<details>
<summary>Which ports do I need to expose to access the deployed application?</summary>
Allow TCP traffic on the ports that your application uses. The example uses `7133`, `7511`, and `17222`. Match your application’s port values in the Amazon EC2 security group or a Google Cloud firewall rule associated with your VM’s `dotnet-app` network tag.
</details>
