Nmedia - Fotolia

Administration Microsoft : comment utiliser Azure Functions

Avec Azure Functions, les administrateurs peuvent bâtir une automatisation avancée, bénéficier de contrôles de sécurité renforcés et créer des flux de travail hautement personnalisés sur les services cloud de Microsoft.

Les administrateurs de Microsoft 365 ont beaucoup à faire. Heureusement, Azure Functions est un outil qui leur offre des capacités d’automatisation et d’intégration avancées pour les aider à réduire leur charge de travail.

L’une des principales caractéristiques d’Azure Functions est sa capacité à surveiller certaines situations et à réagir par une action ou une notification. En comprenant comment utiliser ce service, les administrateurs disposent d’une nouvelle façon de concevoir des approches innovantes pour les tâches récurrentes. Leur travail peut dès lors s’effectuer rapidement et plus efficacement grâce à l’automatisation.

Qu’est-ce qu’Azure Functions ?

Azure Functions est un service serverless (on paie pour l’intensité de son utilisation, pas pour les ressources de sa machine virtuelle) destiné aux entreprises qui souhaitent agencer des processus automatiques pour divers scénarios d’administration, sans gérer explicitement l’infrastructure sous-jacente. Une Azure Function exécute du code en réponse à une multitude d’événements déclenchés par les services de Microsoft en cloud. Un tel événement peut par exemple être la création d’un nouvel utilisateur dans Microsoft EntraID, anciennement Azure Active Directory, ou encore le placement d’un fichier dans un dossier OneDrive.

Avec Azure Functions, vous n’avez pas besoin de gérer d’infrastructure, ce qui facilite l’exécution de petites fonctions d’appoint. Azure Functions prend en charge plusieurs langages de programmation, notamment C#, Java, JavaScript, TypeScript, Python et PowerShell, ce qui en fait une option flexible pour diverses applications.

Microsoft facture Azure Functions selon l’utilisation des ressources en ligne impliquées dans l’exécution de la fonction. Les fonctions plus complexes coûtent plus cher, mais une simple fonction de surveillance, qui vérifie le téléchargement d’un fichier vers SharePoint Online et envoie ensuite un e-mail, ne coûte qu’un centime toutes les 2 000 exécutions.

Quels sont les avantages d’Azure Functions ?

Les administrateurs doivent aligner les ressources en ligne sur les objectifs de l’entreprise de la manière la plus efficace et la plus sécurisée possible. Dans ce contexte, Azure Functions offre plusieurs avantages pour atteindre ces objectifs :

  • Efficacité et réduction des coûts. Microsoft utilise un modèle de tarification « pay-as-you-go » pour Azure Functions. Les entreprises ne supportent des coûts que lorsque les fonctions sont exécutées. Cette approche doit servir à réaliser des économies significatives par rapport au maintien permanent en production d’une infrastructure de serveurs.
  • Évolutivité. L’architecture serverless fait évoluer dynamiquement les ressources pour gérer les pics d’activité, sans nécessiter d’intervention.
  • Sécurité intégrée. Avec Microsoft Entra ID et d’autres outils Microsoft, Azure Functions permet aux administrateurs d’appliquer des politiques de sécurité et de conformité aux applications sans serveur.
  • Flux de travail rationalisés. Azure Functions se connecte à d’autres services Azure et à des ressources externes par le biais de déclencheurs (« triggers ») et de liens dédiés pour automatiser les flux de travail, réduisant ainsi le besoin d’intervention manuelle.
  • Flexibilité de développement. Azure Functions prend en charge de nombreux langages de programmation afin de permettre aux administrateurs de développer et de déployer des fonctions personnalisées pour diverses tâches.

Comprendre Azure Functions

Pour bien comprendre comment Azure Functions s’inscrit dans l’écosystème de Microsoft, il est utile de le comparer à d’autres services accessibles aux administrateurs :

  • Azure Logic Apps est un service permettant de créer des flux de travail automatisés qui intègrent des applications, des données, des services et des systèmes. Son concepteur visuel facilite la création de flux de travail pour les utilisateurs qui n’ont pas d’expérience en matière de codage. Azure Logic Apps est idéal pour connecter divers systèmes et services, y compris des applications SaaS et des API personnalisées.
  • Azure Automation est un service d’automatisation et de configuration basé sur le cloud, conçu pour une gestion cohérente des environnements Azure et non Azure. Il permet principalement d’automatiser les tâches répétitives, telles que les déploiements, la mise en place d’environnements et la gestion de la configuration à l’aide de scripts PowerShell et Python.
  • Microsoft Graph donne aux applications un accès API unifié vers les données, les relations et les informations des services et des applications Microsoft 365. Azure Functions utilise Microsoft Graph pour traiter les données de manière événementielle, en répondant à des déclencheurs ou à des changements spécifiques.

Les portails Azure et Microsoft 365 sont des outils basés sur une interface graphique pour gérer les services, les utilisateurs et les configurations. Ils sont principalement utilisés pour les tâches administratives et les ajustements de paramètres.

Quels sont les avantages d’Azure Functions avec Microsoft 365 ?

Azure Functions offre une série d’avantages qui en font la solution idéale pour les administrateurs de Microsoft 365 souhaitant créer des flux de travail plus efficaces, sécurisés et personnalisés. Azure Functions automatise les tâches complexes dans les environnements Microsoft 365 en exécutant du code en réaction à des événements, avec des capacités qui vont au-delà de ce que les outils d’automatisation standard proposent.

Les administrateurs peuvent créer des routines sur mesure déclenchées par des événements spécifiques dans Microsoft 365. Citons l’arrivée d’un e-mail, des événements de calendrier, ou encore des modifications dans des documents SharePoint.

Azure Functions prend en charge un large éventail de langages de programmation et connecte de manière transparente plusieurs services Azure et plusieurs API externes. Cela permet de bâtir des intégrations qui seraient difficiles, voire impossibles, avec des outils prêts à l’emploi.

Azure Functions se distingue des autres services de la plateforme par ses capacités de personnalisation. Les administrateurs peuvent écrire du code pour traiter des transformations de données, intégrer des services tiers ou automatiser des flux de travail complexes. Azure Functions automatise les flux de travail complexes qui impliquent plusieurs étapes et une logique conditionnelle.

Azure Functions facilite également les traitements en temps réel pour une réponse instantanée aux modifications des données ou aux événements du système. L’exécution des tâches automatisées n’en est que plus rapide et efficace.

Les fonctions de sécurité d’Azure Functions préservent la confidentialité et l’intégrité des données dans les environnements Microsoft 365. Azure Functions fonctionne dans un environnement isolé pour éviter que l’exécution du code n’affecte la sécurité ou les performances d’autres services.

Azure Functions s’intègre également à Microsoft EntraID et prend en charge le contrôle d’accès basé sur les rôles. Cela permet aux administrateurs de définir des politiques de sécurité et des autorisations pour l’accès et la gestion des fonctions. En outre, Azure Functions est conforme aux normes de confidentialité et de conformité de Microsoft, ce qui en fait un outil idéal pour les scénarios de données sensibles.

Quels sont les inconvénients potentiels d’Azure Functions ?

Bien qu’Azure Functions soit un framework complet pour créer et distribuer des applications basées sur des événements, il existe quelques inconvénients potentiels, tels que la complexité des architectures serverless, les difficultés d’intégration avec les systèmes actuels et les dépenses associées aux services cloud.

Certaines équipes informatiques pourraient avoir des difficultés à adopter Azure Functions. Pour tirer le meilleur parti de ce service, il faut bien maîtriser le modèle serverless, l’architecture pilotée par les événements et comprendre les caractéristiques et les limites spécifiques. Un modèle serverless oblige les administrateurs à penser différemment l’architecture, l’évolutivité et la gestion des états. Le débogage des applications serverless peut être plus complexe en raison de leur nature distribuée.

De même, une surveillance efficace nécessite de se familiariser avec les outils et les pratiques spécifiques à Azure. Bien qu’Azure Functions offre des capacités d’intégration étendues avec les services Azure et les systèmes externes, sa connexion à l’infrastructure existante peut demander beaucoup d’efforts, en particulier lorsqu’il s’agit de systèmes hérités complexes ou de services tiers qui ne sont pas conçus pour les architectures sans serveur.

Bien qu’Azure Functions utilise un modèle de tarification basé sur la consommation, essayer de comprendre et de gérer les coûts peut être un inconvénient potentiel. Les coûts varient en fonction des temps d’exécution, du nombre d’exécutions et de la consommation de ressources. En l’absence d’une planification et d’un suivi minutieux, les entreprises risquent d’être confrontées à des coûts plus élevés que prévu.

Comment utiliser Azure Functions ?

Les administrateurs de Microsoft 365 créent des applications évolutives basées sur des événements en se connectant à Azure Functions via le portail Azure ou en utilisant Visual Studio Code (VS Code).

Le concept des déclencheurs (« triggers ») est fondamental dans Azure Functions. Ils déterminent quand et comment exécuter une fonction. Un type de déclencheur spécifique est lié à chaque fonction, comme une requête HTTP, un message dans une file d’attente ou un minuteur. Les déclencheurs HTTP activent votre fonction par le biais de requêtes HTTP, ce qui les rend adaptés à la création d’API et de webhooks. Les déclencheurs de minuterie planifient l’exécution des fonctions à des intervalles définis, ce qui est parfait pour les tâches de maintenance régulières ou le traitement par lots. Les déclencheurs de file d’attente répondent aux messages placés dans Azure Queue Storage.

Microsoft propose une série de modèles pour les scénarios les plus courants, qui incluent un code prédéfini et des paramètres de configuration. Lors de la création d’une nouvelle fonction dans le portail Azure, vous sélectionnez les modèles en fonction du déclencheur que vous souhaitez utiliser et de la langue que vous préférez. L’extension Azure Functions pour VS Code permet également de créer des fonctions à partir de modèles, ce qui simplifie le processus de développement.

Comment utiliser Azure Functions avec PowerShell ?

L’exemple ci-dessous utilise le portail Azure pour créer et gérer une fonction Azure. Pour cet exemple, vous devez utiliser le module PowerShell PnP, en supposant que votre environnement lui fait déjà confiance. Si ce n’est pas le cas, veuillez consulter cette documentation pour exécuter Register-PnPManagementShellAccess.

Voici la marche à suivre :

1/ Connectez-vous au portail Azure à l’aide de votre compte Microsoft.

2/ Allez dans Créer une ressource, recherchez Function App et suivez l’assistant pour créer une nouvelle application de fonction. Vous devez spécifier des détails tels que votre abonnement, le groupe de ressources, le nom de l’application fonctionnelle et la pile d’exécution.

Créez Azure Function
Commencer par déployer Azure-Function depuis le portail Azure.

3/ Une fois que vous avez créé l’application de fonction, vous pouvez ajouter de nouvelles fonctions directement dans le portail.

4/ Cliquez sur App Files dans la navigation de gauche.

5/ Sélectionnez profile.ps1 dans la liste déroulante, commentez les lignes suivantes et cliquez sur Save :

#if ($env:MSI_SECRET) {
#    Disable-AzContextAutosave -Scope Process | Out-Null
#    Connect-AzAccount -Identity
#}​

6/ Sélectionnez dans la liste déroulante requirements.psd1, modifiez le code comme suit et cliquez sur Save :

@{
    'PnP.PowerShell' = '2.*'
 }​

7/ Une fois dans Function App, cliquez sur Create et choisissez HTTP Trigger.

8/ Définissez le nom et l’autorisation sur Anonymous pour les tests.

9/ Cliquez sur le nouveau HTTP Trigger et sur l’option Code + Test.

10/ Remplacez le code actuel par le code suivant, et cliquez sur Save ; mettez à jour l’URL et la bibliothèque si nécessaire :

using namespace System.Net

param($Request, $TriggerMetadata)

$securePassword = ConvertTo-SecureString $env:User_Pwd -AsPlainText -Force
$credentials = New-Object PSCredential ($env:User_Account, $securePassword)
Connect-PnPOnline https://site.sharepoint.com/sites/Mark8ProjectTeam -Credentials $credentials
$siteRelativeUrl = "/sites/Mark8ProjectTeam/Shared Documents"

$script:fileDetailsArray = @()

function Get-FilesRecursively {
    param (
        [string]$folderServerRelativeUrl
    )

    $items = Get-PnPListItem -List "Shared Documents" -FolderServerRelativeUrl $folderServerRelativeUrl -PageSize 500

    foreach ($item in $items) {
        if ($item.FileSystemObjectType -eq "Folder") {
            Get-FilesRecursively -folderServerRelativeUrl $item.FieldValues.FileRef
        } else {
            $fileDetails = Get-PnPProperty -ClientObject $item -Property "File"
            if ($fileDetails.TimeLastModified -gt (Get-Date).AddDays(-10)) {

                $fileObj = [PSCustomObject]@{
                    FileName = if ([string]::IsNullOrEmpty($fileDetails.Name)) { $item.FieldValues["Title"] } else { $fileDetails.Name }
                    FilePath = $item.FieldValues["FileRef"]
                    Modified = $fileDetails.TimeLastModified
                    ModifiedBy = $item.FieldValues["Editor"].LookupValue
                }

                $script:fileDetailsArray += $fileObj
            }
        }
    }
}

Get-FilesRecursively -folderServerRelativeUrl $siteRelativeUrl

$jsonOutput = $script:fileDetailsArray | ConvertTo-Json -Depth 10

Disconnect-PnPOnline

Write-Output $jsonOutput

Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
    StatusCode = [HttpStatusCode]::OK
    Body = $jsonOutput
    Headers = @{
        "Content-Type" = "application/json"
    }
})​

11/ Exécutez la fonction à l’aide des boutons Test/Run ou Get Function URL.

12/ Enfin, naviguez jusqu’à la racine de Function App et cliquez sur Configuration.

13/ Dans les paramètres de l’application, ajoutez deux nouveaux paramètres d’application : l’un appelé User_Account et l’autre User_Pwd. Remplissez-les avec l’ensemble des informations d’identification que vous souhaitez utiliser pour accéder à SharePoint Online. N’utilisez pas cette approche pour la production.

L’option Test/Run vous permet de l’afficher directement dans la fenêtre du déclencheur. La fonction Get Url fournit une URL que vous pouvez coller dans le navigateur qui exécute l’Azure Function. Une fois la fonction Azure exécutée, elle renvoie une chaîne JSON contenant tous les fichiers modifiés au cours de la journée écoulée, à partir de l’emplacement spécifique dans SharePoint Online.

Monitoring des fichiers SharePoint Online
L'exécution d'Azure Function permet d'afficher les fichiers modifiés dans SharePoint Online au cours des dernières 24 heures.

Vous pouvez utiliser d’autres langages, tels que Python, pour apporter d’autres améliorations. Par exemple, vous pouvez modifier le code pour créer un rapport et l’envoyer par e-mail à d’autres utilisateurs ou administrateurs.

Microsoft propose une documentation complète, des exemples de code et des tutoriels pour Azure Functions, destinés aux débutants et aux utilisateurs avancés.

Pour approfondir sur IaaS