Creación de recursos de Azure con código
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:
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
y en la cmd deberíamos ver lo siguiente:
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.
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
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
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