Tutorial: conceder a um aplicativo de funções do Azure acesso a uma conta dos Serviços de Mídia
Aviso
Os Serviços de Mídia do Azure serão desativados em 30 de junho de 2024. Para obter mais informações, consulte o Guia de desativação do AMS.
Suponha que você queira permitir que os visitantes do seu site ou aplicativo saibam que você está "No Ar" em seu estúdio de difusão. Você pode determinar quando os Eventos ao Vivo dos Serviços de Mídia estão em execução usando a API dos Serviços de Mídia, mas isso pode ser difícil de chamar de um dispositivo inserido. Em vez disso, você pode expor uma API HTTP para o seu dispositivo inserido usando o Azure Functions. Então, o Azure Functions pode chamar os Serviços de Mídia para obter o estado do Evento ao Vivo.
Este tutorial usa a API de Serviços de Mídia de 1º de maio de 2020.
Entrar no Azure
Para usar qualquer um dos comandos neste artigo, primeiro você precisa entrar na assinatura que deseja usar.
Entre no Azure. Ao usar esse comando, você será solicitado a fornecer a assinatura que deseja usar.
az login
Configurar assinatura
Use este comando para definir a assinatura com a qual deseja trabalhar.
Definir a assinatura do Azure com a CLI
No comando a seguir, forneça a ID de assinatura do Azure que você deseja usar para a conta de Serviços de Mídia.
az account set --subscription <subscriptionName>
Pré-requisitos
Importante
Você é fortemente incentivado a trabalhar com Criar uma função em C# no Azure no início rápido da linha de comando antes de tentar este tutorial. Isso porque as etapas de configuração incluídas lá são as mesmas etapas necessárias aqui. Isso também lhe dará a chance de trabalhar com um exemplo simples no qual este tutorial se baseia.
Nomes de recurso
Antes de começar, decida os nomes dos recursos que você criará. Eles devem ser facilmente identificáveis como um conjunto, especialmente se você não planeja usá-los depois dos testes. As regras de nomenclatura são diferentes para diversos tipos de recursos, portanto, é melhor usar apenas letras minúsculas. Por exemplo, "mediatest1rg" para o nome do grupo de recursos e "mediatest1stor" para o nome da conta de armazenamento. Use os mesmos nomes para cada etapa neste artigo.
Esses nomes serão mencionados nos comandos abaixo. Os nomes dos recursos necessários são:
- myRG
- myStorageAccount
- myAmsAccount
- local
- myFunction: use "OnAir"
- myLiveEvent: use "live1"
- ipaddresses use: "0.0.0./32"
Observação
Os hifens acima são usados apenas para separar as palavras de diretrizes. Para evitar a inconsistência na nomenclatura de recursos dos serviços do Azure, não use hifens ao dar nome aos seus recursos.
Qualquer coisa representada por 00000000-0000-0000-0000000000 é o identificador exclusivo do recurso. Esse valor geralmente é retornado por uma resposta JSON. Copie e cole as respostas JSON no Bloco de Notas ou em outro editor de texto, pois essas respostas conterão valores necessários para comandos posteriores da CLI.
Além disso, você não cria o nome da região. O nome da região é determinado pelo Azure.
Listar regiões do Azure
Se você não souber o nome da região a ser usada, use este comando para ver a listagem:
Use este comando para listar as regiões disponíveis para sua conta.
az account list-locations --query "[].{DisplayName:displayName, Name:name}" -o table
Sequência
Cada uma das etapas a seguir é feita em uma determinada ordem, porque um ou mais valores das respostas JSON são usados na próxima etapa da sequência.
Criar uma conta de Armazenamento
A conta dos Serviços de Mídia que você criará deverá ter uma conta de armazenamento associada a ela. Crie a conta de armazenamento da conta dos Serviços de Mídia primeiro. Você usará your-storage-account-name
para as etapas subsequentes.
Criar uma conta de Armazenamento do Azure com a CLI
Use os comandos a seguir para criar uma conta de armazenamento do Azure.
Para criar uma conta de armazenamento, você deve primeiro criar um grupo de recursos dentro de um local.
Para listar os locais disponíveis, use o seguinte comando:
Listar locais disponíveis com a CLI
Para listar os locais disponíveis, use o seguinte comando:
az account list-locations
Criar um grupo de recursos com a CLI
Para criar um grupo de recursos, use o seguinte comando:
az group create -n <resourceGroupName> --location chooseLocation
Escolher um SKU
Você também precisa escolher uma SKU para sua conta de armazenamento. Você pode listar as contas de armazenamento.
Escolha uma SKU na lista a seguir: Standard_LRS, Standard_GRS, Standard_RAGRS, Standard_ZRS, Premium_LRS, Premium_ZRS, Standard_GZRS, Standard_RAGZRS.
- Altere
myStorageAccount
para um nome exclusivo com um comprimento menor do que 24 caracteres. - Altere
chooseLocation
para a região na qual você quer trabalhar. - Altere
chooseSKU
para sua SKU preferencial.
az storage account create -n <myStorageAccount> -g <resourceGroup> --location <chooseLocation> --sku <chooseSKU>
Criar uma conta de Serviços de Mídia
Agora crie a conta dos Serviços de Mídia. Procure por `
Para obter mais informações sobre esse comando, consulte a Referência da CLI de Serviços de Mídia.
Configurar a Função do Azure
Nesta seção, você vai configurar a sua Função do Azure.
Obter o código
Use o Azure Functions para criar seu projeto de função e recuperar o código do modelo HTTP.
func init MediaServicesLiveMonitor –dotnet
Alterar o diretório
Altere o diretório de trabalho para o diretório do projeto. Caso contrário, você obterá erros.
cd .\MediaServicesLiveMonitor\
Nomear sua função
func new --name OnAir --template "HTTP trigger" --authlevel "anonymous"
Configurar o projeto de funções
Instalar Serviços de Mídia e outras extensões
Execute o comando dotnet add package na janela Terminal para instalar os pacotes de extensão necessários para o projeto. O comando a seguir vai instalar os Serviços de Mídia e os pacotes de Identidade do Azure.
dotnet add package Microsoft.Azure.Management.Media
dotnet add package Azure.Identity
Editar o código do OnAir.cs
Altere o arquivo OnAir.cs
. Altere as variáveis subscriptionId
, resourceGroup
e mediaServicesAccountName
para aquelas que você decidiu 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");
}
}
}
Criar o Aplicativo de Funções
Crie o Aplicativo de Funções para hospedar da função. O nome é o mesmo que você baixou anteriormente: 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]"
Procure por principalId
na resposta JSON:
{
...
"identity": {
//Note the principalId value for the following step
"principalId": "00000000-0000-0000-000000000000",
"tenantId": "00000000-0000-0000-000000000000",
"type": "SystemAssigned",
"userAssignedIdentities": null
}
...
Conceder ao aplicativo de funções acesso ao recurso da conta dos Serviços de Mídia
Para esta solicitação:
-
assignee
é aprincipalId
que está na resposta JSON deaz functionapp create
-
scope
é aid
que está na resposta JSON deaz ams account create
. Confira o exemplo de resposta JSON acima.
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>"
Publicar a função
func azure functionapp publish MediaServicesLiveMonitorApp
Validação
Em um navegador, acesse a URL da função, por exemplo:
https://mediaserviceslivemonitorapp.azurewebsites.net/api/onair?name=live1
Isso deve retornar um erro 404 (Não Encontrado), já que o Evento Ao Vivo ainda não existe.
Criar um Evento Ao Vivo
az ams live-event create --resource-group test3 --account-name mediatest3 --name live1 --streaming-protocol RTMP
Em um navegador, acesse a URL da função, por exemplo:
https://mediaserviceslivemonitorapp.azurewebsites.net/api/onair?name=live1
Agora, deve mostrar "Fora do Ar".
Iniciar o evento ao vivo
Se você iniciar o Evento ao Vivo, a função deverá retornar "No Ar".
az ams live-event start live1
Essa função permite acesso a qualquer pessoa. Garantir o acesso à Função do Azure e manter a conexão de uma luz "No Ar" são ações fora do escopo deste documento.
Limpar recursos
Se você não pretende usar os recursos que criou, exclua o grupo de recursos.
Exclua um grupo de recursos com a CLI
az group delete --name <your-resource-group-name>
Obter ajuda e suporte
Você pode entrar em contato com os Serviços de Mídia com perguntas ou seguir nossas atualizações por um dos seguintes métodos:
- P & R
-
Stack Overflow. Marque perguntas com
azure-media-services
. - @MSFTAzureMedia ou use @AzureSupport para solicitar suporte.
- Abra um tíquete de suporte por meio do portal do Azure.