Skip to main content

Azure Dev Spaces - A free tool for developing app on top of AKS

In this post, we will talk about Azure Dev Spaces and how it can improve the developing and support experience when you are working with AKS (Azure Kubernetes Service).

Working with containers and AKS it is a great experience when you develop the application on your local machine, or you are in production and everything works as expected.
The friction appears in the moment when you have some issues with your application, and you want to debug it. Recreating a dedicated env. just for you can be complicated, time-consuming and expensive.  This is where Azure Dev Spaces comes to fill the gap. It is enabling us to deploy and to remote debugging of our services directly inside the AKS cluster.

Directly from our preferred IDE we can deploy our container inside AKS and do a remote debugging session to it, adding breakpoint directly in Visual Studio.

How is this possible?
Azure Dev Spaces tools that are installed on your local machine are creating a secure tunnel between your device and AKS. This SSH tunnel is used to communicate with your container and enabling the remote debugging session.
From the development perspective, the experience is the same as the code would run on your local machine. Even the service URL that can be used to access the service web endpoint is with 'localhost'. Behind the scene, the calls are redirected to your container that is running inside AKS.
All the configuration related to Docker and Kubernetes are generated on the fly automatically by the CLI.

Sharing the cluster
Azure Dev Spaces enables us to share an AKS cluster between team members. Even if multiple containers can run inside the AKS, each developer will be able to do remote debugging only to the services that he deployed and have access.
In this way, you can have an environment that it is end-to-end configured and debug only one of the service.

Supported languages
At this moment there is full support for Node.JS and .NET from IDEs like Visual Studio 2017, Visual Studio Code od CLI.

Code changes
There is a nice feature, integrated with the IDE that enables us to make changes to our code and just hit Refresh button. The debug session will still remain active, and a new version of your service will be redeployed automatically in the same container instance.
Remarks: This is possible only in the Visual Studio Code. In Visual Studio you will need to stop the debug session, change the code and start debugging. 
During the debug session you will have access to all debugging information as you would have for the code that it is running on your local machine.
Another useful feature is the ability to deploy and debug multiple services. From the IDE you are allowed to deploy and start debugging of multiple services at the same time. This is great when you have an issue on multiple services, and you want to identify the root problem.

Space isolation
As I said before, inside Azure Dev Spaces, you are allowed to share the space and services between the team. There might be cases when you don't want to do this, and you want to have your own isolate space with your own configuration and services.
For this, you are free to create your own space, that is entirely isolated from the team one. Inside Azure Dev Spaces you are free to create as many spaces you need - shared by the team or 'private.' All of them can be created inside the same AKS cluster, allowing you to control and reduce the cost of Azure for DEV and TEST environments.

Space management
The CLI gives you the ability to get the list of all spaces that are created inside an AKS cluster. Be aware that a space it is not deleted automatically at the moment when you stop debugging. For this, you need to run commands like 'remove-dev-spaces' that deletes all the Dev Spaces from the AKS cluster.
az aks remove-dev-spaces --name rvaks--resource-group rvaksdemo

Useful commands

  • azds list-up : Check the list of dev spaces resource group
  • azds space list : List of spaces
  • azds space select : Select a specific space
  • az aks use-dev-spaces -n rvaks -g rvaksdemo --update : Update Dev Space CLI extension and command tools
Azure Dev Space it's a powerful development tool, that comes hand in hand with AKS. It shall be part of the tools used by the team when you are working with AKS in DEV and TEST scenarios. And yes, it is FREE.


Popular posts from this blog

ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded

Today blog post will be started with the following error when running DB tests on the CI machine:
threw exception: System.InvalidOperationException: The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' registered in the application config file for the ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded. Make sure that the assembly-qualified name is used and that the assembly is available to the running application. See for more information. at System.Data.Entity.Infrastructure.DependencyResolution.ProviderServicesFactory.GetInstance(String providerTypeName, String providerInvariantName) This error happened only on the Continuous Integration machine. On the devs machines, everything has fine. The classic problem – on my machine it’s working. The CI has the following configuration:

TeamCity.NET 4.51EF 6.0.2VS2013
It seems that there …

Entity Framework (EF) TransactionScope vs Database.BeginTransaction

In today blog post we will talk a little about a new feature that is available on EF6+ related to Transactions.
Until now, when we had to use transaction we used ‘TransactionScope’. It works great and I would say that is something that is now in our blood.
using (var scope = new TransactionScope(TransactionScopeOption.Required)) { using (SqlConnection conn = new SqlConnection("...")) { conn.Open(); SqlCommand sqlCommand = new SqlCommand(); sqlCommand.Connection = conn; sqlCommand.CommandText = ... sqlCommand.ExecuteNonQuery(); ... } scope.Complete(); } Starting with EF6.0 we have a new way to work with transactions. The new approach is based on Database.BeginTransaction(), Database.Rollback(), Database.Commit(). Yes, no more TransactionScope.
In the followi…

GET call of REST API that contains '/'-slash character in the value of a parameter

Let’s assume that we have the following scenario: I have a public HTTP endpoint and I need to post some content using GET command. One of the parameters contains special characters like “\” and “/”. If the endpoint is an ApiController than you may have problems if you encode the parameter using the http encoder.
using (var httpClient = new HttpClient()) { httpClient.BaseAddress = baseUrl; Task<HttpResponseMessage> response = httpClient.GetAsync(string.Format("api/foo/{0}", "qwert/qwerqwer"))); response.Wait(); response.Result.EnsureSuccessStatusCode(); } One possible solution would be to encode the query parameter using UrlTokenEncode method of HttpServerUtility class and GetBytes method ofUTF8. In this way you would get the array of bytes of the parameter and encode them as a url token.
The following code show to you how you could write the encode and decode methods.