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#:
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(); } } }
También está disponible el método asíncrono para esta acción, ScaleAsync, el cual podríamos usar de la siguiente manera:
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(); } } }
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!