Kurz: Udělení přístupu k účtu Media Services aplikaci Funkcí Azure

Logo Media Services v3


Upozornění

Služba Azure Media Services bude vyřazena 30. června 2024. Další informace najdete v průvodci vyřazením AMS.

Předpokládejme, že chcete návštěvníkům vašeho webu nebo aplikace dát vědět, že ve svém vysílacím studiu jste "On Air". Pomocí rozhraní API služby Media Services můžete určit, kdy živé události služby Media Services běží, ale může být obtížné volat z vloženého zařízení. Místo toho můžete pomocí Azure Functions zveřejnit rozhraní HTTP API pro vložené zařízení. Azure Functions pak můžete zavolat službu Media Services, aby získala stav živé události.

Spravované identity poskytující aplikaci funkcí přístup k účtu Služby Media Services

V tomto kurzu se používá rozhraní API media services z 2020-05-01.

Přihlášení k Azure

Pokud chcete použít některý z příkazů v tomto článku, musíte být nejprve přihlášeni k předplatnému, které chcete použít.

Přihlaste se k Azure. Při použití tohoto příkazu se zobrazí výzva k zadání předplatného, které chcete použít.

az login

Nastavení předplatného

Tento příkaz slouží k nastavení předplatného, se kterým chcete pracovat.

Nastavení předplatného Azure pomocí rozhraní příkazového řádku

V následujícím příkazu uveďte ID předplatného Azure, které chcete pro účet Media Services použít.

az account set --subscription <subscriptionName>

Požadavky

Důležité

Před pokusem o tento kurz důrazně doporučujeme projít si rychlý start Vytvoření funkce jazyka C# v Azure z příkazového řádku . Je to proto, že kroky nastavení, které zahrnují, jsou zde potřeba stejné kroky. Získáte také možnost pracovat s jednoduchým příkladem, na kterém je tento kurz založen.

Názvy prostředků

Než začnete, rozhodněte se o názvech prostředků, které vytvoříte. Měly by být snadno identifikovatelné jako sada, zejména pokud je neplánujete používat po dokončení testování. Pravidla pojmenování se u mnoha typů prostředků liší, takže je nejlepší držet se všech malých písmen. Například "mediatest1rg" pro název vaší skupiny prostředků a "mediatest1stor" pro název účtu úložiště. Pro každý krok v tomto článku použijte stejné názvy.

Na tyto názvy se odkazuje v následujících příkazech. Názvy prostředků, které budete potřebovat, jsou:

  • myRG
  • myStorageAccount
  • myAmsAccount
  • location
  • myFunction: použijte "OnAir".
  • myLiveEvent: použijte live1.
  • ipaddresses use: "0.0.0./32"

Poznámka

Výše uvedené spojovníky se používají pouze k oddělení vodicích slov. Kvůli nekonzistenci pojmenování prostředků ve službách Azure nepoužívejte při pojmenování prostředků spojovníky.

Cokoli, co představuje 00000000-0000-0000-00000000000 je jedinečný identifikátor prostředku. Tuto hodnotu obvykle vrací odpověď JSON. Odpovědi JSON byste měli zkopírovat a vložit v Poznámkovém bloku nebo jiném textovém editoru, protože tyto odpovědi budou obsahovat hodnoty, které budete potřebovat pro pozdější příkazy rozhraní příkazového řádku.

Také nevytvoříte název oblasti. Název oblasti určuje Azure.

Výpis oblastí Azure

Pokud si nejste jistí skutečným názvem oblasti, který chcete použít, použijte tento příkaz k získání výpisu:

Pomocí tohoto příkazu zobrazíte seznam oblastí dostupných pro váš účet.

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

Sequence

Každý z následujících kroků se provádí v určitém pořadí, protože v dalším kroku v pořadí se použije jedna nebo více hodnot z odpovědí JSON.

Vytvoření účtu úložiště

Účet Media Services, který vytvoříte, musí mít přidružený účet úložiště. Nejprve vytvořte účet úložiště pro účet Media Services. Použijete your-storage-account-name pro další kroky.

Vytvoření účtu služby Azure Storage pomocí rozhraní příkazového řádku

Pomocí následujících příkazů vytvořte účet služby Azure Storage.

Pokud chcete vytvořit účet úložiště, musíte nejprve vytvořit skupinu prostředků v rámci umístění.

Pokud chcete zobrazit seznam dostupných umístění, použijte následující příkaz:

Výpis dostupných umístění pomocí rozhraní příkazového řádku

Pokud chcete zobrazit seznam dostupných umístění, použijte následující příkaz:

az account list-locations

Vytvoření skupiny prostředků pomocí rozhraní příkazového řádku

Skupinu prostředků vytvoříte spuštěním následujícího příkazu:

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

Volba skladové jednotky (SKU)

Musíte také zvolit skladovou položku pro váš účet úložiště. Můžete zobrazit seznam účtů úložiště.

Vyberte skladovou položku z následujícího seznamu: Standard_LRS, Standard_GRS, Standard_RAGRS, Standard_ZRS, Premium_LRS, Premium_ZRS, Standard_GZRS Standard_RAGZRS.

  • Změňte myStorageAccount na jedinečný název o délce kratší než 24 znaků.
  • Přejděte chooseLocation na oblast, ve které chcete pracovat.
  • Přejděte chooseSKU na upřednostňovanou skladovou položku.
az storage account create -n <myStorageAccount> -g <resourceGroup>  --location <chooseLocation> --sku <chooseSKU>

Vytvoření účtu Media Services

Teď vytvořte účet Media Services. Vyhledejte '

Další informace o tomto příkazu najdete v referenčních informacích k rozhraní příkazového řádku služby Media Services.

Nastavení funkce Azure Functions

V této části nastavíte funkci Azure Functions.

Získání kódu

Pomocí Azure Functions vytvořte projekt funkce a načtěte kód ze šablony HTTP.

func init MediaServicesLiveMonitor –dotnet

Změna adresáře

Ujistěte se, že jste změnili pracovní adresář na adresář projektu. V opačném případě se zobrazí chyby.

cd .\MediaServicesLiveMonitor\

Pojmenování funkce

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

Konfigurace projektu functions

Instalace služby Media Services a dalších rozšíření

Spuštěním příkazu dotnet add package v okně Terminálu nainstalujte balíčky rozšíření, které potřebujete v projektu. Následující příkaz nainstaluje balíčky Media Services a Azure Identity.

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

Úprava kódu OnAir.cs

OnAir.cs Změňte soubor. Změňte subscriptionIdproměnné , a mediaServicesAccountName na proměnné, resourceGroupo kterých jste se rozhodli dříve.

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

Vytvoření aplikace funkcí

Vytvořte aplikaci funkcí pro hostování funkce. Název je stejný jako název, který jste stáhli dříve, 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]"

V odpovědi JSON vyhledejte principalId :

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

Udělení přístupu k prostředku účtu Media Services aplikaci funkcí

Pro tuto žádost:

  • assignee je hodnota , principalId která je v odpovědi JSON z az functionapp create
  • scopeje hodnota , id která je v odpovědi JSON z .az ams account create Podívejte se na ukázkovou odpověď JSON výše.
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>"

Publikování funkce

func azure functionapp publish MediaServicesLiveMonitorApp

Ověřování

V prohlížeči přejděte na adresu URL funkce, například:

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

Tato chyba by měla vrátit chybu 404 (Nenalezena), protože živá událost ještě neexistuje.

Vytvoření živé události

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

V prohlížeči přejděte na adresu URL funkce, například:

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

Teď by se mělo zobrazit "Mimo vzduch".

Spuštění živé události

Pokud spustíte živou událost, měla by funkce vrátit "On Air".

az ams live-event start live1

Tato funkce umožňuje přístup komukoli. Zabezpečení přístupu k funkci Azure Functions a zapojení kontrolky "On Air" je v tomto dokumentu mimo rozsah.

Vyčištění prostředků

Pokud vytvořené prostředky neplánujete používat, odstraňte skupinu prostředků.

Odstranění skupiny prostředků pomocí rozhraní příkazového řádku

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

Získání nápovědy a podpory

Službu Media Services můžete kontaktovat s dotazy nebo můžete sledovat naše aktualizace jedním z následujících způsobů: