Partager via


Tutoriel : Accorder à une application de fonction Azure l’accès à un compte Media Services

Logo de Media Services v3


Avertissement

Azure Media Services sera mis hors service le 30 juin 2024. Pour plus d’informations, consultez le Guide de mise hors service AMS.

Supposons que vous souhaitiez faire savoir aux visiteurs de votre site web ou de votre application que vous êtes « À l’antenne » dans votre studio de diffusion. Vous pouvez déterminer à quel moment des événements en direct Media Services s’exécutent en utilisant l’API Media Services, mais il peut être difficile d’appeler celle-ci à partir d’un appareil intégré. Au lieu de cela, vous pouvez exposer une API HTTP pour votre appareil intégré à l’aide d’Azure Functions. Azure Functions peut ensuite appeler Media Services pour recueillir l’état de l’événement en direct.

Identités managées donnant à une application de fonction l’accès à un compte Media Services

Ce tutoriel utilise l’API Media Services 2020-05-01.

Connexion à Azure

Pour utiliser l’une des commandes de cet article, vous devez d’abord être connecté à l’abonnement que vous souhaitez utiliser.

Connectez-vous à Azure. Lorsque vous utilisez cette commande, vous êtes invité à entrer l’abonnement que vous souhaitez utiliser.

az login

Définir l’abonnement

Utilisez cette commande pour définir l’abonnement que vous souhaitez utiliser.

Définir l’abonnement Azure avec l’interface CLI

Dans la commande suivante, fournissez l’ID d’abonnement Azure que vous souhaitez utiliser pour le compte Media Services.

az account set --subscription <subscriptionName>

Prérequis

Important

Avant d’aborder ce tutoriel, nous vous recommandons vivement de suivre la section Créer une fonction C# dans Azure à partir du démarrage rapide de ligne de commande. Cela se justifie par le fait que les étapes de configuration décrites dans celle-ci sont les mêmes que celles à suivre ici. Cela vous offrira également la possibilité de travailler avec un exemple simple sur lequel le présent tutoriel est basé.

Noms de ressource

Avant de commencer, choisissez les noms des ressources que vous allez créer. Ils doivent être aisément identifiables en tant qu’ensemble, surtout si vous ne prévoyez pas de les utiliser une fois les tests terminés. Les règles de nommage varient selon les types de ressources. Il est donc préférable de s’en tenir aux minuscules. Par exemple, « mediatest1rg » pour le nom de votre groupe de ressources et « mediatest1stor » pour le nom de votre compte de stockage. Utilisez les mêmes noms à chacune des étapes de cet article.

Vous verrez ces noms référencés dans les commandes ci-dessous. Les noms de ressources dont vous aurez besoin sont les suivants :

  • myRG
  • myStorageAccount
  • myAmsAccount
  • location
  • myFunction : utilisez « OnAir »
  • myLiveEvent : utilisez « live1 »
  • ipaddresses : utilisez « 0.0.0./32 »

Notes

Les tirets ci-dessus sont uniquement utilisés pour séparer les mots. Compte tenu de l’incohérence de nommage des ressources dans les services Azure, n’utilisez pas de tirets lorsque vous nommez vos ressources.

Tout ce qui est représenté par 00000000-0000-0000-0000000000 correspond à l’identificateur unique de la ressource. Cette valeur est généralement retournée par une réponse JSON. Vous devez copier et coller les réponses JSON dans le Bloc-notes ou tout autre éditeur de texte, car ces réponses contiennent des valeurs dont vous aurez besoin pour les commandes CLI ultérieures.

Par ailleurs, vous ne créez pas le nom de région. Celui-ci est déterminé par Azure.

Liste des régions Azure

Si besoin, utilisez cette commande pour accéder à la liste des régions :

Utilisez cette commande pour répertorier les régions disponibles pour votre compte.

az account list-locations --query "[].{DisplayName:displayName, Name:name}" -o table

Séquence

Chacune des étapes ci-dessous suit un ordre particulier car une ou plusieurs valeurs des réponses JSON sont utilisées à l’étape suivante de la séquence.

Créer un compte de stockage

Un compte de stockage doit être associé au compte Media Services que vous allez créer. Commencez par créer le compte de stockage à associer au compte Media Services. Vous allez utiliser your-storage-account-name pour les étapes suivantes.

Créer un compte de stockage Azure avec l’interface CLI

Utilisez les commandes suivantes pour créer un compte Stockage Azure.

Pour créer un compte de stockage, vous devez d’abord créer un groupe de ressources dans un emplacement.

Pour répertorier les emplacements disponibles, utilisez la commande suivante :

Lister les emplacements disponibles avec l’interface CLI

Pour répertorier les emplacements disponibles, utilisez la commande suivante :

az account list-locations

Créer un groupe de ressources avec l’interface CLI

Pour créer un groupe de ressources, utilisez la commande suivante :

az group create -n <resourceGroupName> --location chooseLocation

Choisir une référence (SKU)

Vous devez également choisir un niveau tarifaire pour votre compte de stockage. Vous pouvez répertorier les comptes de stockage.

Choisissez un niveau tarifaire dans la liste suivante : Standard_LRS, Standard_GRS, Standard_RAGRS, Standard_ZRS, Premium_LRS, Premium_ZRS, Standard_GZRS, Standard_RAGZRS.

  • Remplacez myStorageAccount par un nom unique dont la longueur est inférieure à 24 caractères.
  • Remplacez chooseLocation par la région dans laquelle vous voulez travailler.
  • Remplacez chooseSKU par le niveau tarifaire de votre choix.
az storage account create -n <myStorageAccount> -g <resourceGroup>  --location <chooseLocation> --sku <chooseSKU>

Créer un compte Media Services

À présent, créez le compte Media Services. Recherchez

Pour plus d’informations sur cette commande, consultez la référence relative à l’interface CLI Media Services.

Configurer la fonction Azure

Dans cette section, vous allez configurer votre fonction Azure.

Obtenir le code

Utilisez Azure Functions pour créer votre projet de fonction et récupérer le code du modèle HTTP.

func init MediaServicesLiveMonitor –dotnet

Modifier le répertoire

Veillez à faire de votre répertoire de travail le répertoire du projet. Dans le cas contraire, vous obtiendrez des erreurs.

cd .\MediaServicesLiveMonitor\

Nommer votre fonction

func new --name OnAir --template "HTTP trigger" --authlevel "anonymous"

Configurer le projet de fonctions

Installer Media Services et d’autres extensions

Exécutez la commande dotnet add package dans la fenêtre de terminal pour installer les packages d’extension dont vous avez besoin dans votre projet. La commande suivante installe Media Services ainsi que les packages d’identité Azure.

dotnet add package Microsoft.Azure.Management.Media
dotnet add package Azure.Identity

Modifier le code de OnAir.cs

Modifiez le fichier OnAir.cs. Remplacez les variables subscriptionId, resourceGroup et mediaServicesAccountName par celles que vous avez choisies précédemment.

using Azure.Core;
using Azure.Identity;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Management.Media;
using Microsoft.Azure.Management.Media.Models;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;
using Microsoft.Rest;
using System.Threading.Tasks;

namespace MediaServicesLiveMonitor
{
    public static class OnAir
    {
        [FunctionName("OnAir")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string name = req.Query["name"];

            if (string.IsNullOrWhiteSpace(name))
            {
                return new BadRequestObjectResult("Missing 'name' URL parameter");
            }

            var credential = new ManagedIdentityCredential();
            var accessTokenRequest = await credential.GetTokenAsync(
                new TokenRequestContext(
                    scopes: new string[] { "https://management.core.windows.net" + "/.default" }
                    )
                );
            ServiceClientCredentials credentials = new TokenCredentials(accessTokenRequest.Token, "Bearer");

            var subscriptionId = "00000000-0000-0000-000000000000";                 // Update
            var resourceGroup = "<your-resource-group-name>";                       // Update
            var mediaServicesAccountName = "<your-media-services-account-name>";    // Update

            var mediaServices = new AzureMediaServicesClient(credentials)
            {
                SubscriptionId = subscriptionId
            };

            var liveEvent = await mediaServices.LiveEvents.GetAsync(resourceGroup, mediaServicesAccountName, name);

            if (liveEvent == null)
            {
                return new NotFoundResult();
            }

            return new OkObjectResult(liveEvent.ResourceState == LiveEventResourceState.Running ? "On air" : "Off air");
        }
    }
}

Créer l’application de fonction

Créez l’application de fonction pour héberger la fonction. Son nom est celui que vous avez téléchargé précédemment, MediaServicesLiveMonitorApp.


az functionapp create --resource-group <your-resource-group-name> --consumption-plan-location your-region --runtime dotnet --functions-version 3 --name MediaServicesLiveMonitorApp --storage-account mediatest3store --assign-identity "[system]"

Recherchez principalId dans la réponse JSON :

{
...
"identity": {
//Note the principalId value for the following step
    "principalId": "00000000-0000-0000-000000000000",
    "tenantId": "00000000-0000-0000-000000000000",
    "type": "SystemAssigned",
    "userAssignedIdentities": null
  }
...

Accorder à l’application de fonction l’accès à la ressource de compte Media Services

Pour cette demande :

  • assignee est le principalId figurant dans la réponse JSON à la commande az functionapp create.
  • scope est l’id figurant dans la réponse JSON à la commande az ams account create. Examinez l’exemple de réponse JSON ci-dessus.
az role assignment create --assignee 00000000-0000-0000-000000000000 --role "Media Services Account Administrator" --scope "/subscriptions/<the-subscription-id>/resourceGroups/<your-resource-group>/providers/Microsoft.Media/mediaservices/<your-media-services-account-name>"

Publier la fonction

func azure functionapp publish MediaServicesLiveMonitorApp

Validation

Dans un navigateur, accédez à l’URL de la fonction, par exemple :

https://mediaserviceslivemonitorapp.azurewebsites.net/api/onair?name=live1

Cela doit avoir pour effet de retourner une erreur 404 (introuvable), car l’événement en direct n’existe pas encore.

Créer un événement en direct

az ams live-event create --resource-group test3 --account-name mediatest3 --name live1 --streaming-protocol RTMP

Dans un navigateur, accédez à l’URL de la fonction, par exemple :

https://mediaserviceslivemonitorapp.azurewebsites.net/api/onair?name=live1

Cela doit avoir pour effet d’afficher « Hors antenne ».

Démarrer l’événement en direct

Si vous démarrez l’événement en direct, la fonction doit retourner « À l’antenne ».

az ams live-event start live1

Cette fonction accorde l’accès à quiconque. La sécurisation de l’accès à la fonction Azure et le branchement d’un témoin « À l’antenne » sortent du cadre de ce document.

Nettoyer les ressources

Si vous n’avez pas l’intention d’utiliser les ressources que vous avez créées, supprimez le groupe de ressources.

Supprimer un groupe de ressources avec l’interface CLI

az group delete --name <your-resource-group-name>

Obtenir de l’aide et du support

Vous pouvez contacter Media Services pour toute question ou suivre nos mises à jour selon l’une des méthodes suivantes :