Tutorial: Concesión de acceso a una aplicación de funciones de Azure a una cuenta de Media Services
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.
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 elprincipalId
que se encuentra en la respuesta JSON deaz functionapp create
. -
scope
es elid
que se encuentra en la respuesta JSON deaz 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:
- PREGUNTAS Y RESPUESTAS
-
Stack Overflow. Etiquete preguntas con
azure-media-services
. - @MSFTAzureMedia o use @AzureSupport para solicitar soporte técnico.
- Abra una incidencia de soporte técnico a través del Azure Portal.