Azure Resource Group - Une nouvelle façon d’organiser ses environnements dans Azure
Dans un contexte actuel ou les déploiements d’environnement dans le cloud sont de plus en plus fréquent, il est souvent utile d’organiser ses ressources Cloud par types d’environnements (Dev / Test / Pré-Prod / Prod…), par client ou même par utilisateur !
Pour répondre à ce besoin, Microsoft a mis en place la notion de « ressource group » au sein d’Azure et nous propose maintenant une solution flexible pour déployer des environnements complexes dans Azure à partir d’un simple fichier .json : « Azure Resource Manager » (ARM). (Article bientôt disponible…!)
Qu’est-ce qu’un groupe de ressource ?
Un groupe de ressources est un conteneur « logique » qui a pour objectif de regrouper des entités (Machines virtuelles, Web App, Api App, Compte de stockage, base de données sql azure…). Toutes les entités présentes au sein d’un groupe de ressources sont alors accessibles en une seule requête vers l’API de management Azure. Ces entités peuvent cependant être géographiquement réparties sur plusieurs régions.
Il est conseillé de grouper des entités dans un groupe de ressources lorsque:
- Des ressources possèdent un cycle de vie commun : Les ressources doivent être déployées et supprimées en même temps
Cas d’utilisation : “ J’ai un environnement de test qui doit contenir une base de données SQL Azure, un AWS et un compte de stockage, je dois pouvoir créer et supprimer cet environnement rapidement “.
- Il est intéressant d’avoir une vue globale du prix d’un ensemble de ressources : au sein d’un RG, il est même possible d’attribuer des « Tags » à certaines ressources
Cas d’utilisation : “ J’ai trois développeurs qui ont besoin chacun d’un environnement de développement. Je crée un RG par développeur, je serai alors en mesure de connaitre avec exactitude combien chaque environnement de développement me coute chaque mois. “
- Il est nécessaire d’appliquer des droits spécifiques sur un ensemble de ressources.
Cas d’utilisation : “ J’ai un groupe de ressources dans lequel une base données et AWS de production sont en cours d’utilisation. Je peux créer des utilisateurs (via Azure Active Directory) qui ont des accès en lecture et / ou en écriture sur ce groupe de ressources. “
Les groupes de ressources ne sont actuellement disponibles que sur le nouveau portail Azure :
Comment créer un groupe de ressources ?
Aujourd’hui il existe plusieurs manières de créer un groupe de ressources :
- PowerShell / Azure Cli
- Windows Azure Management Librairies (WAML)
- Azure Management Api
1. En PowerShell, quelques lignes suffisent…
Add-AzureAccount Select-AzureSubscription -SubscriptionId /* yout subscription identifier */ Switch-AzureMode -Name AzureResourceManager New-AzureResourceGroup -Name Rg-From-Powershell -Location "North Europe"
2. Avec la librairie de Management Azure :
Avec WAML (« Windows Azure Management Librairies »), il faut travailler un peu plus, mais ça reste raisonnable (Pour découvrir WAML, c’est par ici !)
Pour utiliser les APIs de management de Azure qui sont « wrappées » dans la librairie WAML nous devons nous authentifier, deux solutions sont actuellement disponibles :
- Utilisation d’un certificat (à uploader sur la souscription Azure)
- Azure Active Directory (AAD)
Nous allons utiliser ADD pour cet exemple. Il faut donc dans un premier temps référencer notre application dans le portail azure (AAD n’est pas encore disponible sur le nouveau portail, il faut donc utiliser l’ancien portail. Pour créer une application sur Azure Active Directory, je vous laisse suivre cette procédure, qui est particulièrement bien détaillée.
L’exemple de code suivant s’exécute au sein d’une application de type console. Mais il est tout à fait exportable dans tout type d’application.
Deux packages Nuget sont nécessaires :
- Microsoft.Azure.Management.Resources : Permet de créer un groupe de ressources sur une souscription Azure
- Microsoft.IdentityModel.Clients.ActiveDirectory : Permet de nous connecter à l’application créée dans AAD et récupérer un token pour l’authentification nécessaire à l’utilisation de WAML
string rgName = "Rg-From-Waml"; CancellationTokenSource cts = new CancellationTokenSource(); // Authentication with Azure AD string clientId = ConfigurationManager.AppSettings["clientid"]; string tenantId = ConfigurationManager.AppSettings["tenantId"]; Uri redirectUri = new Uri(ConfigurationManager.AppSettings["redirectUrl"]); var context = new AuthenticationContext(string.Format("https://login.microsoftonline.com/{0}", tenantId)); var authenticationResult = await context.AcquireTokenAsync( resource: "https://management.core.windows.net/", clientId: clientId, redirectUri: redirectUri, userId: UserIdentifier.AnyUser, extraQueryParameters: null, parameters: new PlatformParameters(PromptBehavior.Auto, null)); // Get the token within the response string token = authenticationResult.CreateAuthorizationHeader().Substring("Bearer ".Length); SubscriptionCloudCredentials azureCredentials = new TokenCloudCredentials(subscriptionId, token); using (var client = new Microsoft.Azure.Management.Resources.ResourceManagementClient(azureCredentials)) { bool nameAlreadyUsed = (await client.ResourceGroups.CheckExistenceAsync(rgName, cts.Token)).Exists; if (!nameAlreadyUsed) { ResourceGroup rg = new ResourceGroup() { Location = "West Europe" }; // Create the resource group ResourceGroupCreateOrUpdateResult result = await client.ResourceGroups.CreateOrUpdateAsync(rgName, rg, cts.Token); if (result.StatusCode == System.Net.HttpStatusCode.Created) { Console.WriteLine(string.Format("The resource group {0} is created. ", rgName)); } }
En utilisant le code PowerShell et le code C# ci-dessus, on retrouve deux nouveaux groupes de ressources dans notre souscription azure :
Happy Coding
Commentaires