Tutorial: Conceder acesso a uma aplicação de Funções do Azure a uma conta dos Serviços de Multimédia
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.
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 subscriptionId
as variáveis , resourceGroup
e 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
é oprincipalId
que está na resposta JSON deaz functionapp create
-
scope
é oid
que está na resposta JSON deaz 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:
- Q & A
-
Stack Overflow. Perguntas sobre etiquetas com
azure-media-services
. - @MSFTAzureMedia ou utilize @AzureSupport para pedir suporte.
- Abra um pedido de suporte através do portal do Azure.