Tutorial: Gewähren von Zugriff auf ein Media Services-Konto für eine Azure-Funktions-App

Media Services-Logo v3


Warnung

Azure Media Services wird am 30. Juni 2024 eingestellt. Weitere Informationen finden Sie im Leitfaden zur Einstellung von AMS.

Angenommen, Sie möchten Besucher Ihrer Website oder Anwendung darauf hinweisen, dass Sie in Ihrem Sendestudio auf Sendung (On Air) sind. Mithilfe der Media Services-API können Sie zwar ermitteln, wann Media Services-Liveereignisse ausgeführt werden, der dazu nötige Aufruf kann über eingebettete Geräte jedoch schwierig sein. Alternativ können Sie mithilfe von Azure Functions eine HTTP-API für Ihr eingebettetes Gerät verfügbar machen. Daraufhin kann Media Services von Azure Functions aufgerufen werden, um den Status des Liveereignisses abzurufen.

Gewähren des Zugriffs auf ein Media Services-Konto für eine Funktions-App mithilfe verwalteter Identitäten

In diesem Tutorial wird die Media Services-API 2020-05-01 verwendet.

Anmelden bei Azure

Um die Befehle in diesem Artikel verwenden zu können, müssen Sie bei dem Abonnement angemeldet sein, das Sie verwenden möchten.

Melden Sie sich bei Azure an. Wenn Sie diesen Befehl verwenden, werden Sie zur Eingabe des Abonnements aufgefordert, das Sie verwenden möchten.

az login

Festlegen des Abonnements

Verwenden Sie den folgenden Befehl, um das Abonnement festzulegen, mit dem Sie arbeiten möchten.

Festlegen des Azure-Abonnements mit der CLI

Geben Sie im folgenden Befehle die ID des Azure-Abonnements an, das Sie für das Media Services-Konto verwenden möchten.

az account set --subscription <subscriptionName>

Voraussetzungen

Wichtig

Es empfiehlt sich sehr, vor diesem Tutorial zunächst die Schnellstartanleitung zum Erstellen einer C#-Funktion über die Befehlszeile in Azure durchzuarbeiten. Die dort angegebenen Einrichtungsschritte sind nämlich die gleichen, die auch hier erforderlich sind. Außerdem können Sie so mit einem einfachen Beispiel arbeiten, auf dem dieses Tutorial basiert.

Ressourcennamen

Überlegen Sie sich zunächst, wie die von Ihnen erstellten Ressourcen heißen sollen. Sie sollten problemlos als Gruppe identifizierbar sein – insbesondere, wenn Sie nicht vorhaben, sie nach dem Testen weiter zu verwenden. Da sich Benennungsregeln für viele Ressourcentypen unterscheiden, empfiehlt es sich, nur Kleinbuchstaben zu verwenden. Beispiel: „mediatest1rg“ für den Namen Ihrer Ressourcengruppe und „mediatest1stor“ für den Namen Ihres Speicherkontos. Verwenden Sie für jeden Schritt in diesem Artikel die gleichen Namen.

Auf diese Namen wird in den Befehlen weiter unten verwiesen. Sie benötigen Namen für folgende Ressourcen:

  • myRG
  • myStorageAccount
  • myAmsAccount
  • location
  • myFunction: Verwenden Sie „OnAir“.
  • myLiveEvent: Verwenden Sie „live1“.
  • ipaddresses: Verwenden Sie „0.0.0./32“.

Hinweis

Die Bindestriche dienen lediglich zur besseren Lesbarkeit. Verwenden Sie aufgrund der Inkonsistenz bei der Benennung von Ressourcen in Azure-Diensten keine Bindestriche in Ihren Ressourcennamen.

Bei allem, was durch „00000000-0000-0000-0000000000“ dargestellt wird, handelt es sich um den eindeutigen Bezeichner der Ressource. Dieser Wert wird in der Regel von einer JSON-Antwort zurückgegeben. Die Werte der JSON-Antworten benötigen Sie für spätere CLI-Befehle. Sie sollten die Antworten daher kopieren und in Editor oder einen anderen Texteditor einfügen, um sie für später zu speichern.

Der Regionsname wird außerdem nicht von Ihnen erstellt, sondern von Azure bestimmt.

Auflisten der Azure-Regionen

Falls Sie nicht genau wissen, welchen Regionsnamen Sie verwenden sollen, können Sie mithilfe des folgenden Befehls eine Liste abrufen:

Verwenden Sie diesen Befehl, um die für Ihr Konto verfügbaren Regionen aufzulisten.

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

Sequenz

Die folgenden Schritte werden in einer bestimmten Reihenfolge ausgeführt, da jeweils einzelne oder mehrere Werte aus den JSON-Antworten im nächsten Schritt der Sequenz verwendet werden.

Erstellen eines Speicherkontos

Dem von Ihnen erstellten Media Services-Konto muss ein Speicherkonto zugeordnet sein. Erstellen Sie zuerst das Speicherkonto für das Media Services-Konto. In nachfolgenden Schritten wird your-storage-account-name verwendet.

Erstellen eines Azure Storage-Kontos mit der CLI

Erstellen Sie mit den folgenden Befehlen ein Azure-Speicherkonto.

Um ein Speicherkonto zu erstellen, müssen Sie zuerst eine Ressourcengruppe an einem Standort erstellen.

Zur Auflistung der verfügbaren Standorte verwenden Sie den folgenden Befehl:

Auflisten verfügbarer Standorte mit der CLI

Zur Auflistung der verfügbaren Standorte verwenden Sie den folgenden Befehl:

az account list-locations

Erstellen einer Ressourcengruppe mit der CLI

Führen Sie den folgenden Befehl aus, um eine Ressourcengruppe zu erstellen:

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

Auswählen einer SKU

Sie müssen auch eine SKU für Ihr Speicherkonto auswählen. Sie können Speicherkonten auflisten.

Wählen Sie eine SKU aus der folgenden Liste aus: Standard_LRS, Standard_GRS, Standard_RAGRS, Standard_ZRS, Premium_LRS, Premium_ZRS, Standard_GZRS, Standard_RAGZRS.

  • Ändern Sie myStorageAccount in einen eindeutigen Namen mit einer Länge von weniger als 24 Zeichen.
  • Ändern Sie chooseLocation in die Region, in der Sie arbeiten möchten.
  • Ändern Sie chooseSKU in Ihre bevorzugte SKU.
az storage account create -n <myStorageAccount> -g <resourceGroup>  --location <chooseLocation> --sku <chooseSKU>

Erstellen eines Media Services-Kontos

Erstellen Sie nun das Media Services-Konto: Suchen Sie nach „`“.

Weitere Informationen zu diesem Befehl finden Sie in der CLI-Referenz für Media Services.

Einrichten der Azure-Funktion

In diesem Abschnitt wird die Azure-Funktion eingerichtet.

Abrufen des Codes

Verwenden Sie Azure Functions, um Ihr Funktionsprojekt zu erstellen und den Code aus der HTTP-Vorlage abzurufen.

func init MediaServicesLiveMonitor –dotnet

Wechseln des Verzeichnisses

Achten Sie darauf, dass Ihr Arbeitsverzeichnis dem Projektverzeichnis entspricht. Andernfalls treten Fehler auf.

cd .\MediaServicesLiveMonitor\

Benennen Ihrer Funktion

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

Konfigurieren des Functions-Projekts

Installieren von Media Services und anderen Erweiterungen

Führen Sie den Befehl dotnet add package im Terminalfenster aus, um die Erweiterungspakete zu installieren, die Sie in Ihrem Projekt benötigen. Mit dem folgenden Befehl werden die Pakete Media Services und Azure Identity installiert.

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

Bearbeiten des Codes in der Datei „OnAir.cs“

Ändern Sie die Datei OnAir.cs. Ändern Sie die Variablen subscriptionId, resourceGroup und mediaServicesAccountName in die Werte, für die Sie sich zuvor entschieden haben.

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");
        }
    }
}

Erstellen der Funktions-App

Erstellen Sie die Funktions-App, die als Host für die Funktion fungiert. Der Name entspricht dem des vorherigen Downloads (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]"

Suchen Sie in der JSON-Antwort nach principalId:

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

Gewähren von Zugriff auf die Media Services-Kontoressource für die Funktions-App

Für diese Anforderung gilt Folgendes:

  • assignee ist die Prinzipal-ID (principalId) aus der JSON-Antwort von az functionapp create.
  • scope ist die ID (id) aus der JSON-Antwort von az ams account create. Sehen Sie sich zur Referenz die obige JSON-Beispielantwort an.
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>"

Veröffentlichen der Funktion

func azure functionapp publish MediaServicesLiveMonitorApp

Überprüfung

Navigieren Sie in einem Browser zur Funktions-URL. Beispiel:

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

Daraufhin sollte ein Fehler vom Typ 404 (Nicht gefunden) zurückgeben werden, da das Liveereignis noch nicht vorhanden ist.

Erstellen eines Liveereignisses

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

Navigieren Sie in einem Browser zur Funktions-URL. Beispiel:

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

Daraufhin sollte „Off Air“ (Nicht auf Sendung) angezeigt werden.

Starten des Liveereignisses

Wenn Sie das Liveereignis starten, sollte von der Funktion „On Air“ (Auf Sendung) zurückgegeben werden.

az ams live-event start live1

Diese Funktion ermöglicht Zugriff für alle. Der Schutz des Zugriffs auf die Azure-Funktion und die Einrichtung eines On Air-Hinweises werden in diesem Dokument nicht behandelt.

Bereinigen von Ressourcen

Wenn Sie die von Ihnen erstellten Ressourcen nicht mehr benötigen, löschen Sie die Ressourcengruppe.

Löschen einer Ressourcengruppe mit der Befehlszeilenschnittstelle

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

Anfordern von Hilfe und Support

Sie können Media Services mit Fragen kontaktieren oder unsere Updates mit einer der folgenden Methoden verfolgen: