Share via


Tutorial: Conceder acesso a uma aplicação de Funções do Azure a uma conta dos Serviços de Multimédia

Logótipo dos Serviços de Multimédia v3


Aviso

Os Serviços de Multimédia do Azure serão descontinuados a 30 de junho de 2024. Para obter mais informações, veja o Guia de Extinção do AMS.

Suponha que pretende que os visitantes do seu site ou aplicação saibam que está "No Ar" no seu estúdio de radiodifusão. Pode determinar quando os Eventos em Direto dos Serviços de Multimédia estão em execução com a API dos Serviços de Multimédia, mas pode ser difícil ligar a partir de um dispositivo incorporado. Em vez disso, pode expor uma API HTTP para o seu dispositivo incorporado com Funções do Azure. Funções do Azure poderia então ligar para os Serviços de Multimédia para obter o estado do Evento em Direto.

Identidades Geridas que dão acesso a uma Aplicação de Funções a uma conta dos Serviços de Multimédia

Este tutorial utiliza a API dos Serviços de Multimédia 2020-05-01.

Iniciar sessão no Azure

Para utilizar qualquer um dos comandos neste artigo, primeiro tem de ter sessão iniciada na subscrição que pretende utilizar.

Inicie sessão no Azure. Quando utilizar este comando, ser-lhe-á pedida a subscrição que pretende utilizar.

az login

Definir subscrição

Utilize este comando para definir a subscrição com a qual pretende trabalhar.

Definir a subscrição do Azure com a CLI

No comando seguinte, forneça o ID da subscrição do Azure que quer utilizar na conta dos Serviços de Multimédia.

az account set --subscription <subscriptionName>

Pré-requisitos

Importante

É fortemente encorajado a trabalhar através da função Criar um C# no Azure a partir do início rápido da linha de comandos antes de tentar este tutorial. Isto deve-se ao facto de os passos de configuração incluídos existirem os mesmos passos necessários aqui. Também lhe dará a oportunidade de trabalhar com um exemplo simples no qual este tutorial se baseia.

Nomes de recursos

Antes de começar, decida os nomes dos recursos que irá criar. Devem ser facilmente identificáveis como um conjunto, especialmente se não estiver a planear utilizá-los depois de terminar os testes. As regras de nomenclatura são diferentes para muitos tipos de recursos, pelo que é melhor manter-se em minúsculas. Por exemplo, "mediatest1rg" para o nome do grupo de recursos e "mediatest1stor" para o nome da conta de armazenamento. Utilize os mesmos nomes para cada passo neste artigo.

Verá estes nomes referenciados nos comandos abaixo. Os nomes dos recursos de que irá precisar são:

  • myRG
  • myStorageAccount
  • myAmsAccount
  • localização
  • myFunction: utilizar "OnAir"
  • myLiveEvent: utilizar "live1"
  • Os ipaddresses utilizam: "0.0.0./32"

Nota

Os hífenes acima só são utilizados para separar palavras de orientação. Devido à inconsistência da nomenclatura dos recursos nos serviços do Azure, não utilize hífenes quando atribuir um nome aos recursos.

Qualquer coisa representada por 000000000-0000-0000-0000000000 é o identificador exclusivo do recurso. Normalmente, este valor é devolvido por uma resposta JSON. Deve copiar e colar as respostas JSON no Bloco de Notas ou noutro editor de texto, uma vez que essas respostas irão conter valores de que irá precisar para os comandos posteriores da CLI.

Além disso, não cria o nome da região. O nome da região é determinado pelo Azure.

Listar regiões do Azure

Se não tiver a certeza do nome real da região a utilizar, utilize este comando para obter uma listagem:

Utilize este comando para listar as regiões disponíveis para a sua conta.

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

Sequence

Cada um dos passos abaixo é efetuado numa determinada ordem porque um ou mais valores das respostas JSON são utilizados no próximo passo da sequência.

Criar uma conta de Armazenamento

A conta dos Serviços de Multimédia que irá criar tem de ter uma conta de armazenamento associada à mesma. Crie primeiro a conta de armazenamento para a conta dos Serviços de Multimédia. Irá utilizar your-storage-account-name para os passos subsequentes.

Criar uma conta de Armazenamento do Azure com a CLI

Utilize os seguintes comandos para criar uma conta de Armazenamento do Azure.

Para criar uma conta de armazenamento, primeiro tem de criar um grupo de recursos numa localização.

Para listar as localizações disponíveis, utilize o seguinte comando:

Listar as localizações disponíveis com a CLI

Para listar as localizações disponíveis, utilize o seguinte comando:

az account list-locations

Criar um grupo de recursos com a CLI

Para criar um grupo de recursos, utilize o comando seguinte:

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

Escolher um SKU

Também tem de escolher um SKU para a sua conta de armazenamento. Pode listar contas de armazenamento.

Escolha um SKU na seguinte lista: Standard_LRS, Standard_GRS, Standard_RAGRS, Standard_ZRS, Premium_LRS, Premium_ZRS, Standard_GZRS Standard_RAGZRS.

  • Mude myStorageAccount para um nome exclusivo com um comprimento inferior a 24 carateres.
  • Mude chooseLocation para a região na qual pretende trabalhar.
  • Mude chooseSKU para o SKU preferencial.
az storage account create -n <myStorageAccount> -g <resourceGroup>  --location <chooseLocation> --sku <chooseSKU>

Criar uma conta dos Media Services

Agora, crie a conta dos Serviços de Multimédia. Procure o '

Para obter mais informações sobre este comando, veja a referência da CLI dos Serviços de Multimédia.

Configurar a Função do Azure

Nesta secção, irá configurar a sua Função do Azure.

Obter o código

Utilize o Funções do Azure para criar o projeto de função e obter o código do modelo HTTP.

func init MediaServicesLiveMonitor –dotnet

Alterar o diretório

Certifique-se de que altera o diretório de trabalho para o diretório do projeto. Caso contrário, obterá erros.

cd .\MediaServicesLiveMonitor\

Dê um nome à sua função

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

Configurar o projeto de funções

Instalar os Serviços de Multimédia e outras extensões

Execute o comando dotnet add package na janela Terminal para instalar os pacotes de extensão de que precisa no projeto. O comando seguinte instala os Serviços de Multimédia e os pacotes de Identidade do Azure.

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

Editar o código de OnAir.cs

Altere o OnAir.cs ficheiro. Altere subscriptionIdas variáveis , resourceGroupe mediaServicesAccountName para as que 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 a Aplicação de Funções

Crie a Aplicação de Funções para alojar a função. O nome é o mesmo que transferiu 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]"

principalId Procure 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 à aplicação de funções acesso ao recurso da conta dos Serviços de Multimédia

Para este pedido:

  • assignee é o principalId que está na resposta JSON de az functionapp create
  • scope é o id que está na resposta JSON de az ams account create. Veja a resposta JSON de exemplo 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

Num browser, aceda ao URL da função, por exemplo:

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

Esta ação deve devolver um erro 404 (Não Encontrado), uma vez que o Evento em Direto ainda não existe.

Criar um Evento em Direto

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

Num browser, aceda ao URL da função, por exemplo:

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

Esta ação deverá agora mostrar "Off Air".

Iniciar o evento em direto

Se iniciar o Evento em Direto, a função deverá devolver "On Air".

az ams live-event start live1

Esta função permite o acesso a qualquer pessoa. Proteger o acesso à Função do Azure e ligar uma luz "Ao Ar" estão fora do âmbito deste documento.

Limpar os recursos

Se não estiver a planear utilizar os recursos que criou, elimine o grupo de recursos.

Eliminar um grupo de recursos com a CLI

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

Obter ajuda e suporte

Pode contactar os Serviços de Multimédia com perguntas ou seguir as nossas atualizações através de um dos seguintes métodos: