Azure Resource Manager programozása C#-al //Halányi Ferenc halanyi.ferenc@nexogen.hu https://github.com/haliferi/azurenuget
Azure Resource Manager programozása C#-al Bevezető Miért ARM? Rövid összehasonlítás a Classic modellel ARM Programozási lehetőségek áttekintése Célok és felhasználhatóság Programozzuk C#-al! Első lépések, első Nugetek Bejelentkezés az Azure-ba Alapvető erőforrások létrehozása VM-ek létrehozása és menedzselése
Hogy merült fel az igény? Matematikai modellekre épülő valós idejű döntéstámogató és optimalizációs szoftver megoldások Időszakosan nagy CPU terhelés Futási idő érzékenység Aktuális bejövő adatoktól és rendszer állapottól függő tervezési erőforrás szükséglet Nemzetközi több telephelyes elérés biztosítása > Szükséges optimalizálni az erőforrás költségeket is
Azure Resource Manager Bevezető Azure Resource Manager
Classic vs ARM Classic (v1) ARM (v2) Microsoft ki fogja vezetni, de néhány funkció még csak itt érhető el XML alapú Cloud Service konténer integrálta a VM-eket a hálózattal Régi portál: https://manage.windowsazure.com ARM (v2) JSON alapú Resource Groupba csoportosítható minden erőforrás VM, NIC, LB, IP address, DNS független egymástól Új portál: https://portal.azure.com További infó: https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-azurerm-versus-azuresm/
ARM előnyök fejlesztői szemmel - 1 Gyors: Párhuzamosan menedzselhetőek az erőforrások Template függőségeket, hivatkozásokat beépítve kezeli Kompatibilitás biztosított api-version=2015-06-15 paraméter minden kérésben Beszédes URI minden erőforráshoz 1 klikkel törölhető az egész mű Resource Group törölhető benne lévő erőforrásokkal együtt ! Néhány erőforrás nevének elengedése hosszú idő is lehet pl: SQL Server
ARM előnyök fejlesztői szemmel - 2 Azure Resource Explorer JSON Template lekérhető tetszőleges erőforrásról Használható menedzselésre is JSON Template módosítható, infrastruktúra frissítésre kerül Alapvető parancsok kiadhatóak GUI-n, akár paraméterekkel Paraméterezett PowerShell parancsok lekérhetőek https://resources.azure.com/ QuickStart Templates 260+ JSON Template különféle szcenáriókra https://github.com/Azure/azure-quickstart-templates
Azure Portál - Azure Resource Manager //DEMO Azure Portál - Azure Resource Manager
ARM Programozási lehetőségek JSON + REST API a közös interfész Minden parancs GET vagy JSON POST kérésre képződik le Hibakereséshez és visszafejtéshez elegendő egy HTTPS proxy Pl: Fiddler Web Debugger Több megközelítés PowerShell parancsok JSON Template Azure automatizáló szolgáltatások C# - Microsoft Nugetek Nem alternatívák, feladatfüggő a felhasználásuk
ARM Programozási lehetőségek - PowerShell 1500+ Azure parancs Lefedi a teljes Azure funkcionalitást Külön Rm parancsok a Resource Manager modellhez Az elkészült scripteket a felhőben is lehet futtatni Automation Account + Scheduler Job Inkább kisebb management feladatok ellátására, üzemeltetésre célszerű használni Példa ARM VM létrehozására PowerShell-ből: https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-ps-create-preconfigure- windows-resource-manager-vms/
ARM Programozási lehetőségek – JSON Template Komplett infrastruktúra létrehozható egy Template-ből Paraméterezhető, a futtatáskor át lehet adni változókat Támogat alapvető szöveges, matematikai funkciókat és ciklust is PowerShell-ből vagy a Portálon keresztül deployolható ARM kezeli a korrelációkat, többszálasítást és hiba esetén az újrapróbálkozást Visual Studio Support: Azure SDK Azure SDK újdonságok: https://azure.microsoft.com/en-us/blog/announcing-the-azure-sdk-2-6-for-net/ -> van még 2-7, 2-7-1, 2-8 is
Virtual machine scale sets Azure automatizálás Virtual machine scale sets Metrikák alapján automatikus elindítás és leállítás Nem kell létrehozni és beállítani egyenként a VM-eket Gyorsabb, mint az egyenkénti VM létrehozás JSON Template alapján működik SQL elastic pools Adatbázisok összefogása a terhelés kiegyenlítése érdekében Nem használható egyetlen adatbázis automatikus méretezésére Automation Account + Scheduler Job
ARM Programozási lehetőségek – C# Microsoft által kiadott Nugetek Elfedik a webes hívásokat Wrappelik a JSON objektumokat C# objektumokkal Folyamatosan fejlesztik őket Egyre több Azure funkcionalitást fednek le Pár hetente jelenik meg új stabil és prerelease verzió Teljesen integrált, saját infrastruktúrát menedzselő alkalmazás hozható létre
Teljesen automatikus infrastruktúra menedzsment C# Célok – előnyök - 1 Felhasználói tevékenység és üzleti adatok alapján dinamikus infrastruktúra kezelés Erőforrás optimalizáció Teljesen automatikus infrastruktúra menedzsment Azure Portálra, VM-ekbe akár be se szükséges lépni Homogén fejlesztés: teljes szoftver C# alapon Azure Nugetekhez Intellisense támogatás
Azure erőforrások állapotának lekérdezése és menedzselése C# Célok – előnyök- 2 Azure erőforrások állapotának lekérdezése és menedzselése Jövőben: előfizetési állapot és korlátok is Pl: Alkalmazás funkció korlátozása, keret túllépés csökkentése érdekében Jelenleg csak erőforrás felhasználás kérdezhető le Számítási idő, tárhely foglaltság, konkrét költségek nem Részletes statisztika érhető el, óránkénti és napi felbontásban
ARM Nugetek C# Programozása
Microsoft.Azure.Management névterű nugetek ARM Nugetek Microsoft.Azure.Management névterű nugetek ! Microsoft.WindowsAzure névtér a Classic-hoz van! Minden ARM Client külön nugetben van Folyamatosan frissülnek Stabil és Prerelease verziók Sok a különbség közöttük Microsoft.IdentityModel.Clients.ActiveDirectory 2.21.301221612 3.6.212041202-a Microsoft.Azure.Management.Compute 9.1.0 11.1.0-prerelease Microsoft.Azure.Management.Network 2.0.9-preview 3.1.0-preview Microsoft.Azure.Management.Resources 2.18.7-preview 3.3.1-preview Microsoft.Azure.Management.Sql 0.43.0-prerelease Microsoft.Azure.Management.Storage 2.4.0-preview 4.0.0-preview
Aktuális stabil ARM Nuget verziók - 1 Sok a hiányosság Nem fedik el teljesen a HTTP layert Többnyire AzureOperationResponse-ból származó válaszok HttpStatusCode vizsgálata szükséges Nincsenek közös interfészek DatabaseCreateOrUpdateResponse DeleteOperationResponse ComputeLongRunningOperationResponse
Aktuális stabil ARM Nuget verziók - 2 ARM funkciók implementálása kódból szükséges Hibakezelése és újrapróbálkozási stratégia Többszálasítás Hivatkozott erőforrások megfelelő sorrendben hozandóak létre Hivatkozott adatok (pl: IP cím) lekérdezése Erőforrás tulajdonságok stringként vannak kezelve Lokációk: „North Europe” ! A legtöbb helyen csak „northeurope” formátumot fogad el Méretezések: „Standard_D1”, „S0”
Prerelease ARM Nuget verziók - 1 Folyamatosan frissülnek, akár heti rendszerességgel Teljesen elfedik a HTTP layert Csak C# Azure erőforrás objektum be és kimenetű függvények vannak Egymásra épülő erőforrások létrehozhatóak egyetlen kérésben VM, NIC, IP cím esetén már a teljes objektum fa megadható
Prerelease ARM Nuget verziók - 2 Még nem egységesek, nem kompatibilisek egymással Management kliensek bejelentkezési logikája változik Eddig: Microsoft.Azure.TokenCloudCredentials Prerelease: Microsoft.Rest.ServiceClientCredentials SubscriptionId megadása szükséges ! De SQL, Subscription nugetekben még nem frissült Erőforrás string helyett segédosztály VirtualMachineSizeTypes Van a stabilban is, de a D sorozat még nincs benne!
Külön réteg, kifelé nincsenek Azure objektumok Saját Azure Wrapper Külön réteg, kifelé nincsenek Azure objektumok Azure nuget verzió független Bejelentkezési logika egységes Általánosított hibakezelés Erőforrás stringek helyett osztályok Nem teljes, az éppen használt Azure funkciók kerülnek bele
C# ARM Nugetek áttekintése //DEMO C# ARM Nugetek áttekintése
Bejelentkezés, azaz Token kérése OAuth2 interfész Felhasználónév + jelszó vagy tanúsítvány a hitelesítéshez Siker esetén Token (b64 string), 1 óra lejárat Auzre ManagementClient-ek létrehozásakor kell átadni https://login.windows.net/{tenant}.onmicrosoft.com/oauth2/token Microsoft.IdentityModel.Clients.ActiveDirectory - ADAL 2.21.* a legfrissebb stabil nuget 3.*-alpha, szükséges a többi prerelease nugethez ! Hozzá kell adni a futtatott projecthez is, különben exception!
Azure hitelesítési módok Felhasználó alapú Egyszerű beállítani, de nem biztonságos, inkább fejlesztéshez ! Azure AD felhasználó jelszava alapesetben egy idő után lejár Tanúsítvány alapú Biztonságos, éles környezetben ajánlott Azure AD Application beállítása szükséges a Portálon ClientId az alkalmazás beállításaiból kimásolható Windows Azure Service Management API jog delegálás Új portálon Role Based alapon finomítható a hozzáférés Vagy a menedzser felhasználó Azure portál administratorként való felvétele
Hitelesítés beállítása Portálon //DEMO Hitelesítés beállítása Portálon
ARM ManagementClient-ek Egy kliens egyszerre egy előfizetéshez használható Érdemes szálanként létrehozni a klienseket Elnevezés nem egységes ResourceManagementClient NetworkResourceProviderClient ComputeManagementClient SqlManagementClient SubscriptionClient
Példa C# program https://github.com/haliferi/azurenuget //DEMO Példa C# program https://github.com/haliferi/azurenuget