Share via


Tutorial: Concesión de acceso a una aplicación de funciones de Azure a una cuenta de Media Services

Logotipo de Media Services v3


Advertencia

Azure Media Services se retirará el 30 de junio de 2024. Para obtener más información, consulte la Guía de retirada de AMS.

Supongamos que quiere que los visitantes de su sitio web o aplicación sepan que están "en el aire" en el estudio de difusión. Puede determinar cuándo se ejecutan los eventos en directo de Media Services mediante la API de Media Services, pero puede ser difícil de llamar desde un dispositivo insertado. En su lugar, podría exponer una API HTTP para el dispositivo insertado mediante Azure Functions. Azure Functions podría llamar a Media Services para obtener el estado del evento en directo.

Identidades administradas que dan acceso a una aplicación de funciones a una cuenta de Media Services

En este tutorial se utiliza la API de Media Services 2020-05-01.

Inicio de sesión en Azure

Para usar cualquiera de los comandos de este artículo, primero debe haber iniciado sesión en la suscripción que quiere usar.

Inicie sesión en Azure. Cuando use este comando, se le pedirá la suscripción que desea usar.

az login

Definir la suscripción

Utilice este comando para establecer la suscripción con la que quiere trabajar.

Establecimiento de la suscripción de Azure con la CLI

En el siguiente comando, proporcione el identificador de suscripción de Azure que quiere usar para la cuenta de Media Services.

az account set --subscription <subscriptionName>

Prerrequisitos

Importante

Se recomienda trabajar con el inicio rápido de creación de una función de C# en Azure desde la línea de comandos antes de intentar este tutorial. Esto se debe a que los pasos de configuración incluidos son los mismos que se necesitan aquí. También le dará la oportunidad de trabajar con un ejemplo sencillo en el que se basa este tutorial.

Nombres de recurso

Antes de empezar, decida los nombres de los recursos que va a crear. Deben identificarse fácilmente como un conjunto, especialmente si no planea usarlos una vez que haya terminado las pruebas. Las reglas de nomenclatura son diferentes para muchos tipos de recursos, por lo que es mejor mantener las minúsculas. Por ejemplo, "mediatest1rg" como nombre del grupo de recursos y "mediatest1stor" como nombre de la cuenta de almacenamiento. Use los mismos nombres en cada paso de este artículo.

Verá que se hace referencia a ellos en los comandos siguientes. Los nombres de los recursos que necesitará son:

  • myRG
  • myStorageAccount
  • myAmsAccount
  • ubicación
  • myFunction: use "OnAir"
  • myLiveEvent: use "live1"
  • ipaddresses use: "0.0.0./32"

Nota

Los guiones anteriores solo se usan para separar las palabras de guía. Debido a la incoherencia de asignar nombres a los recursos en los servicios de Azure, no use guiones al asignar un nombre a los recursos.

Todo lo representado por 00000000-0000-0000-0000000000 es el identificador único del recurso. Normalmente, una respuesta JSON devuelve este valor. También debes copiar y pegar las respuestas JSON en el Bloc de notas u otro editor de texto, ya que esas respuestas contendrán valores que necesitarás para los comandos de la CLI posteriores.

Además, no cree el nombre de la región. Azure es quien lo determina.

Enumeración de regiones de Azure

Si no está seguro del nombre real de la región que se va a usar, utilice este comando para obtener una lista:

Use este comando para enumerar las regiones disponibles para la cuenta.

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

Secuencia

Cada uno de los pasos siguientes se realiza en un orden determinado porque uno o varios valores de las respuestas JSON se usan en el paso siguiente de la secuencia.

Creación de una cuenta de Storage

La cuenta de Media Services que va a crear debe tener una cuenta de almacenamiento asociada. Cree primero la cuenta de almacenamiento para la cuenta de Media Services. Usará your-storage-account-name en los pasos posteriores.

Creación de una cuenta de Azure Storage con la CLI

Use los siguientes comandos para crear una cuenta de Azure Storage.

Para crear una cuenta de almacenamiento, primero debe crear un grupo de recursos dentro de una ubicación.

Para enumerar las ubicaciones disponibles, use el siguiente comando:

Enumeración de ubicaciones disponibles con la CLI

Para enumerar las ubicaciones disponibles, use el siguiente comando:

az account list-locations

Creación de un grupo de recursos con la CLI

Para crear un grupo de recursos, ejecute el comando siguiente:

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

Elección de una SKU

También debe elegir una SKU para la cuenta de almacenamiento. Puede enumerar cuentas de almacenamiento.

Elija una SKU de la lista siguiente: Standard_LRS, Standard_GRS, Standard_RAGRS, Standard_ZRS, Premium_LRS, Premium_ZRS, Standard_GZRS, Standard_RAGZRS.

  • Cambie myStorageAccount por un nombre único con una longitud inferior a 24 caracteres.
  • Cambie chooseLocation a la región desde la que desea trabajar.
  • Cambie chooseSKU a la SKU que prefiera.
az storage account create -n <myStorageAccount> -g <resourceGroup>  --location <chooseLocation> --sku <chooseSKU>

Creación de una cuenta de Media Services

Ahora, cree la cuenta de Media Services. Busque lo siguiente.

Para más información sobre este comando, consulte la referencia de la CLI de Media Services.

Configuración de Azure Functions

En esta sección, configurará la función de Azure.

Obtención del código

Use Azure Functions para crear el proyecto de función y recuperar el código de la plantilla HTTP.

func init MediaServicesLiveMonitor –dotnet

Cambio de directorio

Asegúrese de cambiar el directorio de trabajo por el directorio del proyecto. De lo contrario, se obtienen errores.

cd .\MediaServicesLiveMonitor\

Asignar un nombre a la función

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

Configuración del proyecto de funciones

Instalación de Media Services y otras extensiones

Ejecute el comando dotnet add package en la ventana del terminal para instalar los paquetes de extensión que necesita en el proyecto. El comando siguiente instala los paquetes de Media Services y Azure Identity.

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

Edición del código de OnAir.cs

Cambie el archivo OnAir.cs. Cambie las variables subscriptionId, resourceGroup y mediaServicesAccountName por las que ha decidido anteriormente.

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

Creación de la aplicación de funciones

Cree la aplicación de funciones para hospedar la función. El nombre es el mismo que el que ha descargado antes, 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]"

Busque principalId en la respuesta JSON:

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

Concesión de acceso a la aplicación de funciones al recurso de la cuenta de servidor de Media Services

Para esta solicitud:

  • assignee es el principalId que se encuentra en la respuesta JSON de az functionapp create.
  • scope es el id que se encuentra en la respuesta JSON de az ams account create. Consulte el ejemplo de respuesta JSON anterior.
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>"

Publicación de la función

func azure functionapp publish MediaServicesLiveMonitorApp

Validación

En un explorador, vaya a la dirección URL de la función, por ejemplo:

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

Esto debería devolver un error 404 (No encontrado) ya que el evento en directo aún no existe.

Creación de un evento en directo

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

En un explorador, vaya a la dirección URL de la función, por ejemplo:

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

Ahora debería mostrarse como "Off Air" (Fuera del aire).

Inicio del evento en directo

Si inicia el evento en directo, la función debe devolver "On Air" (En el aire).

az ams live-event start live1

Esta función permite el acceso a cualquier persona. La protección del acceso a la función de Azure y el cableado de una luz "On Air" (En el aire) están fuera del ámbito de este documento.

Limpieza de recursos

Si no tiene previsto usar los recursos que ha creado, elimine el grupo de recursos.

Eliminación de un grupo de recursos con la CLI

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

Obtener ayuda y soporte técnico

Puede ponerse en contacto con Media Services con preguntas o seguir nuestras actualizaciones mediante uno de los métodos siguientes: