Share via


Esercitazione: Concedere a un'app per le funzioni di Azure l'accesso a un account di Servizi multimediali

Logo di Servizi multimediali v3


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.

Identità gestite che danno a un'app per le funzioni l'accesso a un account di Servizi multimediali

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 subscriptionIdle variabili , resourceGroupe 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'oggetto principalId che si trova nella risposta JSON da az functionapp create
  • scope è l'oggetto id che si trova nella risposta JSON da az 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: