Esercitazione: Concedere a un'app per le funzioni di Azure l'accesso a un account di Servizi multimediali
Avviso
Servizi multimediali di Azure verrà ritirato il 30 giugno 2024. Per altre informazioni, vedere la Guida al ritiro di AMS.
Si supponga di voler consentire ai visitatori di accedere al sito Web o all'applicazione per sapere che si è "On Air" nello studio di trasmissione. È possibile determinare quando gli eventi live di Servizi multimediali sono in esecuzione usando l'API servizi multimediali, ma potrebbe essere difficile chiamare da un dispositivo incorporato. È invece possibile esporre un'API HTTP per il dispositivo incorporato usando Funzioni di Azure. Funzioni di Azure potrebbe quindi chiamare Servizi multimediali per ottenere lo stato dell'evento live.
Questa esercitazione usa l'API Servizi multimediali 2020-05-01.
Accedere ad Azure
Per usare uno dei comandi di questo articolo, è prima necessario accedere alla sottoscrizione che si vuole usare.
Accedere ad Azure. Quando si usa questo comando, verrà richiesto di specificare la sottoscrizione che si vuole usare.
az login
Impostare la sottoscrizione
Usare questo comando per impostare la sottoscrizione da usare.
Impostare la sottoscrizione di Azure con l'interfaccia della riga di comando
Nel comando seguente specificare l'ID della sottoscrizione di Azure che si vuole usare per l'account di Servizi multimediali.
az account set --subscription <subscriptionName>
Prerequisiti
Importante
È consigliabile usare la guida introduttiva Creare una funzione C# in Azure dalla riga di comando prima di provare questa esercitazione. Ciò è dovuto al fatto che i passaggi di configurazione inclusi sono gli stessi passaggi necessari qui. Offre anche la possibilità di lavorare con un semplice esempio su cui si basa questa esercitazione.
Nomi di risorse
Prima di iniziare, decidere i nomi delle risorse che verranno create. Devono essere facilmente identificabili come set, soprattutto se non si prevede di usarli dopo aver completato i test. Le regole di denominazione sono diverse per molti tipi di risorse, quindi è consigliabile attenersi a tutte le lettere minuscole. Ad esempio, "mediatest1rg" per il nome del gruppo di risorse e "mediatest1stor" per il nome dell'account di archiviazione. Usare gli stessi nomi per ogni passaggio di questo articolo.
Questi nomi verranno visualizzati nei comandi seguenti. I nomi delle risorse necessarie sono:
- myRG
- myStorageAccount
- myAmsAccount
- posizione
- myFunction: usare "OnAir"
- myLiveEvent: usare "live1"
- ipaddresses use: "0.0.0./32"
Nota
I trattini precedenti vengono usati solo per separare le parole guida. A causa dell'incoerenza della denominazione delle risorse nei servizi di Azure, non usare trattini quando si assegnano un nome alle risorse.
Qualsiasi elemento rappresentato da 000000000-0000-0000-000000000 è l'identificatore univoco della risorsa. Questo valore viene in genere restituito da una risposta JSON. È necessario copiare e incollare le risposte JSON nel Blocco note o in un altro editor di testo, in quanto tali risposte conterranno i valori necessari per i comandi successivi dell'interfaccia della riga di comando.
Inoltre, non si crea il nome dell'area. Il nome dell'area è determinato da Azure.
Elencare le aree di Azure
Se non si è certi del nome effettivo dell'area da usare, usare questo comando per ottenere un elenco:
Usare questo comando per elencare le aree disponibili per l'account.
az account list-locations --query "[].{DisplayName:displayName, Name:name}" -o table
Sequenza
Ognuno dei passaggi seguenti viene eseguito in un ordine specifico perché uno o più valori delle risposte JSON vengono usati nel passaggio successivo della sequenza.
Creare un account di archiviazione
L'account di Servizi multimediali che verrà creato deve avere un account di archiviazione associato. Creare prima l'account di archiviazione per l'account di Servizi multimediali. Si userà your-storage-account-name
per i passaggi successivi.
Creare un account di archiviazione di Azure con l'interfaccia della riga di comando
Usare i comandi seguenti per creare un account di archiviazione di Azure.
Per creare un account di archiviazione, è prima necessario creare un gruppo di risorse all'interno di una posizione.
Per elencare i percorsi disponibili, usare il comando seguente:
Elencare le posizioni disponibili con l'interfaccia della riga di comando
Per elencare i percorsi disponibili, usare il comando seguente:
az account list-locations
Creare un gruppo di risorse con l'interfaccia della riga di comando
Per creare un gruppo di risorse, usare il comando seguente:
az group create -n <resourceGroupName> --location chooseLocation
Scegliere uno SKU
È anche necessario scegliere uno SKU per l'account di archiviazione. È possibile elencare gli account di archiviazione.
Scegliere uno SKU dall'elenco seguente: Standard_LRS, Standard_GRS, Standard_RAGRS, Standard_ZRS, Premium_LRS, Premium_ZRS, Standard_GZRS, Standard_RAGZRS.
- Passare
myStorageAccount
a un nome univoco con una lunghezza inferiore a 24 caratteri. - Passare
chooseLocation
all'area in cui si vuole lavorare. - Passare
chooseSKU
allo SKU preferito.
az storage account create -n <myStorageAccount> -g <resourceGroup> --location <chooseLocation> --sku <chooseSKU>
Creare un account di Servizi multimediali
Creare ora l'account di Servizi multimediali. Cercare l'elemento '
Per altre informazioni su questo comando, vedere le informazioni di riferimento sull'interfaccia della riga di comando di Servizi multimediali.
Configurare la funzione di Azure
In questa sezione si configurerà la funzione di Azure.
Ottenere il codice
Usare il Funzioni di Azure per creare il progetto di funzione e recuperare il codice dal modello HTTP.
func init MediaServicesLiveMonitor –dotnet
Cambia directory
Assicurarsi di modificare la directory di lavoro nella directory del progetto. In caso contrario, verranno visualizzati errori.
cd .\MediaServicesLiveMonitor\
Assegnare un nome alla funzione
func new --name OnAir --template "HTTP trigger" --authlevel "anonymous"
Configurare il progetto di funzioni
Installare Servizi multimediali e altre estensioni
Eseguire il comando dotnet add package nella finestra Terminale per installare i pacchetti di estensione necessari nel progetto. Il comando seguente installa i pacchetti Servizi multimediali e Identità di Azure.
dotnet add package Microsoft.Azure.Management.Media
dotnet add package Azure.Identity
Modificare il codice OnAir.cs
Modificare il OnAir.cs
file. Modificare subscriptionId
le variabili , resourceGroup
e mediaServicesAccountName
con quelle definite in precedenza.
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");
}
}
}
Creare l'app per le funzioni
Creare l'app per le funzioni per ospitare la funzione. Il nome corrisponde a quello scaricato in precedenza, 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]"
principalId
Cercare nella risposta JSON:
{
...
"identity": {
//Note the principalId value for the following step
"principalId": "00000000-0000-0000-000000000000",
"tenantId": "00000000-0000-0000-000000000000",
"type": "SystemAssigned",
"userAssignedIdentities": null
}
...
Concedere all'app per le funzioni l'accesso alla risorsa dell'account di Servizi multimediali
Per questa richiesta:
-
assignee
è l'oggettoprincipalId
che si trova nella risposta JSON daaz functionapp create
-
scope
è l'oggettoid
che si trova nella risposta JSON daaz ams account create
. Vedere la risposta JSON di esempio precedente.
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>"
Pubblicare la funzione
func azure functionapp publish MediaServicesLiveMonitorApp
Convalida
In un browser passare all'URL della funzione, ad esempio:
https://mediaserviceslivemonitorapp.azurewebsites.net/api/onair?name=live1
Verrà restituito un errore 404 (Not Found) perché l'evento live non esiste ancora.
Creare un evento live
az ams live-event create --resource-group test3 --account-name mediatest3 --name live1 --streaming-protocol RTMP
In un browser passare all'URL della funzione, ad esempio:
https://mediaserviceslivemonitorapp.azurewebsites.net/api/onair?name=live1
Questo dovrebbe ora mostrare "Off Air".
Avviare l'evento live
Se si avvia l'evento live, la funzione deve restituire "On Air".
az ams live-event start live1
Questa funzione consente l'accesso a chiunque. La protezione dell'accesso alla funzione di Azure e il collegamento di una luce "On Air" non sono di ambito per questo documento.
Pulire le risorse
Se non si prevede di usare le risorse create, eliminare il gruppo di risorse.
Eliminare un gruppo di risorse con l'interfaccia della riga di comando
az group delete --name <your-resource-group-name>
Guida e supporto tecnico
È possibile contattare Servizi multimediali con domande o seguire gli aggiornamenti in base a uno dei metodi seguenti:
- DOMANDE E RISPOSTE
-
Stack Overflow. Contrassegna le domande con
azure-media-services
. - @MSFTAzureMedia o usare @AzureSupport per richiedere supporto.
- Aprire un ticket di supporto tramite il portale di Azure.