Tutorial: Gewähren von Zugriff auf ein Media Services-Konto für eine Azure-Funktions-App
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.
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 vonaz functionapp create
. -
scope
ist die ID (id
) aus der JSON-Antwort vonaz 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:
- Q & A
-
Stack Overflow. Markieren Sie Fragen mit
azure-media-services
. - @MSFTAzureMedia oder verwenden Sie @AzureSupport , um Support anzufordern.
- Öffnen Sie ein Supportticket über die Azure-Portal.