How To Run .NET 6, Kestrel, and Web API, on an AWS EC2 Linux Instance

Want to learn more about AWS Lambda and .NET? Check out my A Cloud Guru course on ASP.NET Web API and Lambda.

This post is going to be very similar to the previous one.

I am going to show how to get a .NET 6 Web API application and Kestrel running on AWS EC2 Linux instance, and make it accessible from outside AWS.

I’m not going to go into setting up an AWS account, you can find that info here. AWS offers a free tier, so you should be able to follow this tutorial and not incur expenses, but please read about the free tier for yourself, there is always a chance of making a mistake.

Create the Linux instance

After you have logged into your account, go to https://console.aws.amazon.com/ec2/v2/home?region=us-east-1. There is a lot here, but for now you’re only interested in Instances.

1. Starting off

In the upper right, hit “Launch instances”.

2. Picking an image

On the new page, select “Free tier only” on the left. The top result will be a Linux image. We are going to use that one.

3. Making sure you are on the free tier

Verify you are using the t2.micro which is on the free tier.

Hit “Next: Configure Instance Details”.

4. Configuring the instance, adding Tags

You can skip through the next few screens until you get to “Add Tags”.

Hit “Next: Configure Security Group”.

5. Security

This is the important one. You will see that port 22 has been opened to the whole world and that AWS is warning us about it. You will make a change here that makes SSH available only to the IP address you are currently using. Go to http://httpbin.org/ip, this will tell you your public IP address. Remove “0.0.0.0/0”, in its place put the IP address from httpbin.org, and add /32 to the end. You should have something like - “1.2.3.4/32”.

Give a name and description to the security group.

Hit “Review and Launch”.

6. A review

Hit “Launch”.

You are not quite there yet…

7. Keys and Launch

One final step, create a key pair so you can access the instance later. Select “Create a new key pair”, leave it as RSA, and give it a name. Then download and keep safe. You will use it when SSHing to the instance shortly.

Now, hit “Launch Instances”.

Go off make a cup of tea, this will take a few minutes to start up.

8. Waiting…and…Ready

In the EC2 instances dashboard, you will see the instance status as “Initializing”.

Before it changes to “2/2 checks passed”, it should now be up and running and available via SSH.

Click the instance id to bring up a summary.

Connect to the instance

The Linux instance should now be running and available to you via SSH.

Hit the “Connect” button.

Move over to the “SSH client” tab. Follow the instructions on using SSH from the command line.

Run the below command from the directory where you downloaded the key file to earlier.

ssh -i "Linux-Net6.pem" ec2-user@ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com

You will now be asked to accept the fingerprint -

Type “yes”.

Then you will be connected to the Linux shell -

Installing .NET 6

At the time of writing this, the current .NET SDK version is 6.0.101, and the link below will download the Linux x64 binaries. But you should go to https://dotnet.microsoft.com/en-us/download/dotnet/6.0 to get the latest.

Run the below to download and install the .NET 6 SDK, set up the PATH and DOTNET_ROOT environment variables.

wget https://download.visualstudio.microsoft.com/download/pr/ede8a287-3d61-4988-a356-32ff9129079e/bdb47b6b510ed0c4f0b132f7f4ad9d5a/dotnet-sdk-6.0.101-linux-x64.tar.gz

mkdir -p $HOME/dotnet && tar zxf dotnet-sdk-6.0.101-linux-x64.tar.gz -C $HOME/dotnet
export DOTNET_ROOT=$HOME/dotnet
export PATH=$PATH:$HOME/dotnet

To verify it is working, run -

dotnet --list-sdks

You should see something like -

6.0.101 [/home/ec2-user/dotnet/sdk]

If you log out and log back in, the dotnet command won’t be available because the environment variables have been cleared.

Running the below to resolve that problem -

echo 'export DOTNET_ROOT=$HOME/dotnet' >> .bash_profile
echo 'export PATH=$PATH:$HOME/dotnet' >> .bash_profile

Creating the Web API application

Use the following to create and start an API application running on ports 5000 and 5001.

dotnet new webapi --name HelloFromLinuxInstance
dotnet run --project HelloFromLinuxInstance --urls "http://*:5000;https://*:5001"

Then use wget to get the weather forecast.

wget localhost:5000/weatherforecast --no-check-certificate

This will save a file called weatherforecast. Use cat weatherforecast to see the contents of the file.

This demonstrates that the Kestrel is up and running. But you won’t be able to access the server from your computer or anywhere else.

Connecting to the Web API application from outside

There is one final step to open ports 5000 and 5001 so you can load the weather forecast from your computer or elsewhere.

Go back to the instance, click on the Security tab, then on the Security Group.

Then add ports 5000 and 5001 to the allowed inbound ports, using the IP address you got from httpbin.org.

Done! You should now be able to access the API from your computer, but you will see security warning in your browser, I’ll show you how to handle that in a later post.

Try by connecting to -

http://ec2-x-xx-xxx-xxx.compute-1.amazonaws.com:5000/weatherforecast
https://ec2-x-xx-xxx-xxx.compute-1.amazonaws.com:5001/weatherforecast

There it is!

The site is now accessible from your computer.

comments powered by Disqus

Related