Tutoriel : Accorder à une application de fonction Azure l’accès à un compte Media Services
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.
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 leprincipalId
figurant dans la réponse JSON à la commandeaz functionapp create
. -
scope
est l’id
figurant dans la réponse JSON à la commandeaz 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 :
- Q & R
-
Stack Overflow. Étiquetez les questions avec
azure-media-services
. - @MSFTAzureMedia ou utiliser @AzureSupport pour demander de l’aide.
- Ouvrez un ticket de support via le Portail Azure.