Compartilhar via


Tutorial: conceder a um aplicativo de funções do Azure acesso a uma conta dos Serviços de Mídia

Logotipo dos Serviços de Mídia v3


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.

Identidades gerenciadas que dão a um Aplicativo de Funções acesso a uma conta dos Serviços de Mídia

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 é a principalId que está na resposta JSON de az functionapp create
  • scope é a id que está na resposta JSON de az 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: