Administración de costos con presupuestos
El control de costos es un componente esencial para maximizar el valor de su inversión en la nube. Hay varios escenarios donde la orquestación en función del costo, los informes y la visibilidad del costo resultan fundamentales para la continuidad de las operaciones empresariales. Las API de Cost Management proporcionan un conjunto de API para admitir cada uno de estos escenarios. Las API proporcionan detalles de uso, lo que le permite ver los costos a un nivel de instancia pormenorizado.
Los presupuestos normalmente se usan como parte del control de costos. Se pueden seguir en Azure. Por ejemplo, podría restringir la vista de presupuesto en función de una colección de recursos, grupos de recursos o una suscripción. Además de usar la API de presupuestos para enviar notificaciones por correo electrónico cuando se alcanza un umbral de presupuesto, también puede usar grupos de acciones de Azure Monitor. Los grupos de acciones desencadenan un conjunto coordinado de acciones en respuesta a un evento de presupuesto.
Un escenario de presupuesto típico para un cliente que ejecuta una carga de trabajo no crítica es administrar el gasto con un presupuesto y lograr costos predecibles al revisar la factura mensual. Este escenario requiere cierta organización en función del costo de los recursos que forman parte del entorno de Azure. En este escenario, se establece un presupuesto mensual de 1000 USD para la suscripción. Además, se establecen umbrales de notificación para desencadenar algunas orquestaciones. Este escenario comienza con un umbral del 80 % del costo, que detendrá todas las máquinas virtuales (VM) del grupo de recursos Opcional. A continuación, con el umbral del 100 % del costo, se detendrán todas las instancias de máquina virtual.
Para configurar este escenario, completará las siguientes acciones mediante los pasos proporcionados en cada sección de este tutorial.
Las acciones incluidas en este tutorial le permiten:
- Crear un Runbook de Azure Automation para detener las máquinas virtuales mediante el uso de webhooks.
- Crear una instancia de Azure Logic App para que se desencadene en función del valor de umbral de presupuesto y llame al Runbook con los parámetros correctos.
- Crear un grupo de acciones de Azure Monitor que se configura para desencadenar la instancia de Azure Logic App cuando se alcance el umbral del presupuesto.
- Cree el presupuesto con los umbrales deseados y conéctelo al grupo de acción.
Creación de un Runbook de Azure Automation
Azure Automation es un servicio que permite crear scripts para la mayoría de las tareas de administración de recursos y ejecutar esas tareas de forma programada o a petición. Como parte de este escenario, creará un runbook de Azure Automation que detenga las máquinas virtuales. Para crear este escenario usará el runbook gráfico Stop Azure V2 VMs de la galería de Azure Automation. Al importar este runbook en su cuenta de Azure y publicarlo, podrá detener las máquinas virtuales cuando se alcance un umbral de presupuesto.
Creación de una cuenta de Azure Automation
- Inicie sesión en Azure Portal con sus credenciales de su cuenta de Azure.
- Seleccione el botón Crear un recurso de la esquina superior izquierda de Azure.
- Seleccione Herramientas de administración>Automatización.
Nota
Si no tiene una cuenta de Azure aún, puede crear una cuenta gratuita.
- Escriba la información de la cuenta. En Crear cuenta de ejecución de Azure, elija Sí para habilitar automáticamente la configuración necesaria a fin de simplificar la autenticación en Azure.
- Cuando haya terminado, seleccione Crear para iniciar la implementación de la cuenta de Automation.
Importación del Runbook Stop Azure V2 VMs
Mediante un Runbook de Azure Automation, importe el Runbook gráfico Stop Azure V2 VMs desde la galería.
- Inicie sesión en Azure Portal con sus credenciales de su cuenta de Azure.
- Abra su cuenta de Automation seleccionando Todos los servicios>Cuentas de Automation. Después, seleccione su cuenta de Automation.
- Seleccione Galería de Runbooks desde la sección Automatización de procesos.
- Establezca el Origen de la Galería en Centro de scripts y seleccione Aceptar.
- Busque y seleccione el elemento de la galería Stop Azure V2 Vms dentro de Azure Portal.
- Seleccione Importar para mostrar el área Importar y seleccione Aceptar. Se mostrará la hoja de información general del runbook.
- Una vez que el runbook haya completado el proceso de importación, seleccione Editar para mostrar la opción de publicación y el editor del runbook gráfico.
- Seleccione Publicar para publicar el runbook y Sí cuando se le solicite. Al publicar un Runbook, reemplaza la versión publicada existente con la versión del borrador. En este caso, no tiene una versión publicada porque ha creado el runbook. Para más información sobre cómo publicar un Runbook, consulte Mi primer Runbook gráfico.
Creación de webhooks para el Runbook
Mediante el runbook gráfico Stop Azure V2 VMs, creará dos webhooks para iniciar el runbook en Azure Automation mediante una sola solicitud HTTP. El primer webhook invoca el runbook en un umbral de presupuesto de 80 % con el nombre del grupo de recursos como un parámetro, lo que permite que las máquinas virtuales opcionales se detengan. A continuación, el segundo webhook invoca el runbook sin parámetros (al 100 %), lo que detiene las restantes instancias de máquina virtual.
- En la página Runbooks de Azure Portal, seleccione el runbook StopAzureV2Vm que muestra el área de información general del runbook.
- Haga clic en Webhook en la parte superior de la página para abrir el área Agregar webhook.
- Haga clic en Crear nuevo Webhook para abrir la hoja Crear un nuevo Webhook.
- Establezca el nombre del webhook en Opcional. El valor de la propiedad Habilitada debe ser Sí. No es necesario cambiar el valor de Expira. Para más información sobre las propiedades del webhook, consulte Propiedades de un webhook.
- Junto al valor de la dirección URL, seleccione el icono de copiar para copiar la dirección URL del webhook.
Importante
Guarde la dirección URL del webhook denominado Opcional en un lugar seguro. La usará más adelante en este tutorial. Po motivos de seguridad, una vez creado el webhook, no se puede ver ni recuperar de nuevo la dirección URL.
- Seleccione Aceptar para crear el nuevo webhook.
- Seleccione Configurar parámetros y ejecutar configuraciones para ver los valores de los parámetros para el runbook.
Nota
Si el runbook tiene parámetros obligatorios, no puede crear el webhook, salvo que se especifiquen los valores.
- Seleccione Aceptar para aceptar los valores de los parámetros del webhook.
- Seleccione Crear para crear el webhook.
- A continuación, siga los pasos anteriores para crear un segundo webhook denominado Complete.
Importante
No olvide guardar ambas direcciones URL de webhook para usarlas más adelante en este tutorial. Po motivos de seguridad, una vez creado el webhook, no se puede ver ni recuperar de nuevo la dirección URL.
Ahora debería tener dos webhooks configurados que están disponibles con las direcciones URL que ha guardado.
Ha completado la configuración de Azure Automation. Puede probar los webhooks con una prueba de API sencilla para validar que el webhook funciona. Algunas formas populares de consultar la API son:
- Visual Studio
- Insomnia
- Bruno
- Invoke-RestMethod de PowerShell
- Curl
A continuación, debe crear la aplicación lógica para la orquestación.
Crear una aplicación Azure Logic App para la orquestación
Logic Apps ayuda a crear, programar y automatizar procesos como flujos de trabajo, permitiéndole integrar aplicaciones, datos, sistemas y servicios en empresas u organizaciones. En este escenario, la aplicación lógica que crea hace bastante más que llamar al webhook de automatización que creó.
Los presupuestos se pueden configurar para desencadenar una notificación cuando se alcanza un umbral especificado. Puede proporcionar varios umbrales en los que recibir una notificación y la aplicación lógica demostrará la capacidad de realizar distintas acciones según el umbral superado. En este ejemplo, configurará un escenario en el que obtendrá un par de notificaciones. La primera notificación se activará cuando se alcance el 80 % del presupuesto. La segunda notificación, cuando se alcance el 100 % del presupuesto. La aplicación lógica se usará para apagar todas las máquinas virtuales en el grupo de recursos. En primer lugar, se alcanza el 80 % del umbral Opcional. Luego, se alcanza el segundo umbral cuando todas las máquinas virtuales en la suscripción se cierren.
Las aplicaciones lógicas le permiten proporcionar un esquema de ejemplo para el desencadenador HTTP, pero requieren que se defina el encabezado Content-Type. Dado que el grupo de acciones no tiene encabezados personalizados para el webhook, debe analizar la carga en un paso independiente. Usará la acción Analizar y le proporcionará una carga de ejemplo.
Creación de la aplicación lógica
La aplicación lógica realiza varias acciones. En la lista siguiente se proporciona un conjunto de acciones que la aplicación lógica llevará a cabo:
- Reconoce cuándo se recibe una solicitud HTTP
- Se analizan los datos JSON pasados para determinar el valor de umbral que se ha alcanzado
- Use una instrucción condicional para comprobar si la cantidad del umbral alcanzó el 80 % o más del intervalo de presupuesto, pero no un valor mayor o igual que el 100 %.
- Si se ha alcanzado la cantidad de este umbral, envíe una solicitud HTTP POST con el webhook denominado Opcional. Esta acción apagará las máquinas virtuales en el grupo "Opcional".
- Use una instrucción condicional para comprobar si la cantidad de umbral ha alcanzado o superado el 100 % del valor de presupuesto.
- Si se ha alcanzado la cantidad de este umbral, envíe una solicitud HTTP POST con el webhook denominado Completo. Esta acción apaga todas las máquinas virtuales restantes.
Los pasos siguientes son necesarios para crear la aplicación lógica que llevará a cabo los pasos anteriores:
- En Azure Portal, seleccione Crear un recurso>Integración>Logic App.
- En el área Crear aplicación lógica, proporcione los detalles que necesita para crear la aplicación lógica, seleccione Anclar al panel y seleccione Crear.
Una vez que Azure ha implementado la aplicación lógica, el Diseñador de aplicaciones lógicas se abre y muestra un área con un vídeo de introducción y desencadenadores utilizados frecuentemente.
Incorporación de un desencadenador
Cada aplicación lógica debe comenzar con un desencadenador, que se activa cuando sucede un evento específico o cuando se cumple una condición determinada. Cada vez que el desencadenador se activa, el motor de Logic Apps crea una instancia de aplicación lógica que inicia y ejecuta el flujo de trabajo. Las acciones son todos los pasos que se producen después del desencadenador.
- En Plantillas del área Diseñador de aplicaciones lógicas, elija Aplicación lógica en blanco.
- Agregue un desencadenador; para ello, escriba "solicitud http" en el cuadro de búsqueda del Diseñador de aplicaciones lógicas para buscar y seleccionar el desencadenador denominado Solicitud: cuando se recibe una solicitud HTTP.
- Seleccione Nuevo paso>Agregar una acción.
- Busque "análisis del archivo JSON" en el cuadro de búsqueda del Diseñador de aplicaciones lógicas para buscar y seleccionar la acción Operaciones de datos: análisis del archivo JSON.
- Escriba "Payload" (carga) como el nombre de contenido para la carga de análisis del archivo JSON o use la etiqueta "Body" (cuerpo) del contenido dinámico.
- Seleccione la opción Use sample payload to generate schema (Usar una carga de ejemplo para generar el esquema) en el cuadro Análisis del archivo JSON.
- Pegue la siguiente carga de ejemplo de archivo JSON en el cuadro de texto:
{"schemaId":"AIP Budget Notification","data":{"SubscriptionName":"CCM - Microsoft Azure Enterprise - 1","SubscriptionId":"<GUID>","SpendingAmount":"100","BudgetStartDate":"6/1/2018","Budget":"50","Unit":"USD","BudgetCreator":"email@contoso.com","BudgetName":"BudgetName","BudgetType":"Cost","ResourceGroup":"","NotificationThresholdAmount":"0.8"}}
El cuadro de texto aparece así:
- Seleccione Listo.
Incorporación de la primera acción condicional
Use una instrucción condicional para comprobar si la cantidad del umbral alcanzó el 80 % o más del intervalo de presupuesto, pero no un valor mayor o igual que el 100 %. Si se ha alcanzado la cantidad de este umbral, envíe una solicitud HTTP POST con el webhook denominado Opcional. Esta acción apagará las máquinas virtuales en el grupo Opcional.
Seleccione Nuevo paso>Agregar una condición.
En el cuadro Condición, seleccione el cuadro de texto que contiene
Choose a value
para mostrar una lista de los valores disponibles.
Seleccione Expresión en la parte superior de la lista y escriba la siguiente expresión en el editor de expresiones:
float()
.
Seleccione Contenido dinámico, coloque el cursor dentro del paréntesis () y seleccione NotificationThresholdAmount en la lista para rellenar la expresión completa. La expresión es:
float(body('Parse_JSON')?['data']?['NotificationThresholdAmount'])
Seleccione Aceptar para establecer la expresión.
Seleccione es mayor o igual que en el cuadro de lista desplegable de la Condición.
En el cuadro Elegir un valor de la condición, escriba
.8
.
Seleccione Agregar>Agregar fila en el cuadro Condición para agregar otra parte de la condición.
En Condición, seleccione el cuadro de texto que contiene
Choose a value
.Seleccione Expresión en la parte superior de la lista y escriba la siguiente expresión en el editor de expresiones:
float()
.Seleccione Contenido dinámico, coloque el cursor dentro del paréntesis () y seleccione NotificationThresholdAmount en la lista para rellenar la expresión completa.
Seleccione Aceptar para establecer la expresión.
Seleccione es menor que en el cuadro de lista desplegable de la Condición.
En el cuadro Elegir un valor de la condición, escriba
1
.
En el cuadro If true (si es verdad), seleccione Agregar una acción. Agregue una acción HTTP POST que apague las máquinas virtuales opcionales.
Escriba HTTP para buscar la acción HTTP y seleccione la acción HTTP-HTTP.
Seleccione Post como valor de Método.
Escriba la dirección URL del webhook denominado Opcional que creó anteriormente en este tutorial como el valor de Uri.
Seleccione Agregar una acción en el cuadro If true. Agregue una acción de correo electrónico que envíe un correo electrónico para notificar al destinatario que las máquinas virtuales opcionales se apagaron.
Busque "enviar correo electrónico" y seleccione una acción enviar correo electrónico en función del servicio de correo electrónico que use.
Para las cuentas de Microsoft personales, seleccione Outlook.com. Para las cuentas profesionales o educativas de Azure, seleccione Office 365 Outlook. Si ya no tiene una conexión, se le solicitará que inicie sesión en su cuenta de correo electrónico. Logic Apps crea una conexión a la cuenta de correo electrónico. Deberá permitir que la aplicación lógica acceda a la información de correo electrónico.
Agregue el texto de Para, Asunto y Cuerpo para el correo electrónico que informa al destinatario de que las máquinas virtuales opcionales se han apagado. Use el contenido dinámico de BudgetName y NotificationThresholdAmount para rellenar los campos de asunto y cuerpo.
Incorporación de la segunda acción condicional
Use una instrucción condicional para comprobar si la cantidad de umbral ha alcanzado o superado el 100 % del valor de presupuesto. Si se ha alcanzado la cantidad de este umbral, envíe una solicitud HTTP POST con el webhook denominado Completo. Esta acción apaga todas las máquinas virtuales restantes.
- Seleccione Nuevo paso>Agregar una condición.
- En el cuadro Condición, seleccione el cuadro de texto que contiene
Choose a value
para mostrar una lista de los valores disponibles. - Seleccione Expresión en la parte superior de la lista y escriba la siguiente expresión en el editor de expresiones:
float()
. - Seleccione Contenido dinámico, coloque el cursor dentro del paréntesis () y seleccione NotificationThresholdAmount en la lista para rellenar la expresión completa.
La expresión es similar a la siguiente:
float(body('Parse_JSON')?['data']?['NotificationThresholdAmount'])
- Seleccione Aceptar para establecer la expresión.
- Seleccione es mayor o igual que en el cuadro de lista desplegable de la Condición.
- En el cuadro Elegir un valor de la condición, escriba
1
.
- En el cuadro If true (si es verdad), seleccione Agregar una acción. Agregará una acción HTTP POST que apagará el resto de máquinas virtuales.
- Escriba HTTP para buscar la acción HTTP y seleccione la acción HTTP-HTTP.
- Seleccione Post como valor de Método.
- Escriba la dirección URL del webhook denominado Completo que creó anteriormente en este tutorial como el valor de Uri.
- Seleccione Agregar una acción en el cuadro If true. Agregue una acción de correo electrónico que envíe un correo electrónico para notificar al destinatario de que las máquinas virtuales restantes se apagaron.
- Busque "enviar correo electrónico" y seleccione una acción enviar correo electrónico en función del servicio de correo electrónico que use.
- Agregue el texto de Para, Asunto y Cuerpo para el correo electrónico que informa al destinatario de que las máquinas virtuales opcionales se han apagado. Use el contenido dinámico de BudgetName y NotificationThresholdAmount para rellenar los campos de asunto y cuerpo.
- Seleccione Guardar en la parte superior del área Diseñador de aplicaciones lógicas.
Resumen de aplicación lógica
Aquí se muestra la apariencia que tendrá la aplicación lógica una vez que haya terminado. En el escenario más básico donde no necesita ninguna orquestación basada en el umbral, podría llamar directamente al script de automatización desde Monitor y omitir el paso de Aplicación lógica.
Cuando guardó la aplicación lógica, se generó una dirección URL a la que podrá llamar. La usará en la sección siguiente de este tutorial.
Creación de un grupo de acciones de Azure Monitor
Un grupo de acciones es una colección de las preferencias de notificación que el usuario define. Cuando se desencadena una alerta, un grupo de acciones específico puede recibir la alerta si se le notifica. Una alerta de Azure genera una notificación de forma proactiva según condiciones específicas y ofrece la oportunidad de tomar medidas. Una alerta puede usar datos de varios orígenes, como las métricas y los registros.
Los grupos de acciones son el punto de conexión única que se integrará con su presupuesto. Puede configurar las notificaciones en una serie de canales, pero en este escenario se centrará en la aplicación lógica que creó anteriormente en este tutorial.
Creación de un grupo de acciones en Azure Monitor
Cuando cree el grupo de acciones, apuntará a la aplicación lógica que creó anteriormente en este tutorial.
- Si aún no ha iniciado sesión en Azure Portal, hágalo y seleccione Todos los servicios>Supervisar.
- Seleccione Alertas y Administrar acciones.
- Seleccione Agregar un grupo de acciones desde el área Grupos de acciones.
- Agregue y compruebe los siguientes elementos:
- Nombre del grupo de acciones
- Nombre corto
- Subscription
- Resource group
- Dentro del panel Agregar grupo de acciones, agregue una acción LogicApp. Denomine la acción Budget-BudgetLA. En el panel Aplicación lógica, seleccione la Suscripción y Grupo de recursos. A continuación, seleccione la Aplicación lógica que creó anteriormente en este tutorial.
- Seleccione Aceptar para establecer la aplicación lógica. Después, seleccione Aceptar en el panel Agregar grupo de acciones para crear el grupo de acciones.
Ya ha terminado con todos los componentes complementarios necesarios para organizar eficazmente su presupuesto. Ahora todo lo que tienen que hacer es crear el presupuesto y configurarlo para usar el grupo de acciones que ha creado.
Creación del presupuesto
Puede crear un presupuesto en Azure Portal mediante el característica Presupuesto en Cost Management. O bien, puede crear un presupuesto con las API REST, los cmdlets de Powershell o la CLI. El siguiente procedimiento usa la API REST. Antes de llamar a la API de REST, necesitará un token de autorización. Para crear un token de autorización, puede usar el proyecto ARMClient. ARMClient le permite autenticarse en Azure Resource Manager y obtener un token para llamar a las API.
Creación de un token de autenticación
Vaya al proyecto ARMClient en GitHub.
Clone el repositorio para obtener una copia local.
Abra el proyecto en Visual Studio y compílelo.
Una vez que la compilación es correcta, el archivo ejecutable debe estar en la carpeta \bin\debug.
Ejecute el proyecto ARMClient. Abra un símbolo del sistema y vaya a la carpet \bin\debug desde la raíz del proyecto.
Para iniciar sesión y llevar a cabo la autenticación, escriba el siguiente comando en el símbolo del sistema:
ARMClient login prod
Copie el GUID de suscripción desde la salida.
Para copiar un token de autorización en el Portapapeles, escriba el siguiente comando en el símbolo del sistema, pero asegúrese de usar el identificador de suscripción copiado en el paso anterior:
ARMClient token <subscription GUID from previous step>
Cuando haya completado el paso anterior, verá lo siguiente:
El token se copió correctamente en el Portapapeles.Guarde el token que se usará para los pasos descritos en la siguiente sección de este tutorial.
Creación del presupuesto
A continuación, cree un presupuesto mediante una llamada a las API de REST de consumo de Azure. Necesita una manera de interactuar con las API. Algunas formas populares de consultar la API son:
- Visual Studio
- Insomnia
- Bruno
- Invoke-RestMethod de PowerShell
- Curl
Debe importar archivos de entorno y recopilación en el cliente de API. La colección contiene definiciones agrupadas de solicitudes HTTP que llaman a las API REST de consumo de Azure. El archivo de entorno contiene variables que la colección usa.
En el cliente de API, cree una nueva solicitud.
Guarde la nueva solicitud de forma que no tenga nada en ella.
Cambie la solicitud desde
Get
a una acciónPut
.Modifique la dirección URL siguiente reemplazando
{subscriptionId}
con el Id. de suscripción que usó en la sección anterior de este tutorial. Además, modifique la dirección URL para incluir "SampleBudget" como el valor de{budgetName}
:https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Consumption/budgets/{budgetName}?api-version=2018-03-31
Seleccione Encabezados en el cliente de API.
Agregue una nueva Clave llamada "Autorización".
Establezca el Valor en el token que se creó mediante ArmClient al final de la última sección.
Seleccione Cuerpo en el cliente de API.
Seleccione la opción sin procesar en el cliente de API.
En el área de texto del cliente de API, pegue la siguiente definición de presupuesto de ejemplo. Debe reemplazar los parámetros
subscriptionID
,resourcegroupname
yactiongroupname
por el identificador de la suscripción, un nombre único para su grupo de recursos y el nombre del grupo de acciones que creó tanto en la dirección URL como en el cuerpo de la solicitud:{ "properties": { "category": "Cost", "amount": 100.00, "timeGrain": "Monthly", "timePeriod": { "startDate": "2018-06-01T00:00:00Z", "endDate": "2018-10-31T00:00:00Z" }, "filters": {}, "notifications": { "Actual_GreaterThan_80_Percent": { "enabled": true, "operator": "GreaterThan", "threshold": 80, "contactEmails": [], "contactRoles": [], "contactGroups": [ "/subscriptions/{subscriptionid}/resourceGroups/{resourcegroupname}/providers/microsoft.insights/actionGroups/{actiongroupname}" ] }, "Actual_EqualTo_100_Percent": { "operator": "EqualTo", "threshold": 100, "contactGroups": [ "/subscriptions/{subscriptionid}/resourceGroups/{resourcegroupname}/providers/microsoft.insights/actionGroups/{actiongroupname}" ] } } } }
Envíe la solicitud.
Ahora tiene todas las piezas que necesita para llamar a la API de presupuestos. La referencia de la API de presupuestos tiene más detalles sobre solicitudes concretas, entre los que se incluyen:
- budgetName: se admiten varios presupuestos. Los nombres de presupuesto deben ser únicos.
- category: debe ser Cost (Costo) o Usage (Uso). La API admite tanto los presupuestos de costo como los de uso.
- timeGrain: un presupuesto mensual, trimestral o anual. La cantidad se restablece al final del período.
- filters: los filtros permiten restringir el presupuesto a un conjunto específico de recursos dentro del ámbito seleccionado. Por ejemplo, un filtro podría ser una colección de grupos de recursos para un presupuesto de nivel de suscripción.
- notifications: determina los detalles de la notificación y los umbrales. Puede configurar varios umbrales y proporcionar una dirección de correo electrónico o un grupo de acciones para recibir una notificación.
Resumen
En este tutorial, ha aprendido:
- Cómo crear un Runbook de Azure Automation para detener máquinas virtuales.
- Cómo crear una instancia de Azure Logic App que se desencadene en función de valores de umbral de presupuesto y llame al Runbook con los parámetros correctos.
- Cómo crear un grupo de acciones de Azure Monitor que se ha configurado para desencadenar la instancia de Azure Logic App cuando se alcance el umbral de presupuesto.
- ¿Cómo crear el presupuesto con los umbrales deseados y conectarlo al grupo de acciones?
Ahora tiene un presupuesto completamente funcional para la suscripción que apagará las máquinas virtuales cuando se alcancen los umbrales de presupuesto configurados.
Pasos siguientes
- Para obtener más información acerca de los escenarios de facturación de Azure, consulte Escenarios de automatización de administración de costos y facturación.