Category Archives: Azure

Naplánovaný restart Azure App Service

Pokud chcete restartovat Azure App Service dle časového plánu, nabízí se použít jednoduše PowerShell:

Stop-AzureRmWebApp -Name '_App Service Name_' -ResourceGroupName '_Resource Group Name_'
Start-AzureRmWebApp -Name '_App Service Name_' -ResourceGroupName '_Resource Group Name_'

Jenom je potřeba vyřešit dva problémy:

  1. Čím budeme takový skript spouštět? …můžeme prostě použít WebJob.
  2. Jak se bude skript autentizovat? …je potřeba použít Service Principal.

Vezměme to od konce.

Credits: Tento návod vznikl na základě postupu původně publikovaného Karanem Singhem, zaměstnancem Microsoftu, na jeho MSDN blog. Postup jsem opravil a ověřil.

Vytvoření Service Principal Id pro autentizaci

Určitě není dobrý nápad, spouštět podobné joby pod uživatelským účtem reálného uživatele. V mém případě je to navíc v podstatě nemožné, protože mám Organizational Account s 2-FA.

Je potřeba použít servisní účet a Service Principal Id je přesně to, co v kontextu Azure potřebujeme.

Abychom ho vytvořili, můžeme použít jednoduchý Powershell script (jednorázový úkon z vlastního PC):


param
(
    [Parameter(Mandatory=$true, HelpMessage="Enter Azure Subscription name. You need to be Subscription Admin to execute the script")]
    [string] $subscriptionName,

    [Parameter(Mandatory=$true, HelpMessage="Provide a password for SPN application that you would create")]
    [string] $password,

    [Parameter(Mandatory=$false, HelpMessage="Provide a SPN role assignment")]
    [string] $spnRole = "owner"
)

#Initialize
$ErrorActionPreference = "Stop"
$VerbosePreference = "SilentlyContinue"
$userName = $env:USERNAME
$newguid = [guid]::NewGuid()
$displayName = [String]::Format("VSO.{0}.{1}", $userName, $newguid)
$homePage = "http://" + $displayName
$identifierUri = $homePage

#Initialize subscription
$isAzureModulePresent = Get-Module -Name AzureRM* -ListAvailable
if ([String]::IsNullOrEmpty($isAzureModulePresent) -eq $true)
{
    Write-Output "Script requires AzureRM modules to be present. Obtain AzureRM from https://github.com/Azure/azure-powershell/releases. Please refer https://github.com/Microsoft/vsts-tasks/blob/master/Tasks/DeployAzureResourceGroup/README.md for recommended AzureRM versions." -Verbose
    return
}

Import-Module -Name AzureRM.Profile
Write-Output "Provide your credentials to access Azure subscription $subscriptionName" -Verbose
Login-AzureRmAccount -SubscriptionName $subscriptionName
$azureSubscription = Get-AzureRmSubscription -SubscriptionName $subscriptionName
$connectionName = $azureSubscription.SubscriptionName
$tenantId = $azureSubscription.TenantId
$id = $azureSubscription.SubscriptionId

#Create a new AD Application
Write-Output "Creating a new Application in AAD (App URI - $identifierUri)" -Verbose
$secpasswd = ConvertTo-SecureString $password -AsPlainText -Force
$azureAdApplication = New-AzureRmADApplication -DisplayName $displayName -HomePage $homePage -IdentifierUris $identifierUri -Password $secpasswd -Verbose
$appId = $azureAdApplication.ApplicationId
Write-Output "Azure AAD Application creation completed successfully (Application Id: $appId)" -Verbose

#Create new SPN
Write-Output "Creating a new SPN" -Verbose
$spn = New-AzureRmADServicePrincipal -ApplicationId $appId
$spnName = $spn.ServicePrincipalName
Write-Output "SPN creation completed successfully (SPN Name: $spnName)" -Verbose

#Assign role to SPN
Write-Output "Waiting for SPN creation to reflect in Directory before Role assignment"
Start-Sleep 20
Write-Output "Assigning role ($spnRole) to SPN App ($appId)" -Verbose
New-AzureRmRoleAssignment -RoleDefinitionName $spnRole -ServicePrincipalName $appId
Write-Output "SPN role assignment completed successfully" -Verbose

#Print the values
Write-Output "`nCopy and Paste below values for Service Connection" -Verbose
Write-Output "***************************************************************************"
Write-Output "Connection Name: $connectionName(SPN)"
Write-Output "Subscription Id: $id"
Write-Output "Subscription Name: $connectionName"
Write-Output "Service Principal Id: $appId"
Write-Output "Service Principal key: <Password that you typed in>"
Write-Output "Tenant Id: $tenantId"
Write-Output "***************************************************************************"

Budete dotázáni na název subscription a heslo pro Service Principal Id. Pro úspěšné vykonání musíte být administrátoři své Azure Active Directory.

Založený Service Principal Id si pečlivě uložte a chraňte, dostává totiž roli Owner (popř. můžete nastavit jinou, např. Contributor). Účet lze využít i na spoustu dalších administračních úkonů, byť je dobrý nápad mít oddělené účty pro každý takový job (ideálně s minimálními právy jen pro daný úkon, ale to ponechávám pro tuto chvíli pro vlastní doladění).

2018-07-31_17-32-06.png

Vytvoření naplánovaného WebJobu

V zásadě použijte libovolný vlastní postup pro nasazení naplánovaného WebJobu, který bude spouště příslušný skript:

$ProgressPreference= "SilentlyContinue"
$password = '_Service Principal Key/Password_'
$secpasswd = ConvertTo-SecureString $password -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ("_Service Principal Id_", $secpasswd)
Add-AzureRmAccount -ServicePrincipal -Tenant '_Tenant Id_' -Credential $mycreds
Select-AzureRmSubscription -SubscriptionId '_Subscription Id_'
Stop-AzureRmWebApp -Name '_App Service Name_' -ResourceGroupName '_Resource Group Name_'
Start-AzureRmWebApp -Name '_App Service Name_' -ResourceGroupName '_Resource Group Name_'

Můžete to udělat například ručně přímo z portálu:

  1. Uložte skript do souboru run.ps1 a ten zazipujte (na názvu ZIPu nezáleží).
  2. Přes App Service / Web Jobs a Add můžete WebJob přidat:

2018-07-31_17-47-28.png

Hotov. Jen pamatujte, že naplánované WebJoby běží lépe (vůbec), jen pokud běží vaše aplikace, tedy potřebujete mít nastaven režim Always On.

Vytvořený WebJob můžete snadno ověřit i ručním spuštěním z portálu (tlačítko Start), popř. si můžete výsledek prohlédnout přes KUDU Dashboard (tlačítko Logs) – což mimochodem vřele doporučuji, protože není jisté, že se vám vše povedlo bezchybně a čekat na plánované spuštění je zbytečné.

 

Let’s Encrypt – generování a binding SSL certifikátů do Azure Cloud Service [Mirek Holec, HAVIT Vzdělávací okénko, 19.7.2018]

Záznam ze Vzdělávacího okénka HAVIT ze 19. července 2018, kde Miroslav Holec prezentoval svou realizaci automatického generování SSL certifikátů Let’s Encrypt a jejich následného bindingu do IIS v Azure Cloud Service (Web Role).

Nahrávka je publikována na našem HAVIT YouTube Channelu.

O použití Let’s Encrypt zdarma v Azure App Service mimochodem Mirek psal 16. července ve svém článku SSL certifikát pro webové aplikace v Azure App Service zdarma.

DevOps Bootcamp Praha 2018 – záznamy z přednášek

  1. června 2018 jsme pořádali mini-konferenci DevOps Bootcamp Praha.

Na našem HAVIT YouTube Channelu vám nabízíme záznamy ze všech prezentací.

DevOps Bootcamp Praha 2018 – YouTube Playlist:

  1. TFS 2018 a VSTS – co je nového za poslední rok [Michael Juřek]
  2. AKS & .NET Core [Valdemar Zavadský]
  3. Migrace TFS do VSTS [Jiří Kanda]
  4. Application Insights – logování a diagnostika aplikací [Miroslav Holec]
  5. Infrastructure as Code [Tomáš Kubica]

…těšíme se zase za rok.

Cloud Design Patterns – záznam, slides [TechEd Praha 5/2018]

Slides z mé přednášky pro TechEd DevCon Praha z 16.5.2018:

Záznam z přednášky je publikován na našem HAVIT YouTube Channel.

Probírané patterny:

  • Cache-Aside
  • Static Content Hosting
  • Valet Key
  • Gatekeeper
  • Gateway Offloading
  • Gateway Aggregation
  • Gateway Routing
  • Strangler
  • Anti-Corruption Layer
  • Health Endpoint Monitoring
  • External Configuration Store
  • Sharding – Lookup Strategy, Range Strategy, Hash Strategy
  • Throttling
  • Retry
  • Circuit Breaker
  • Bulkhead
  • Materialized View
  • Event Sourcing
  • Compensating Transaction
  • CQRS – Command and Query Responsibility Segregation
  • Queue-Based Load Leveling
  • Competing Consumers

Diagnostika aplikací v Azure AppService – záznam a dema [TechEd Praha 05/2018]

Dema z mé přednášky pro TechEd DevCon Praha z 16.5.2018:

Záznam z přednášky je publikován na našem HAVIT YouTube Channel.

Dotčená témata

Global Azure Bootcamp Praha 2018 – záznamy z přednášek

Dne 21. dubna 2018 jsme společně s Miroslavem Holcem pořádali českou instancí celosvětové konference Global Azure Bootcamp.

Na našem HAVIT YouTube Channelu vám nabízíme záznamy z většiny prezentací.

Global Azure Bootcamp Praha 2018 – YouTube Playlist:

  1. Keynote:  Uvítání [Robert Haken, Miroslav Holec]
  2. Keynote: Novinky v Azure PaaS [Robert Haken]
  3. Power BI a otevřená data [Karel Rejthar]
  4. Úvod do Azure Bot service – aneb jak stvořit vlastního (ro)Bota [Jan Vaněk]
  5. Serverless (Azure Functions) a Cosmos DB (NoSQL) [Valdermar Zavadský]
  6. Vývoj SPA v React + Redux [Pavel Kříž]
  7. Diagnostika aplikací v Azure App Service [Robert Haken]
  8. Kubernetes jako služba v Azure: proč kontajnery a jak na ně [Tomáš Kubica]
  9. Seznámení s GITem [Martin Havel]
  10. Azure CDN a jak ji začít rozumně používat [Jiří Činčura]
  11. Azure IoT [Jan Holešínský, Filip Herudek]
  12. Trailer

…toť z ročníku 2018 vše. Ostatní záznamy se buď nepodařily technicky, nebo si přednášející nepřál nahrávání.

Global Azure Bootcamp Praha – 21.4.2018 – pozvánka

Zveme vás na Global Azure Bootcamp Praha – 21.4.2018

Přednášející

  • Robert Haken
  • Tomáš Herceg
  • David Gešvindr
  • Jiří Činčura
  • Tomáš Kubica
  • Marek Chmel & Vladimír Mužný
  • David Gešvindr
  • a další osobnosti světa Azure!

Těšit se můžete na

  • Novinky v Azure PaaS
  • Azure Cosmos DB
  • Azure SQL
  • Zkušenosti s Azure CDN
  • Zkušenosti s migrací do Azure
  • Azure Bot Service
  • Power BI a otevřená data
  • Kubernetes
  • Azure IoT hub
  • Diganostické možnosti Azure App Service
  • a další přednášky nejen o Azure

V pátek v předtermínu nabitý workshop

  • Utilizing Azure Services for Data Science and Machine Learning