Azure Media Services: Modificar las unidades reservadas para streaming desde .NET

Con el fin de automatizar las unidades reservadas que estamos utilizando para el servicio de streaming, podemos hacer uso del siguiente código en C#:

[csharp]using Microsoft.WindowsAzure.MediaServices.Client;
using System;
using System.Configuration;
using System.Linq;

namespace StreamingReservedUnits
{
class Program
{
static void Main(string[] args)
{
//0.Nuget: Install-Package windowsazure.mediaservices

//1. Credentials
var AccountName = ConfigurationManager.AppSettings["AccountName"];
var AccountKey = ConfigurationManager.AppSettings["AccountKey"];

//2. Get Context
var context = new CloudMediaContext(AccountName, AccountKey);

//3. Create tasks
for (var index = 0; index < context.StreamingEndpoints.Count(); index++)
{
var endpoint = context.StreamingEndpoints.Skip(index).Take(1).FirstOrDefault();

Console.WriteLine("Endpoint {0} has {1} units", endpoint.Name, endpoint.ScaleUnits);

if (endpoint.State != StreamingEndpointState.Scaling)
endpoint.Scale(0);
}

Console.WriteLine("Streaming endpoint units off!");

Console.ReadLine();
}
}
}
[/csharp]

También está disponible el método asíncrono para esta acción, ScaleAsync, el cual podríamos usar de la siguiente manera:

[csharp]using Microsoft.WindowsAzure.MediaServices.Client;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Threading.Tasks;

namespace StreamingReservedUnits
{
class Program
{
static void Main(string[] args)
{
//0.Nuget: Install-Package windowsazure.mediaservices

//1. Credentials and constants
var AccountName = ConfigurationManager.AppSettings["AccountName"];
var AccountKey = ConfigurationManager.AppSettings["AccountKey"];
var ReservedUnits = 0;

//2. Get Context
var context = new CloudMediaContext(AccountName, AccountKey);

var task = new List<Task>();

//3. Create tasks
for (var index = 0; index < context.StreamingEndpoints.Count(); index++)
{
var endpoint = context.StreamingEndpoints.Skip(index).Take(1).FirstOrDefault();

Console.WriteLine("Endpoint {0} has {1} units", endpoint.Name, endpoint.ScaleUnits);

if (endpoint.State != StreamingEndpointState.Scaling)
{
task.Add(endpoint.ScaleAsync(ReservedUnits));
Console.WriteLine("From {0} units to {1}", endpoint.ScaleUnits, ReservedUnits);
}
}

Task.WaitAll(task.ToArray());

Console.WriteLine("All endpoints updated!");

Console.ReadLine();
}
}
}[/csharp]

Si además quisieramos que esta tarea se lanzara cada X tiempo podemos hacer uso de Azure WebJobs para facilitarnos el trabajo.

Gracias a Vito por pasarme la versión vintage del código. Sólo tuve que actualizarla 😉

¡Saludos!

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.