Självstudie: Ge en Azure-funktionsapp åtkomst till ett Media Services-konto

Media Services-logotyp v3


Varning

Azure Media Services dras tillbaka den 30 juni 2024. Mer information finns i AMS-pensionsguiden.

Anta att du vill att besökare på din webbplats eller ditt program ska veta att du är "On Air" i sändningsstudion. Du kan avgöra när Media Services Live Events körs med hjälp av Media Services-API:et, men det kan vara svårt att anropa från en inbäddad enhet. I stället kan du exponera ett HTTP-API för din inbäddade enhet med hjälp av Azure Functions. Azure Functions kan sedan anropa Media Services för att hämta tillståndet för livehändelsen.

Hanterade identiteter som ger en funktionsapp åtkomst till ett Media Services-konto

I den här självstudien används Api:et för Media Services 2020-05-01.

Logga in på Azure

Om du vill använda något av kommandona i den här artikeln måste du först vara inloggad på den prenumeration som du vill använda.

Logga in i Azure. När du använder det här kommandot uppmanas du att ange den prenumeration som du vill använda.

az login

Ange prenumeration

Använd det här kommandot för att ange den prenumeration som du vill arbeta med.

Ange Azure-prenumerationen med CLI

Med följande kommando anger du ID för den Azure-prenumeration som du vill använda för Media Services-kontot.

az account set --subscription <subscriptionName>

Förutsättningar

Viktigt

Du uppmanas starkt att gå igenom snabbstarten Skapa en C#-funktion i Azure från kommandoraden innan du provar den här självstudien. Det beror på att de steg som ingår i konfigurationen innehåller samma steg som krävs här. Det ger dig också en chans att arbeta med ett enkelt exempel som den här självstudien baseras på.

Resursnamn

Innan du börjar ska du bestämma namnen på de resurser som du ska skapa. De bör vara lätta att identifiera som en uppsättning, särskilt om du inte planerar att använda dem när du är klar med testningen. Namngivningsreglerna är olika för många resurstyper, så det är bäst att hålla sig till alla gemener. Till exempel "mediatest1rg" för resursgruppens namn och "mediatest1stor" för ditt lagringskontonamn. Använd samma namn för varje steg i den här artikeln.

Dessa namn refereras till i kommandona nedan. Namnen på de resurser som du behöver är:

  • myRG
  • myStorageAccount
  • myAmsAccount
  • location
  • myFunction: använd "OnAir"
  • myLiveEvent: använd "live1"
  • ipaddresses använder: "0.0.0./32"

Anteckning

Bindestrecken ovan används bara för att avgränsa vägledningsord. På grund av inkonsekvensen i namngivning av resurser i Azure-tjänster ska du inte använda bindestreck när du namnger dina resurser.

Allt som representeras av 00000000-0000-0000-0000000000 är resursens unika identifierare. Det här värdet returneras vanligtvis av ett JSON-svar. Du bör kopiera och klistra in JSON-svaren i Anteckningar eller någon annan textredigerare, eftersom dessa svar kommer att innehålla värden som du behöver för senare CLI-kommandon.

Du skapar inte heller regionnamnet. Regionnamnet bestäms av Azure.

Visa en lista över Azure-regioner

Om du inte är säker på vilket regionnamn som ska användas använder du det här kommandot för att hämta en lista:

Använd det här kommandot för att lista de regioner som är tillgängliga för ditt konto.

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

Sequence

Vart och ett av stegen nedan utförs i en viss ordning eftersom ett eller flera värden från JSON-svaren används i nästa steg i sekvensen.

Skapa ett lagringskonto

Media Services-kontot som du skapar måste ha ett associerat lagringskonto. Skapa lagringskontot för Media Services-kontot först. Du kommer att använda your-storage-account-name för efterföljande steg.

Skapa ett Azure Storage-konto med CLI

Använd följande kommandon för att skapa ett Azure Storage-konto.

Om du vill skapa ett lagringskonto måste du först skapa en resursgrupp på en plats.

Om du vill visa en lista över tillgängliga platser använder du följande kommando:

Lista tillgängliga platser med CLI

Om du vill visa en lista över tillgängliga platser använder du följande kommando:

az account list-locations

Skapa en resursgrupp med CLI

Använd följande kommando för att skapa en resursgrupp:

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

Välj en SKU

Du måste också välja en SKU för ditt lagringskonto. Du kan lista lagringskonton.

Välj en SKU i följande lista: Standard_LRS, Standard_GRS, Standard_RAGRS, Standard_ZRS, Premium_LRS, Premium_ZRS, Standard_GZRS Standard_RAGZRS.

  • Ändra myStorageAccount till ett unikt namn med en längd på färre än 24 tecken.
  • Ändra chooseLocation till den region som du vill arbeta i.
  • Ändra chooseSKU till önskad SKU.
az storage account create -n <myStorageAccount> -g <resourceGroup>  --location <chooseLocation> --sku <chooseSKU>

Skapa ett Media Services-konto

Skapa nu Media Services-kontot. Leta efter "

Mer information om det här kommandot finns i Media Services CLI-referensen.

Konfigurera Azure-funktionen

I det här avsnittet konfigurerar du din Azure-funktion.

Hämta koden

Använd Azure Functions för att skapa funktionsprojektet och hämta koden från HTTP-mallen.

func init MediaServicesLiveMonitor –dotnet

Ändra katalog

Se till att du ändrar arbetskatalogen till projektkatalogen. Annars får du fel.

cd .\MediaServicesLiveMonitor\

Namnge din funktion

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

Konfigurera funktionsprojektet

Installera Media Services och andra tillägg

Kör kommandot dotnet add package i terminalfönstret för att installera de tilläggspaket som du behöver i projektet. Följande kommando installerar Media Services- och Azure Identity-paketen.

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

Redigera OnAir.cs-koden

OnAir.cs Ändra filen. Ändra subscriptionIdvariablerna , resourceGroupoch mediaServicesAccountName till de som du bestämde dig för tidigare.

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

Skapa funktionsappen

Skapa funktionsappen som värd för funktionen. Namnet är samma som det som du laddade ned tidigare, 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 Leta efter i JSON-svaret:

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

Ge funktionsappen åtkomst till Media Services-kontoresursen

För den här begäran:

  • assigneeprincipalId är det som finns i JSON-svaret frånaz functionapp create
  • scopeid är det som finns i JSON-svaret från az ams account create. Se JSON-exemplet ovan.
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>"

Publicera funktionen

func azure functionapp publish MediaServicesLiveMonitorApp

Validering

I en webbläsare går du till funktions-URL:en, till exempel:

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

Detta bör returnera ett 404-fel (hittades inte) eftersom livehändelsen inte finns ännu.

Skapa en livehändelse

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

I en webbläsare går du till funktions-URL:en, till exempel:

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

Detta bör nu visa "Off Air".

Starta livehändelsen

Om du startar livehändelsen ska funktionen returnera "On Air".

az ams live-event start live1

Den här funktionen ger åtkomst till vem som helst. Att skydda åtkomsten till Azure-funktionen och ansluta en "On Air"-lampa ligger utanför omfånget för det här dokumentet.

Rensa resurser

Om du inte planerar att använda de resurser som du skapade tar du bort resursgruppen.

Ta bort en resursgrupp med CLI

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

Få hjälp och support

Du kan kontakta Media Services med frågor eller följa våra uppdateringar med någon av följande metoder: