Showing posts with label code. Show all posts
Showing posts with label code. Show all posts

Reading Notes #506


Good Monday, Already time to share my reading notes of the week. A list of all the articles, and blog posts, that catch my interest during the week.

If you think you may have interesting content, share it!

Cloud

Programming

Podcasts

  • Docker Desktop for Linux is Here! (DevOps and Docker Talk) - Great episode so much energy! Discussion about the brand new Docker Desktop for Linux, who to report bugs, ask for a new feature, and the DockerCon!
  • Épisode 15 - Gengis Khan (Les Pires Moments de l'Histoire) - I keep those episodes very preciously as a threat, and this one was such a good one! It's in French and the topic is the biggest empire that ever existed... No, it's the Romain.
  • How to Productively Show Off What You've Learned (Modern Mentor) - Nice episode. That's a good idea I should share what I think of books and posts I read! ;) I guess I'm not too bad.
  • Comparing Infrastructure-as-Code with Chris Klug (.NET Rocks!) - Terraform, Pulumi, ARM, and Bicep... All those are mentioned because it's all about Infrastructure-as-Code. Interesting talk about the different options we have.

Miscellaneous


~frank


Reading Notes #497


Good Monday, 
Already time to share new reading notes. Here is a list of all the articles, blog posts, and podcast episodes that catch my interest during the week. 

You think you may have interesting content, share it!

Cloud

Programming

Podcast

Miscellaneous

~frank

Reading Notes #397


Suggestion of the week

Cloud

Programming

Miscellaneous

~

Reading Notes #396

Suggestion of the week

Programming

Miscellaneous

~


Reading Notes #385


Suggestion of the week

Programming


~


Reading Notes #371

Cloud


Programming


Miscellaneous


Reading Notes #366

Cloud


Programming


Databases


Miscellaneous



How to create an Azure Container Instance (ACI) with .Net Core

For a project I just started, I need to create Azure resources from code. In fact, I want to create an Azure Container Instance. I already know how to create a container from Logic Apps and Azure CLI/PowerShell, but I was looking to create it inside an Azure Function. After a quick research online, I found the Azure Management Libraries for .NET (aka Fluent API) a project available on Github that do just that (and so much more)!
In this post, I will share with you how this library work and the result of my test.

The Goal


For this demo, I will create a .Net Core console application that creates an Azure Containter Instance (ACI). After it should be easy to take this code and migrate to an Azure Function or anywhere else.

hello-container

The Console Application


Let's create a simple console application with the following command: dotnet new console -o AzFluentDemo cd AzFluentDemo dotnet add package microsoft.azure.management.fluent The last command will use the nuget package available online an add it to our solution. Now we need a service principal so our application could access the Azure subscription. A since way to create one is the use Azure CLI az ad sp create-for-rbac --sdk-auth > my.azureauth This will create an Active Directory (AD) Service Principal (SP) and write the content into the file my.azureauth. Perfect, now open the solution, for this kind of project, I like to use Visual Studio Code so code . will do the work for me. Replace the content of the Program.cs file by the following code.

using System;
using Microsoft.Azure.Management.Fluent;
using Microsoft.Azure.Management.ResourceManager.Fluent;
using Microsoft.Azure.Management.ResourceManager.Fluent.Core;
namespace AzFluentDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            string authFilePath = "/home/frank/Dev/AzFluentDemo/my.azureauth";
            string resourceGroupName  = "cloud5mins";
            string containerGroupName = "frank-containers";
            string containerImage  = "microsoft/aci-helloworld";
            // Set Context
            IAzure azure = Azure.Authenticate(authFilePath).WithDefaultSubscription();
            ISubscription sub;
            sub = azure.GetCurrentSubscription();
            Console.WriteLine($"Authenticated with subscription '{sub.DisplayName}' (ID: {sub.SubscriptionId})");
            // Create ResoureGroup
            azure.ResourceGroups.Define(resourceGroupName)
                .WithRegion(Region.USEast)
                .Create();
            // Create Container instance
            IResourceGroup resGroup = azure.ResourceGroups.GetByName(resourceGroupName);
            Region azureRegion = resGroup.Region;
            // Create the container group
            var containerGroup = azure.ContainerGroups.Define(containerGroupName)
                .WithRegion(azureRegion)
                .WithExistingResourceGroup(resourceGroupName)
                .WithLinux()
                .WithPublicImageRegistryOnly()
                .WithoutVolume()
                .DefineContainerInstance(containerGroupName + "-1")
                    .WithImage(containerImage)
                    .WithExternalTcpPort(80)
                    .WithCpuCoreCount(1.0)
                    .WithMemorySizeInGB(1)
                    .Attach()
                .WithDnsPrefix(containerGroupName)
                .Create();
            Console.WriteLine($"Soon Available at http://{containerGroup.Fqdn}");
        }
    }
}

In the first row, I declare a few constants. The path of the service principal created earlier, resource group name, the container group name, and the image I will use. For this demo aci-helloworld. Then we get access with the Azure.Authenticate. Once we got access, it's y easy and the intellisense is fantastic! I don't think I need to explain the rest of the code as it already self-explanatory.

Got an Error?


While running you main in contour an error message complaining about the namespace not being registered or something like that ( I'm sorry I did not note the error message). You only need to register it with the command:

az provider register --namespace Microsoft.ContainerInstance

It will take a few minutes. To see if it's done you can execute this command:

az provider show -n Microsoft.ContainerInstance --query "registrationState" 

Wrap it up


And voila! If you do a dotnet run after a minute or two, you will have a new web application running inside a container available from http://frank=containers.eastus.azurecontainer.io. It's now very easy to take that code and bring it to an Azure Function or in any .Net Core Application that runs anywhere (Linux, Windows, Mac Os, web, containers, etc.)!


In a video, please!


I also have a video of this post if you prefer.



References




~

Reading Notes #204

AzureConLabsSuggestion of the week


Cloud


Programming


Databastes


Miscellaneous

  • Going Back to One (Alexandre Brisebois) - Organize our work to become a performer, could be easily done in Windows 10.
  • Static Site or CMS? - (Brian Rinaldi) - Nice post that gives insights to answer one of the most frequent questions when people start a blog/website.


Reading Notes #196

Win10Suggestion of the week


Cloud


Programming


Miscellaneous


~Frank