top of page

Установка лимита трат на Azure

  • Фото автора: Алик Ким
    Алик Ким
  • 15 окт. 2023 г.
  • 3 мин. чтения

Решил разместить хобби-проектик на Azure. хочется этот хостинг иметь бесплатным , ну или почти бесплатным. как я понял, Azure берет деньги за пользование мощностями. так что, по идее, если проект не станет супер-популярным - хостинг должен стоить копейки.

одно меня беспокоило: а вдруг какая-нибудь дос-атака вознесет нагрузку до небес и сломает мой кошелек полностью?

мне бы хотелось, чтоб после достижения месячными расходами какого-то порога все просто отключалось.

из коробки там в этом плане есть только оповещение по имейлу по достижении порога.

пришлось немного попотеть. вот, на днях заработало!

сейчас изложу здесь, что помню, пока воспоминания свежи.


аккаунт я завел себе бесплатный, который они там предлагают. потом прошли все бесплатные и демонстрационные периоды, меня попросили куда-то там в другой режим перейти. в общем, сейчас, вроде, мой аккаунт/тариф называется "Pay-as-you-go".


основывался на этих статьях (хотя, у меня получилось в итоге достаточно сильно по-другому, вроде):


Service Principal

для начала нам нужен Service Principal. Это - учетка, из-под которой будет запускаться наш скрипт выключения. Вроде как, специальный тип учетки для запуска скриптов , или как то так.

Ей нужно задать роль Contributor. Этой роли разрешается управлять ресурсами Azure (в частности, включать/выключать вэб-приложения, что нам и нужно)


Ее Сикрет будет отображен один раз при создании, нужно его сохранить. Хотя, если что – можно сгенерить еще сикрет, если этот потеряется, не обязательно для этого создавать новый Service Principal.


Список сервис-принципалов можно посмотреть (и создать новый) в Entra ID (это теперь так Active Directory называется) – App Registrations

жмем Add – App Registration.

Там предлагают выбрать тип, и там фигурирует «multitenant». Multitenant – тут речь идет о том, что под одним аккаунтом Azure может быть несколько организаций. Мы выбираем , мол, одна организация (пофиг на самом деле)


все, создали, сохранили сикрет.

За одно можно сохранить Application ID, он тоже понадобится.



Automation Account

это — чтото типа группы скриптов.

Идем в Automation Accounts, создаем.

Кажется, все настройки я принял по дефолту.


А теперь нам пригодится сикрет нашего ServicePrincipal.

Заходим в Credentials, добавляем. В качестве UserId – Application ID сервис-принципала. А в качестве пароля — его сикрет.



TenantId

насчет того, что такое тенант — написал выше.

тоже нам понадобится. Как получить: в поиске пишем Tenant Properties – там копируем значение


Runbook

это — собственно, скрипт.

В нашем Automation Account заходим в Runbooks, создаем. Выбираем тип Powershell, спросит про версию — я выбрал ту, что постарше (5-ю, кажется)


тээк, теперь Edit – Edit on Portal.


Скрипт выключения всех вэб-приложений выглядит так:



$ServicePrincipalCred = Get-AutomationPSCredential -Name 'BudgetTrasholdServicePrincipalCreds'


Connect-AzAccount -Credential $ServicePrincipalCred -ServicePrincipal -Tenant 'XXXX-XXXX-XXXX-XXXX-XXXXXX'



# Получаем список всех ресурсных групп

$resourceGroups = Get-AzResourceGroup


# Останавливаем все веб-приложения в каждой ресурсной группе

foreach ($resourceGroup in $resourceGroups) {

$webApps = Get-AzWebApp -ResourceGroupName $resourceGroup.ResourceGroupName

foreach ($webApp in $webApps) {

Stop-AzWebApp -Name $webApp.Name -ResourceGroupName $resourceGroup.ResourceGroupName

}

}



в первой строчке считываются креденшалы. «BudgetTrasholdServicePrincipalCreds» - это имя , которое я задал при создании Credential для Automation Account

вторая строчка — Tenant-ID


жмем Publish, чтоб сохранился.


проверка скрипта

для проверки надо бы создать вэб-прилжение (Web App) и захостить туда что-нибудь, убедиться, что приложение работает.

(сами разберетесь)


Теперь заходим в наш RunBook , жмем Start, на появившемся экране жмем таб «All Logs»

если будут ошибки — там отобразятся. Ну и проверяйте свое приложение, оно в течение нескольких минут должно погаснуть. Погасло — значит, все работает.


Бюджет

теперь нужно , чтоб этот скрипт запускался по достижении порога трат.

Для этого переходим в Cost Management – Budgets.

Теперь важный нюанс, ради которого я с поддержкой созванивался:

в качестве Scope стоит ваш пользователь. Нужно там выбрать подписку (subscription)


ок, создаем бюджет,

в поле Amount – наш порог.

Next -

тут под блоком Alert Conditions должна быть ссылочка «Manage acrion group» - вот ее не было , пока манипуляцию со скоупом не сделал.

Идея такая: создаем в action-группе действие при достижении 100% порога — вызов нашего runbook (еще можно добавить уведомление по имейлу при, скажем, 75%)

потом выбираем эту акшен-группу в бюджете.

Итак, создаем Action Group. В табе Notifications можно настроить уведомление по имейлу. А в табе Actions – добавляем вызов нашего Automation Runbook.

Закончили — жмем крестик, типа, закрываем диалог Action Groups. Видим опять экран создания бюджета

и там в блоке Alert Conditions выбираем нашу Action Group

уфффф! Это было сложно, блин!


Кстати, в процессе разбирательств неоценимую помощь мне оказали ChatGPT и его друг-конкурент от Google – Bard. Всем рекомендую!

Ну и поддержке Microsoft Azure спасибо — разбирались-разбирались, в итоге она предложила созвониться, назначила время, пообщались, она там пошла с коллегами советоваться… в общем, занимались моей проблемой.

И это при том, что на данный момент я плачу им 89 центов в месяц :) (пока что ничего не запущено)

 
 
 

Недавние посты

Смотреть все

Comments


Околокомпьютерный блог Алика

  • alt.text.label.Facebook

© Околокомпьютерный блог Алика , 2022. Сайт создан на Wix.com

bottom of page