En este Post vamos a crear recursos de azure en VisualStudio y con la cmd donde realizaremos la validación con nuestro usuario y suscripción.

Vamos a trabajar con Azure CLI en nuestra consola de comandos, si no lo tenéis instalado os dejo el link para que podáis descargarlo a continuación

https://docs.microsoft.com/es-es/cli/azure/install-azure-cli

Una vez lo hayáis instalado, tenemos que abrir la consola o cmd e introducir el siguiente comando: az, para comprobar que efectivamente lo hemos instalado correctamente y sin ningún problema, deberíamos ver lo siguiente en nuestra cmd:

Az-cli

El siguiente paso es validarse con Azure mediante el comando: az login, nos enviará al buscador que tengamos instalado por defecto para introducir nuestras credenciales

1ºValidation

y en la cmd deberíamos ver lo siguiente:

Az-login

A continuación debemos introducir la siguiente línea de comandos: az ad sp create-for-rbac –sdk-auth (son dos guiones delante de sdk) para recibir los datos necesarios para crear las credenciales y utilizarlas en Visual Studio, os debería aparecer lo siguiente; si os habéis validado correctamente en Azure y habéis instalado bien az-cli.

CredentialesAzurePost

Nos interesa guardarnos el clientId, clientSecret y tenantId para formar nuestras credenciales mediante código.

El siguiente paso es abrir nuestro queridísimo Visual Studio y crear una aplicación de consola, la cuál usaremos para crear los servicios que nos ofrece Azure tales como grupo de recursos, cuentas de almacenamiento, máquinas virtuales, etc..

Una vez hemos creado nuestra app de consola tenemos que instalar el NuGet : Microsoft.Azure.Management.Fluent

NugetPostAzure

Ahora podemos empezar a «jugar» creando primero las credenciales necesarias.

 #region Credentials
   //Credentials for validate against Azure
   String ClientId = "Put here your number of client";
   String SecretId = "Put here your number of secret";
   String TenantId = "Put here your number of tenant";

   //Creation of credentials
   var credentials = SdkContext.AzureCredentialsFactory
      .FromServicePrincipal(ClientId, SecretId, TenantId,
                        AzureEnvironment.AzureGlobalCloud);
   Console.ForegroundColor = ConsoleColor.Red;
   Console.WriteLine("Creation of credentials: Done");

   //Validation of credentials
   var azure = Azure.Configure()                                     
.WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)                    .Authenticate(credentials).WithDefaultSubscription();
 Console.WriteLine("Validation of credentials: Done");
#endregion

Vamos a empezar a crear el primer recurso de Azure, el cuál necesitamos para «guardar» los demás dentro de él, un grupo de recursos:

#region ResourceGroups
//Creation of ResourceGroup
var resourceGroup = azure.ResourceGroups.Define("RG-PostAzureKMR")
             .WithRegion(Region.USEast).Create();
Console.ForegroundColor = ConsoleColor.DarkYellow;
Console.WriteLine("ResourceGroup creation: Done");
#endregion

A continuación, creamos una cuenta de almacenamiento, la cual contiene todos los objetos de datos de Azure, blobs, files, queue, tables y discos:

#region StorageAccount
//Creation of storageAccount
var storageAccount = azure.StorageAccounts.Define("sapostazurekmr")                        .WithRegion(Region.USEast).WithExistingResourceGroup(resourceGroup)
   .Create();
Console.WriteLine("StorageAccount creation: Done");
#endregion

Ahora crearemos un contenedor, en concreto un BlobService y un BlobContainer en el cual podríamos guardar imágenes, audio, video, etc…

#region BlobsContainers
//Creation BlobService
var blobService = azure.StorageAccounts.Manager.BlobServices.Define("bspostazurekmr")
 .WithExistingStorageAccount("RG-PostAzureKMR", "sapostazurekmr").Create();
Console.WriteLine("BlobService creation: " + blobService + " " + "Done");

//Creation BlobContainer
var blobContainer = azure.StorageAccounts.Manager.BlobContainers.DefineContainer("bcpostazurekmr").WithExistingBlobService("RG-PostAzureKMR", "sapostazurekmr").WithPublicAccess(PublicAccess.Container).Create();
Console.WriteLine("BlobContainer creation: " + blobContainer + " " + "Done");
#endregion

Para continuar, creamos una WebApp donde podréis alojar vuestras apps como un ASP.NET por ejemplo.

#region WebApps
 //Creation WebApps
 var webApps = azure.WebApps.Define("wapostazurekmr")                    .WithRegion(Region.USEast).WithExistingResourceGroup(resourceGroup)
     .WithNewFreeAppServicePlan().Create();
 Console.WriteLine("WebApp creation: Done");
#endregion

Continuamos creando una Función de Azure (Azure Function), que es una solución sin servidor, la cuál nos permite escribir menos código y mantener menos infraestructura.

#region FunctionApp
//Creation functionApp
var functionApp = azure.WebApps.Manager.FunctionApps.Define("fapostazurekmr")                    .WithRegion(Region.USEast).WithExistingResourceGroup(resourceGroup)                        .WithNewFreeAppServicePlan().WithExistingStorageAccount
(storageAccount).Create();
Console.WriteLine("FunctionApp creation: Done");
#endregion

Ahora es el momento de los secretos con Azure Key Vault, que nos brinda la oportunidad de almacenar datos de acceso de forma segura.

#region KeyVault
 //Creation of KeyVault
 var keyVault = azure.Vaults.Define("kvpostazurekmr").WithRegion(Region.USEast).WithExistingResourceGroup(resourceGroup)                  .WithEmptyAccessPolicy().Create();
Console.WriteLine("Azure Key Vault creation: Done");
#endregion

Para terminar el post, vamos a crear una máquina virtual, donde podréis implementar una serie de apps y software tales como Linux, Ubuntu, apps de Oracle

#region Virtual Machine
 //Creation of Net
var network = azure.Networks.Define("network-postazurekmr").WithRegion(Region.USEast)
.WithExistingResourceGroup(resourceGroup)
.WithAddressSpace("10.0.0.0/16")
.WithSubnet("subnet-console", "10.0.0.0/24").Create();
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("NetWork creation: Done");

//Creation of IP Public
var publicIP = azure.PublicIPAddresses.Define("publicip-postazurekmr").WithRegion(Region.USEast)
                    .WithExistingResourceGroup(resourceGroup).WithDynamicIP().Create();
Console.WriteLine("PublicIP creation: Done");

//Creation of Network Interface
var networkInterface = azure.NetworkInterfaces.Define("networkinterface-postazurekmr")                    .WithRegion(Region.USEast).WithExistingResourceGroup(resourceGroup)
.WithExistingPrimaryNetwork(network)
.WithSubnet("subnet-console")
.WithPrimaryPrivateIPAddressDynamic().WithExistingPrimaryPublicIPAddress(publicIP).Create();
 Console.WriteLine("NetWork Interface creation: Done");

//Deploytment of VM
Console.WriteLine("VM Deploytment...");                Console.WriteLine("/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/");
 azure.VirtualMachines.Define("VM-CONSOLE")
.WithRegion(Region.USEast).WithExistingResourceGroup(resourceGroup)                    .WithExistingPrimaryNetworkInterface(networkInterface)
.WithPopularLinuxImage
(KnownLinuxVirtualMachineImage.UbuntuServer16_04_Lts)                        .WithRootUsername("userX").WithRootPassword("Tajamar12345")
.WithComputerName("VM-CONSOLE")
.WithSize(VirtualMachineSizeTypes.StandardB1s).Create();                Console.WriteLine("-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/");
#endregion
SuccessfullyCreatedServices
RG
Services

Autor: Enrique Javier Muñoz Romera.

Curso: Desarrollo Web Full Stack, Multicloud y Multiplataforma.

Centro: Tajamar.

Año Académico: 2020-2021.

Bibliografía:

https://docs.azure.cn/en-us/dotnet/api/microsoft.azure.management.fluent

https://docs.microsoft.com/es-es/samples/dotnet/samples/azure-identity-resource-management-storage/

https://github.com/Azure/azure-libraries-for-net

Repositorio en GitHub: https://github.com/Enrique-Munoz-Romera/PostAzureKmr

LinkedIn: www.linkedin.com/in/enrique-munoz-romera

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.