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

Cloud Design Patterns – záznam, slides [WUG Days Brno 04/2018]

Záznam z přednášky pro konferenci WUG Days Brno z 8. dubna 2018. Je publikován na našem HAVIT YouTube Channelu.

Materiály

Dotčená témata

  • Anti-Corruption Layer
  • External Configuration Store
  • .NET 4.7.1 – ConfigurationBuilders
  • Gateway Aggregation
  • Gateway Offloading
  • Gateway Routing
  • Health Endpoint Monitoring
  • Sidecar
  • Ambassador
  • Cache-Aside
  • Locking with Double Checking
  • Static Content Hosting
  • Sharding – Lookup Strategy, Range Strategy, Hash Strategy
  • Throttling
  • Retry
  • Bulkhead
  • Circuit Breaker
  • Materialized View
  • Event Sourcing
  • Compensating Transaction
  • CQRS – Command and Query Responsibility Segregation
  • Valet Key

Správa Azure subscription patřící Microsoft Accountu z Organizational Accountu (AAD)

Můžete se stejně jako já ocitnout v situaci, kdy

  • máte existující Azure Subscription patřící pod Microsoft Account,
  • chcete ji spravovat pomocí svého Organizational Accountu (Azure AD),
  • a nechcete nebo nemůžete z jakéhokoliv důvodu převést vlastníka subscription na Organizational Account – např. pokud se jedná o sponzorovanou subscription, kde je sponzorství asociované na určitý Microsoft Account (Microsoft Partner Network, MSDN Subscription, MVP Sponsorship, atp.).

Celý trik je prostý „change the directory of the subscription to your Azure AD directory“. Toto uspořádání vám ponechá vlastnictví subscription na Microsoft Accountu (Account Admin), přesto budete moci subscription na portále spravovat při přihlášení přes svůj Organizational Account.

Prakticky je to jen pár kroků:

1. Přidejte Microsoft Account do svého Azure AD jako „guest user“

Aby bylo možné změnit directory oné subscription, musí být příslušný Microsoft Account členem cílového AAD. Asociaci MSA k AAD provedete jednoduše:

  • Přihlašte se do Azure Portálu jako Azure AD administrator cílového AAD.
  • Otevřete si Azure Active Directory blade.
  • Jděte do sekce Users.
  • Zvolte tlačítko „+ New guest user“ v horní liště.
  • Pozvěte svůj Microsoft Account do cílové Azure Active Directory.

2018-03-26_9-50-53

2. Přijměte pozvánku Microsoft Accountu do AAD

Pozvánku je potřeba přijmout…

  • Dostanete do e-mailové schránky Microsoft Accountu zprávu, v které je tlačítko pro přijetí pozvánky.
  • Raději neklikejte na tlačítko Accept Invitation přímo, protože váš browser může být přihlášený na Organizational Account (nebo se jinak chytne na buchvíjaký účet).
  • Raději naberte cílové URL tlačítka do schránky a otevřete ho v privátním okně browseru (New incognito window, popř. In-private, či jak se to v různých browserech jmenuje).
  • Přihlašte se pomocí Microsoft Accountu.
  • Po přihlášení a akceptaci pozvánky budete nejspíš přesměrováni na matoucí (dost často prázdnou) stránku Applications. Nicméně asociace je vytvořena a můžete browser zavřít.

3. Změna directory subscription

Nyní můžete změnit directory subscription na cílové AAD:

  • Přihlašte se do Azure Portalu svým Microsoft Accountem.
  • Otevřete si příslušnou subscription (můžete využít např. vyhledávací pole nahoře a napsat „subscription“).
  • Klikněte na tlačítko Change directory v horní liště tlačítek.
  • Na panelu Change the directory byste nyní měli mít možnost vybrat svou Azure AD jako cílovou directory pro změnu.
  • Potvrďte změnu.

Změna se obvykle projeví během 10 minut.

2018-03-26_9-49-25

4. Přidání oprávnění pro váš Organizational Account

Abyste mohli svůj Organizational Account použít ke správě subscription, je potřeba mu přidat příslušná oprávnění (dokud jste přihlášeni pomocí původního Microsoft Accountu).

  • V blade Subscription se přepněte do sekce Access control (AIM).
  • Přidejte svému Organizational Accountu roli Owner na úrovni subscription.
  • V kontextovém menu (pravé tlačítko myši) na přidaném Organizational Accountu můžete též zvolit Add as co-administrator. Některé okrajové starší scénáře ještě spoléhají na co-administrátorské oprávnění a nestačí jim role Owner..

2018-03-26_9-22-25

5. Hotovo

  • Odhlaste se z Microsoft Accountu, přihlašte se Organizational Accountem a měli byste mít možnost subscription v portále spravovat.

Vývoj cloudových aplikací – 04 Azure Storage, Blobs, Queues [MFF UK NSWI152, LS 2018]

Záznam z čtvrté vyučovací hodiny (13. března 2018) semináře Vývoj cloudových aplikací (NSWI152) pro MMF UK v letním semestru 2017/2018. Je publikován na našem HAVIT YouTube Channelu.

Dotčená témata

  • Azure Storage Account
  • Azure Storage – Blobs
  • Azure Storage – Queues

Záznam je v angličtině. Ukázalo se, že na hodinu přišlo více zahraničních studentů než českých, tak jsme se domluvili takto.

Instrukce k labům jsou k dispozici na GitHubu – LAB4 + LAB5.