Azure Websites : Mettez à niveau automatiquement et en fonction de vos besoins !

Bonjour à tous,

Aujourd’hui je souhaite vous présenter une nouvelle fonctionnalité de Microsoft Azure Websites  : la mise à niveau automatique.

A quoi ça sert ?
Excellente question : ça sert à adapter la puissance de votre hébergement web en fonction de criètres prédéfinis. Par exemple : si la RAM de mon hébergement est saturée pendant 10 minutes, c’est que mon serveur web subit un pic de charge, il va être nécessaire de l’upgrader.
Aucun problème : c’est une fonctionnalité incluse dans les Azure Websites. L’intérêt est essentiel puisqu’il vous évite de payer un énorme plan d’hébergement pour encaisser 10 minutes de pic de charge par semaine. Prenons l’exemple de clients ayant des publicités qui passent à la télévision. Dans les 3 à 4 minutes qui suivent ces publicités, le nombre de visite va être multiplié par 1000… Le serveur va se retrouver à la traine ; et l’expérience utilisateur sera fortement dégradée (temps de chargements allongés, mauvais affichages des pages). Autant dire qu’il n’aura servit à rien de se payer un bel écran publicitaire si le site ne suit pas.

Avec la mise à niveau automatique des sites webs d’Azure, le serveur va allouer de la ressource en fonction de métriques techniques, et va libérer cette ressource quand vous n’en aurez plus besoin. Ainsi, vous ne payez que ce que vous consommez, et vous êtes tranquillisé.

Egalement, je rappelle l’intérêt de l’utilisation d’InSight pour être alerté par email lors de ces pics de charges, erreurs redondantes, …

Combien ça coûte ?
Autre excellente question. L’offre des services Web d’Azure se décompose en trois grandes familles :
– Les « Gratuits » (F1)
– Les « Partagés « (D1) : 7,20 € / mois. Ils ne prennent pas en charge la mise à niveau automatique.
– Les « De Base » (B1 à B3) : 41,55 € / mois à 166,22 € / mois. Ils ne prennent pas en charge la mise à niveau automatique, mais la mise à niveau manuelle est proposée dans le cadre de ces familles, sur trois instances.
– Les « Standards » (S1 à S3) : 55,41 € /mois à 221,62 €/mois). Ils prennent en charge la mise à niveau automatique, sur dix instances.
– Les « Premiums » (P1 à P3), comme ils sont en Preview à l’instant où j’écris ces lignes, ils sont disponibles au même prix que les standards. Ils proposent également la mise à niveau automatique, sur dix instances.

Capture d’écran 2015-03-29 à 17.12.36

C’est quoi une instance ?
Une instance correspond à une unité d’hébergement web. Je m’explique : lorsque vous choisissez un plan S1 à 55,41 € / mois, vous lancez votre site sur une instance.
Si vous mettez en place la règle suivante : « lance trois instances supplémentaires lorsque le nombre de requêtes en attente est supérieur à 1000 », vous allez payez 4 fois 55,41 € ; jusqu’à ce que les instances supplémentaires soient libérées. C’est d’ailleurs vous qui décidez lorsque ces instances sont libérées ; au paramétrage de la mise à niveau automatique.

Comment mettre en place la mise à niveau automatique ?
Comme toujours dans Azure, c’est simple !
Il vous faudra donc un site web dans Azure (Standard ou Premium). Je vous laisse regarder ici pour la création de ce site.
Ensuite, rendez-vous dans le nouveau portail. Ouvrez votre site web, et c’est là que ça commence.

Cliquez sur le bouton « Paramètres » puis, « Mettre à l’échelle ».
Capture d’écran 2015-03-29 à 16.36.09

C’est ici que vous trouverez les paramètres de mise à l’échelle de votre application web. Via le graphique vous pouvez visualiser l’utilisation des fonctionnalités de mise à l’échelle.

Normalement, vous ne devez pas voir de mise à l’échelle automatique paramétrée (mais cela arrive parfois sur le nouveau portail)…

Afin d’ajouter une nouvelle mise à l’échelle, cliquez sur « ajouter une nouvelle mesure ». Apparait alors un formulaire vous permettant de paramétrer les conditions dans lesquelles il va falloir ajouter ou réduire le nombre des instances de votre site.

Capture d’écran 2015-03-29 à 16.47.23

J’ai, pour ma part, sélectionné le paramètre « Memory Percentage » (qui est le pourcentage d’utilisation de la mémoire, pour les non anglophones hihi).
J’indique que si le seuil 80% de RAM utilisée est dépassé pendant 5 minutes, je souhaite augmenter mes ressources d’une instance.

Une fois que vous avez augmenté vos ressources, il va falloir définir les règles visant à les réduire, sinon ce système n’a pas vraiment d’intérêt.

C’est ce que vous propose la suite du formulaire, si vous scroller vers le bas. Ainsi, dans le sens inverse, vous pourrez définir dans quelle mesure vous souhaitez faire baisser le nombre d’instances de votre site ; afin d’optimiser vos coûts !

Notez également que vous pouvez ajouter plusieurs conditions en cliquant sur « … »

Une fois votre paramétrage terminé, vous pouvez cliquer sur « Enregistrer », et hop ! votre nouvelle règle de mise à niveau automatique sera prise en compte par le système et s’affichera en bas de la fenêtre.

Capture d’écran 2015-03-29 à 16.52.29

Vous notez que vous pouvez ajuster le nombre d’instances que vous souhaitez affecter, ainsi que les conditions dans lesquelles vous souhaitez qu’elles le soient, sans avoir à retourner dans les réglages. Si vous le faites, n’oubliez pas d’enregistrer via un clic sur le bouton en haut à droite de la fenêtre.

Et voilà ! C’est simple ! Si vous avez des questions n’hésitez pas à me les poser en commentaire.

Notez qu’en production, ce réglage nécessite quelques affinements avec le temps. Comme d’habitude avec ces technologies, je vous invite à essayer un réglage « à la louche » et d’affiner en fonction des réactions, des besoins et du budget. Je ferai bientôt un post sur la possibilité de faire des tests de montées en charge de vos sites web.

Sharegate ne migre pas vos alertes SharePoint… PowerShell va vous sauver !

Bonjour à tous !

Puisque Patrick Guimonet se met à faire de l’Azure (voir son excellent billet de cette semaine), une fois n’est pas coutume, je vais faire du SharePoint ! Y’a pas de raison !

Comme vous le savez peut-être, les projets Azure ne me prennent pas tout mon temps : je suis aussi consultant SharePoint (heureusement, de moins en moins).

Je me suis récemment confronté à une problématique lors d’une migration de SharePoint 2007 vers SharePoint 2013. Pour ce faire, j’utilise Sharegate. Il se trouve que cet excellent outil (dans sa version actuelle) ne migre pas les alertes. Tout comme le ciblage d’audience sur les webparts d’ailleurs, mais c’est un autre problème.
Vous pouvez d’ailleurs vous rendre sur ce thread pour plus d’informations (et de plaintes ^^) à ce sujet.

Migration SharePoint

Pour mon client, le transfert des alertes était un prérequis essentiel à la réussite de sa migration ; ce que l’on peut aisément comprendre.

J’ai donc entrepris de faire un petit peu de PowerShell pour résoudre cet épineux problème. Le principe est simple : on exporte les informations des alertes du SharePoint 2007 dans un fichier CSV, et on les recréé sur la plateforme SharePoint 2013.

Let’s rock with PowerShell !

1. Préparez PowerShell, si vous êtes sur SharePoint 2007 (non nécessaire pour 2010 ou 2013).

 Set-ExecutionPolicy RemoteSigned  

Puis :

 [Void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")  

Merci Technet !

2. Exportez vos alertes depuis SharePoint 2007 vers un fichier CSV. Exécutez le code ci-dessous (après avoir renseigné l’adresse de votre collection de site) dans PowerShell

 #For your SharePoint Server 2007 source  
 $SPsiteCollection = New-Object Microsoft.SharePoint.SPSite("YOUR SITE COLLECTION URL")  
 #Array instantiation  
 $arrAlerts_To_Export = @()  
 $arrAlerts_Columns = @("Counter","SiteUrl","ListName","AlertType","AlertEventType","AlertFrequency","AlertTitle","AlertUser")  
 $alertCounter = 0  
 # Iterate through all Webs in the Site Collection   
 foreach($SPweb in $SPsiteCollection.AllWebs)   
 {   
      foreach($alert in $SPweb.Alerts)   
   {   
           #If needed, uncomment this to show alerts informations  
           #Write-Host "Count : " $alertCounter  
           #Write-Host "Site : " $SPweb.Url  
           #Write-Host "List Name : " $alert.List  
           #Write-Host "Alert Type : " $alert.AlertType  
           #Write-Host "Alert Event Type : " $alert.EventType  
           #Write-Host "Alert Frequency : " $alert.AlertFrequency  
           #Write-Host "Alerts Title : " $alert.title   
           #write-host "Subscribed User: " $alert.user   
           #write-host "=============================="  
           #Add datas to an array  
           $currentAlert = new-object PSObject  
           $currentAlertString = @($alertCounter,$SPweb.Url,$alert.List,$alert.AlertType,$alert.EventType,$alert.AlertFrequency,$alert.title,$alert.user)  
           for ($i=0;$i -lt 8; $i++){  
           $currentAlert | add-member -membertype NoteProperty -name $arrAlerts_Columns[$i] -value $currentAlertString[$i]  
           }  
        $arrAlerts_To_Export+=$currentAlert  
        $currentAlert=$null  
        $alertCounter++  
    }   
 }  
 #Write datas to a CSV file  
 Write-Host "Exported alerts count : " $alertCounter  
 $arrAlerts_To_Export | export-csv C:\alertExport.csv -NoTypeInformation -Encoding unicode  

3. Copiez le fichier CSV nouvellement généré sur votre serveur SharePoint 2013

4. Dans SharePoint Management Shell, lancez ce script pour l’import et la création des alertes

 #Set var  
 $AlertsFilePath = "C:\alertExport.csv"  
 #The URL of the old SharePoint sites collection without slashes eg. "http://myoldsharepoint:80/"
 $OldSPUrl = "YOUR 2007 SHAREPPOINT URL" 
 #The URL of the new SharePoint sites collection without slashes eg. "http://mynewsharepoint:80"
 $NewSPUrl = "YOUR 2013 SHAREPOINT URL"  
 #Get the CSV  
 $Alerts = Import-CSV $AlertsFilePath   
 #$site = Get-SPSite $NewSPUrl  
 #Foreach line...  
 ForEach ($Alert in $Alerts) {  
      Try {  
           #Prepare the URL  
           $old_url = $Alert.SiteUrl;  
           $new_url = $old_url -replace $OldSPUrl, $NewSPUrl  
           #Connect to the right site  
           $web=Get-SPWeb -Identity $new_url  
           #Get the library $Victim.Name  
           $list=$web.Lists.TryGetList($Alert.ListName)  
           #Set datas and create the alert  
           $user = $web.EnsureUser($Alert.AlertUser)  
           $newAlert = $user.Alerts.Add()  
           $newAlert.Title = $Alert.AlertTitle  
           if ($Alert.AlertType -eq "Item") {  
                $newAlert.AlertType=[Microsoft.SharePoint.SPAlertType]::Item  
           }  
           elseif ($Alert.AlertType -eq "List") {  
                $newAlert.AlertType=[Microsoft.SharePoint.SPAlertType]::List  
           }  
           $newAlert.List = $list  
           $newAlert.DeliveryChannels = [Microsoft.SharePoint.SPAlertDeliveryChannels]::Email  
           if ($Alert.EventType -eq "Item") {  
                $newAlert.EventType = [Microsoft.SharePoint.SPEventType]::Item  
           }  
           elseif ($Alert.AlertEventType -eq "List") {  
                $newAlert.EventType = [Microsoft.SharePoint.SPEventType]::List  
           }  
           if ($Alert.AlertFrequency -eq "Daily") {  
                $newAlert.AlertFrequency = [Microsoft.SharePoint.SPAlertFrequency]::Daily  
           }  
           elseif ($Alert.AlertFrequency -eq "Immediate") {  
                $newAlert.AlertFrequency = [Microsoft.SharePoint.SPAlertFrequency]::Immediate  
           }  
           elseif ($Alert.AlertFrequency -eq "Weekly") {  
                $newAlert.AlertFrequency = [Microsoft.SharePoint.SPAlertFrequency]::Weekly  
           }  
           $newAlert.Update()  
      }  
      Catch {  
           Write-Host "Error on : " $Alert.Counter  
           Write-Host $_.Exception.Message  
           Write-Host ========================  
      }  
 }  

Notez que cette méthode peut également servir pour migrer ou transférer des alerter depuis et vers n’importe quelle version de SharePoint 2007, 2010 ou 2013.

5. Supprimez toutes les alertes (facultatif)
Ce script peut vous servir si vous rencontrez des erreurs lors d’un premier import et que vous souhaitez repartir d’une base propre.

 $SPsiteCollection = Get-SPSite "YOUR SHAREPOINT 2013 URL"  
 # Iterate through all Webs in the Site Collection   
 foreach($SPweb in $SPsiteCollection.AllWebs)   
 {   
      $myalerts = @()  
      foreach($alert in $SPweb.Alerts)  
      {  
             $myalerts += $alert  
      }  
      if ($myalerts.Count -gt 0)  
      {  
           foreach ($alertdel in $myalerts)  
           {  
                $SPweb.Alerts.Delete($alertdel.ID)  
           }  
      }  
 }  

Et voilà ! Vous pouvez maintenant palier à ce petit manque de Sharegate

Azure Insight et Azure Websites : organisez vos rapports, donnez des droits et créez des alertes !

Bonjour à tous,

Aujourd’hui je voudrais vous faire part des nouvelles fonctionnalités liées à Insight. Ces fonctionnalités sont disponibles dans la preview du nouveau portail Azure.

Insight, lorsqu’il est utilisé avec des sites web, vous permet de mesurer différents indicateurs, comme la fréquentation, le nombre de pages vues, le nombre d’erreurs rencontrées par les utilisateurs lors de la navigation, …. Et bien d’autres choses !

Il existe des produits concurrents, bien sur, comme G**gle Analytics (beurk ^^), mais Insight apporte des informations techniques en plus ; notamment car Azure hébergeant vos sites, Microsoft peut faire la corrélation entre un comportement inattendu côté client et un événement côté serveur.

Il y a différentes façon de l’intégrer dans votre site. La plus simple restant pour moi d’ajouter un bout de javascript dans toutes les pages, ou dans votre page maître. Pour voir comment activer la solution depuis Visual Studio 2015 : http://azure.microsoft.com/en-us/documentation/articles/app-insights-start-monitoring-app-health-usage/

Voici ce que nous aborderons :
– Organisation des rapports dans le nouveau portail Azure
– Ouvrez votre Insight à des utilisateurs extérieurs, en leur attribuant les bons droits
– Créer des alertes email. L’exemple portera sur une alerte lorsqu’un nombre de pages vues est dépassé sur une durée donnée.

C’est parti !

1. Organisez votre portail Azure, et notamment vos rapports Insight.
C’est l’une des grandes nouveautés du nouveau portail d’Azure : un outil plus graphique, et plus facilement personnalisable. C’est justement parfait pour des rapports d’utilisation, ou des rapports techniques.
Personnellement, je suis vraiment fan de ce qui a été fait. Cela explose littéralement la concurrence. Enfin un éditeur de service qui pense aux utilisateurs et surtout aux administrateurs desdits service !

Rendez-vous donc dans la preview du nouveau portail, en cliquant sur votre adresse email en haut à droite du portail actuel.

Lien vers le nouveau portail

Le magnifique écran de chargement (qui ne rappelle plus Windows 3.11 depuis son changement récent) s’affiche.

Patientez durant le chargement, et vous voilà sur votre portail nouvelle version. Cliquez alors sur « Parcourir », puis « Application Insight ».

Capture d’écran 2015-03-15 à 17.04.04Sélectionnez ensuite l’application que vous avez précédement créée. Le tableau de bord « petite version » s’affiche. Vous pouvez l’agrandir en cliquant sur le bouton le permettant, en haut à droite.

Capture d’écran 2015-03-15 à 17.07.37

Sur ce nouvel espace, vous pouvez maintenant réaliser un clic droit, puis sélectionner « Personnaliser ».

Vous pouvez alors organiser les briques comme vous le souhaitez, via des glisser-déposer.
Via un clic droit sur une brique, nommée section dans le portail, vous pouvez généralement définir une taille ou encore supprimer la section en question. Selon la tuile, le changement de taille est, ou non, disponible.

Capture d’écran 2015-03-15 à 16.08.21

En haut à droite, via un clic sur les trois petits points, vous pouvez également ajouter une brique, en sélectionnant « Ajouter des sections ».Capture d’écran 2015-03-15 à 17.15.06

Une store de « store » de sections est alors mis à votre disposition, vous pouvez les ajouter à votre bureau. Il n’est à pas douter que Microsoft ajoutera régulièrement des éléments à ce « store ».

Une dernière chose à ce sujet, vous pouvez décider de rappeler une ou plusieurs section sur votre page d’accueil. Pour cela il vous suffit de cliquer sur la punaise verte, au dessus d’une section.

Capture d’écran 2015-03-15 à 17.19.17

Résultat après quelques customisations :

Capture d’écran 2015-03-15 à 17.21.46

Et pour la page d’accueil :

Capture d’écran 2015-03-15 à 17.24.01

Même si ce n’est pas vraiment le sujet, il est important de noter que les graphiques sont interactifs. Si vous cliquez sur l’un d’eux à l’intérieur d’Insight, une information détaillée s’affichera.

Ce type de fonctionnalité est particulièrement adaptée à un environnement multiuser. En effet, si vous êtes développeur ou technicien, vous souhaiterez favoriser l’affichage d’informations techniques (nombre d’erreurs, monitoring de ressources, …). A contrario, si vous avez un rôle plutôt opérationnel, ce sont le nombres de visites, de pages vues, … qui vous intéresseront.
Ma transition vers le second point de ce billet est donc toute trouvée : voici comment donner accès à des utilisateurs externes à vos ressources dans le nouveau portail.

2. Ouvrez votre portail à vos utilisateurs !
C’est également une nouveauté de ce portail : la possibilité de donner des droits différents, à différents utilisateurs sur le portail ; afin que ceux-ci puissent gérer vos ressources, ou accéder à des rapports Insight. Et sachez qu’il est maintenant possible d’affecter des droits ressource par ressource. Même en preview, la fonctionnalité est particulièrement bien faite. Elle fonctionne sur le principe de SharePoint : « Vous n’avez pas le droit d’y accéder ? Vous ne le voyez pas ».
Le seul prérequis est un compte Microsoft. Notez que je n’ai pas réussi à le faire fonctionner avec un compte stocké dans Azure.

Le but est donc de donner accès à une utilisatrice d’un service marketing, au rapport Insight d’un site, afin qu’elle puisse évaluer le nombre de visiteurs, de pages vues, …

Dans votre rapport Insight, en haut à droite, cliquez sur les deux petits bonhommes, puis, dans la fenêtre qui s’ouvre, sur « Ajouter ».

Users Azure 1

Cliquez ensuite sur « Sélectionner un rôle », puis sur le niveau de droit que vous souhaitez affecter au nouvel utilisateur. Pour l’exemple, j’ajouterai un « lecteur ».

Users Azure 3

Dans la fenêtre qui s’affiche, vous pouvez saisir une adresse correspondant, soit à un membre de votre AD Azure, soit un compte Microsoft externe. C’est ce dernier cas qui est montré ici. Si l’adresse est connue, vous pouvez sélectionner le compte sous le champ de saisie. Vous pouvez ensuite valider, et re-valider. N’oubliez pas de valider ces deux fois, sinon vos modifications ne seront pas prises en compte !

Useres Azure 4

On voit que notre utilisatrice a accès à l’application Insight, avec le niveau de droit lecture.

Users Azure 5

Pour prouver que cela fonctionne, on se connecte avec notre nouvel utilisateur :

Users Azure 6On arrive sur le portail, « Parcourir », « Applications Insight » et hop !

Capture d’écran 2015-03-15 à 17.48.40Le rapport est là, accessible depuis un compte externe. On note que l’utilisatrice en question ne voit rien d’autre.

3. Les alertes avec Azure Insight !

La dernière fonctionnalité que vous monterai aujourd’hui sera liée à la possibilité de paramétrer des alertes lorsque certains évènements se produisent.

Dans votre application Insight, cliquez sur « Règles d’alerte ». Puis, dans la fenêtre qui s’affiche, sur « Ajouter une alerte ».

Alerte 1 Alerte 2


Vous pouvez alors paramétrer une alerte. Les possibilités sont nombreuses.

Nommez tout d’abord votre alerte, puis sélectionnez lors de quel type d’événement vous souhaitez être alertés.

Alerte 3

Pour ma part, je souhaite paramétrer une alerte sur le nombre de pages vues. Dès que celui-ci excède 100 au cours des dernières 24 heures, je souhaite recevoir un message.

Alerte 4

Cliquez sur OK, et voilà ! Encore une fonctionnalité à connaitre sur Azure Insight.

Si vous avez des questions, n’hésitez pas !

SharePoint Online Backup in Azure DocumentDB Tool – First step with DocumentDB

Hello all !

Microsoft has announced a crazy new service in Azure, the no SQL Database DocumentDB. DocumentDB can store objects in JSON (in flat files). What you need to know : to manage the database, you can use C#, JavaScript Server-Side (new Microsoft concept, which strength to step back ^^) and any other language that support REST API. DocumentDB Queries are very similar to SQL Queries (no CAML or other unforgettable SharePoint stuff), so you won’t be lost.

If you want more than this too really short presentation, please read this article.

There are a lot of pro and cons against those new kind of database (No SQL). So, my curiosity was picked. What can we do with those new DocumentDB service ? What are limitations, crazy new stuff, …

I think it would be a good exercise to discover Azure DocumentDB by developing a new tool. As you maybe know, I’m crazy about Azure, but also about SharePoint. So, I decided to experiment Azure DocumentDB by developing a tool to backup your SharePoint Online Sites, Lists, Libraries in DocumentDB.

This development is not for use in production (please don’t). If, one day, the tool is strong enough, I will open a CodePlex project. But we are sooooo far from that. In this example, I only backed up List Items (with no support of specific fields types). Nothing more.

What do we need to develop a good SharePoint Online Backup Tool in Azure DocumentDB ?

  • Visual Studio 2015 Preview (or Visual Studio 2013 with the last update and Microsoft Azure DocumentDB Client Library NuGet Package)
  • A SharePoint Online Site Collection
  • An Azure account to use :
    • DocumentDB
    • WebJob (don’t forget it’s a cloud backup tool, you’ll need to schedule some tasks)

Another last thing before coding : I did that in three hours during my week-end. It’s not optimized, not beautiful, not really « object-oriented ». This is only a first approach of DocumentBD, and it will be  improved in a next blog post. Trust me.

We spend to munch time in explanations. LET’S ROCK WITH AZURE NOW ! In the new portal preview, of course.

1. Click on « New », at the bottom of the page.Create your Document DB

Feed all of that boring fields, and click on « Create ». Note that the creation can take 10 minutes. It’s enough time to watch the SharePoint Blues Band (twice, because the video lasts 4:22).

2. After enjoying this cultural time, please write down (in NotePad, for example) the URI and Primary Key. You’ll need it later. Really.

To access those informations, please go to your Azure Dashboard, and click on the DocumentBD you’ve just created.

Azure DashBord

And then click on « Keys » (I really love this new interface, thank you MS. The old one was just… Old)

Keys

You can see the URI, and the Primary Key, called, in my foreign but beautiful language : URI and Clé Primaire.
Those keys are a way to access you database and execute operations on it. There are two « admin keys », and also two « Read Only keys ».
I think there is users management in this kind database, but I didn’t spend some time on right management. Let’s see it another time. You see that you can regenerate your keys by clicking on some buttons at the top of the window, if needed.

The database is ready. Let’s Rock With Visual Studio (and Azure) now !

3. Create a new Project, Application Console, or Azure WebJob (almost the same thing).
Usings you’ll need :

using Microsoft.Azure.Documents;
using Microsoft.Azure.Documents.Client;
using Microsoft.Azure.Documents.Linq;
using Microsoft.SharePoint.Client;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Security;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

4. SharePoint Online Connection, and Datas Retrieving.

Prepare a specific class to store datas of your SharePoint List. As I wrote above, I only code the backup for a SharePoint List. In the Progam.cs, add this :

 public class BackupedList
    {
        public string ListName;
        public List<BackupedItem> Items = new List<BackupedItem>();
        public class BackupedItem
        {
            public List<Values> ValuesList = new List<Values>();
            public class Values
            {
                public string Column;
                public string Value;
            }
        }
    }

Let’s connect to SharePoint :

using (ClientContext clientContext = new ClientContext("The URL of Your SharePoint"))
            {
                //Auth stuff
                SecureString ssPass = new SecureString();
                private static BackupedList blDeclarations = new BackupedList();
                foreach (char c in "PASSWORD".ToCharArray()) ssPass.AppendChar(c);
                clientContext.Credentials = new SharePointOnlineCredentials("YOUR O365 ACCOUNT", ssPass);
                //Get the list
                Web wCurrent = clientContext.Web;
                List lDeclarations = wCurrent.Lists.GetByTitle("THE TITLE OF YOUR LIST");
                //Get the items
                CamlQuery cqAllItems = new CamlQuery();
                ListItemCollection licItems = lDeclarations.GetItems(cqAllItems);
                //Load
                clientContext.Load(licItems);
                clientContext.ExecuteQuery();

                //Get datas
                foreach (ListItem liCurrent in licItems)
                {
                    BackupedList.BackupedItem biCurrent = new BackupedList.BackupedItem();
                    //Prepare datas
                    foreach (KeyValuePair<string, object> dicItemValues in liCurrent.FieldValues)
                    {
                        BackupedList.BackupedItem.Values vCurrent = new BackupedList.BackupedItem.Values();
                        vCurrent.Column = dicItemValues.Key;
                        if (dicItemValues.Value != null)
                        {
                            //TODO : other values types management 
                            vCurrent.Value = dicItemValues.Value.ToString();
                        }
                        biCurrent.ValuesList.Add(vCurrent);
                    }
                    blDeclarations.Items.Add(biCurrent);
                    //TODO : Attachments management
                }
            }
    }

We stored all of the list items values in blDeclarations.

5. DocumentDB !!!
Prepare the field by adding all of those methods to your code.
Many thanks to Ryan Crawcour for that. It was really helpful. 

        /// <summary>
        /// Get the database by name, or create a new one if one with the name provided doesn't exist.
        /// </summary>
        /// <param name="id">The name of the database to search for, or create.</param>
        private static async Task<Database> GetOrCreateDatabaseAsync(string id)
        {
            // Create a query object for database, filter by name.
            IEnumerable<Database> query = from db in client.CreateDatabaseQuery()
                                          where db.Id == id
                                          select db;
            // Run the query and get the database (there should be only one) or null if the query didn't return anything.
            // Note: this will run synchronously. If async exectution is preferred, use IDocumentServiceQuery<T>.ExecuteNextAsync.
            Database database = query.FirstOrDefault();
            if (database == null)
            {
                // Create the database.
                database = await client.CreateDatabaseAsync(new Database { Id = id });
            }
            return database;
        }

        /// <summary>
        /// Get a DocumentCollection by id, or create a new one if one with the id provided doesn't exist.
        /// </summary>
        /// <param name="dbLink">The Database SelfLink property where this DocumentCollection exists / will be created</param>
        /// <param name="id">The id of the DocumentCollection to search for, or create.</param>
        /// <returns>The matched, or created, DocumentCollection object</returns>
        private static async Task<DocumentCollection> GetOrCreateCollectionAsync(string dbLink, string id)
        {
            DocumentCollection collection = client.CreateDocumentCollectionQuery(dbLink).Where(c => c.Id == id).ToArray().FirstOrDefault();
            if (collection == null)
            {
                collection = await client.CreateDocumentCollectionAsync(dbLink, new DocumentCollection { Id = id });
            }

            return collection;
        }
    }

Then the code to launch the copy to the DocumentDB :

//DocumentDB
string databaseId = "spolbckpdb";
string collectionId = "listbckp";

 //Read the DocumentDB endpointUrl and authorisationKeys from config
 //These values are available from the Azure Management Portal on the DocumentDB Account Blade under "Keys"
 //NB > Keep these values in a safe & secure location. Together they provide Administrative access to your DocDB account
string endpointUrl = "THE URI YOU WROTE BEFORE";
string authorizationKey = "THE KEY !";
using (client = new DocumentClient(new Uri(endpointUrl), authorizationKey))
{
      try { RunDemoAsync(databaseId, collectionId).Wait(); }
      catch (Exception ex) { Console.WriteLine(ex.ToString()); Console.Read(); }
}

private static async Task RunDemoAsync(string databaseId, string collectionId)
{
     //Get, or Create, the Database
     var database = await GetOrCreateDatabaseAsync(databaseId);
     //Get, or Create, the Document Collection
     var collection = await GetOrCreateCollectionAsync(database.SelfLink, collectionId);
     //One approach to access to DocumentDB documents in .NET is through “POCOs” or plain-old-clr-objects
     //which will use JSON.NET serialization and deserialization under the covers to transmit the data over the wire
     Document created = await client.CreateDocumentAsync(collection.SelfLink, blDeclarations);
}

Please find the Visual Studio Project here.

You can debug, everything should be fine. If not, please tell me in comments.

Known issues :
Error during debug « The authorization token is not valid at the current time (…) ».
Solution :  https://social.msdn.microsoft.com/Forums/azure/en-US/1b75f98c-5b99-4224-8a20-8d90752019d5/the-authorization-token-is-not-valid-at-the-current-time?forum=AzureDocumentDB

6. Schedule the backup with Azure WebJobs
This is one of the best tools in Azure, it’s WebJobs. In Visual Studio, right click on your project, and then « Publish as Azure WebJob » and schedule the task !

Azure WebJob

I’d like to thanks those guys :
https://code.msdn.microsoft.com/Azure-DocumentDB-NET-Code-6b3da8af#content
http://azure.microsoft.com/en-us/documentation/articles/documentdb-sql-query/
http://weblogs.asp.net/scottgu/azure-new-documentdb-nosql-service-new-search-service-new-sql-alwayson-vm-template-and-more
http://www.vrdmn.com/2013/01/authenticating-net-client-object-model.html
http://stackoverflow.com/questions/20950628/authenticating-client-with-office-365-sharepoint-online

Next time, I will improve my ugly code, and of course, read in DocumentDB to add restoring features  !

Thank you for your time, and stay tuned !