Haikos Blog Blog von Haiko Hertes zu allen Themen rund um Microsoft und Datacenter

27Mai/200

CSV, Excel und das Trennzeichen

Öffnet man (auf einem europäischen System) eine korrekt formatierte CSV Datei in Excel, dann ergibt sich ein altbekanntes Problem: Die einzelnen Zeilen werden zu einer Zelle "zusammengeschmissen", statt in Spalten getrennt dargestellt zu werden.

Der Grund hierfür ist, dass das eigentlich als CSV-Trennzeichen vorgesehene Komma "," im europäischen Sprachraum das Trennzeichen für Nachkommastellen ist. Im englischen Sprachraum ergibt sich das Problem nicht, hier werden Nachkommastellen mit dem Punkt "." abgetrennt und das Komma ist dadurch frei. Als Lösung für dieses Problem verwendet (und erwartet) Excel daher auf europäischen Systemen ein Semikolon ";" als Trennzeichen.

Als Workaround waren mir bisher zwei Lösungen bekannt:

  • Ersetzen der Kommas vor dem Öffnen durch Semikolons bzw. Ersetzen der Semikolons nach dem Speichern durch Kommas
  • Ändern der Regions- und Spracheeinstellungen

Nun habe ich aber eine neue Lösung gesehen, die so simpel wie genial ist:

Mit Hilfe der Zeile

sep=,

in der ersten Zeile der CSV Datei teilt man Excel mit, das eben das Komma als Trennzeichen zu verwenden ist. Das setzt natürlich voraus, dass in der CSV-Datei keine anderen Kommas außer als Trennzeichen verwendet wurden.

Viel Spaß beim Ausprobieren!

25Mai/200

Azure Migrate YouTube Serie

Ich wollte euch an dieser Stelle gerne auf meine Mini-Serie zu Azure Migrate auf YouTube aufmerksam machen:

Im ersten Teil zeige ich euch, wie man das Azure Migrate Assessment einrichtet, um Kostenabschätzung, Sizing und co. zu bekommen.

Im zweiten Part zeige ich die Replikation, Testmigration und Migration von VMs.

Und im dritten Part geht es nochmal dediziert um das Assessment auf der Basis von ausschließlich CSV Daten.

Viel Spaß beim Ansehen!

16Mrz/200

Azure AD – Datenspeicherung außerhalb Europa

Microsoft stellt ein schönes PowerBI Tooling bereit, mit dem man für seine Azure AD location und die verwendeten Services feststellen kann, wo die Daten tatsächlich gespeichert werden:

http://aka.ms/AADDataMap

Hier sieht man dann auch, dass auch für einen EU tenant, Teile der Daten in Nordamerika gespeichert werden - nämlich dann, wenn man MFA benutzt:

Schaut man dazu in die Azure Active Directory Data Security Considerations, dann sieht man das dort auch explizit erwähnt:

Es geht hier also vor allem um das Speichern der Telefonnummern und UPNs in Amerika. Diese Tatsache war mir - und ich vermute da geht es einigen von euch ähnlich - so nicht bewusst...

18Feb/202

Azure – RBAC Custom Role für das starten und stoppen von VMs

Weil es die Tage bei einem meiner Kunden wieder mal ein Thema war, möchte ich es hier nun mal im Detail beleuchten. Und zwar geht es um die Anforderung, Virtuelle Maschinen in Azure starten und stoppen zu können, ohne beispielsweise die VM löschen zu können oder ihre SKU zu verändern. Natürlich gibt es den "Virtual Machine Contributor" als built-in Role, aber diese darf eben deutlich zu viel.

Wie geht man nun an das Thema heran? Zunächst muss man zwei Dinge in Erfahrung bringen:

  • Den Namen des Resource-Providers um den es geht
  • Die Operationen auf diesem Provider, die man erlauben oder verbieten möchte

Dazu kann man sich in den Microsoft Docs informieren:

Für den Fall der Virtual Machine finden wir dazu also:

  • Der Resource Provider heisst "Microsoft.Compute"
  • Auf diesem sind u.a. folgende Aktionen vorgesehen:
    • Microsoft.Compute/virtualMachines/powerOff/action
      • Powers off the virtual machine. Note that the virtual machine will continue to be billed.
    • Microsoft.Compute/virtualMachines/read
      • Get the properties of a virtual machine
    • Microsoft.Compute/virtualMachines/restart/action
      • Restarts the virtual machine
    • Microsoft.Compute/virtualMachines/start/action
      • Starts the virtual machine

Die Liste der möglichen Aktionen auf einem Resource Provider kann man auch via PowerShell bekommen, z.B.:

1
Get-AzProviderOperation "Microsoft.Compute/*" | FT Operation, Description -AutoSize

Man muss allerdings berücksichtigen, dass es zum Starten einer VM auch erstmal nötig ist, die VM überhaupt sehen zu dürfen...

Als nächstes muss man die Rollen-Definition im JSON-Format schreiben. Dazu kann man sich auch vorab eine bereits existierende Rollendefinition herunterladen, z.B. mit

1
Get-AzRoleDefinition -Name "Virtual Machine Contributor" | ConvertTo-Json

Nun passt man sich das JSON so an, dass die gewünschten Aktionen abgedeckt sind. Dabei wird die "ID" Zeile entfernt und "IsCustom" auf "true" gesetzt. Außerdem muss der AssignableScope gesetzt werden. In unserem Fall führt das in etwa zu dieser Definition:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
  "Name": "Virtual Machine Starter-Stopper",
  "IsCustom": true,
  "Description": "Lets you see, start, restart and stop Virtual Machines.",
  "Actions": [
	"Microsoft.Resources/subscriptions/resourceGroups/read",
    "Microsoft.Compute/virtualMachines/read",
	"Microsoft.Compute/virtualMachines/start/action",
	"Microsoft.Compute/virtualMachines/restart/action",
	"Microsoft.Compute/virtualMachines/powerOff/action",
	"Microsoft.Compute/virtualMachines/deallocate/action"
  ],
  "NotActions": [],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": [
    "/subscriptions/00000000-1234-5678-91234-000000000000"
  ]
}

Diese Definition kann man z.B. mit vi in der Azure Cloud Shell in ein File schreiben. Diese kann man dann wiederum mit

1
New-AzRoleDefinition -InputFile myRole.json

in eine neue Rolle schreiben lassen.

Nun kann man die Rolle bspw. über das Azure Portal zuweisen:

Und damit kann der Benutzer dann genau die definierten Rechte wahrnehmen - und nicht mehr!

Viel Spaß beim Ausprobieren!

6Feb/200

Azure – Account Failover für Storage Accounts in der Preview

Wie Microsoft in seinem Blog-Artikel angekündigt hat, ist das "Account Failover" Feature für den Storage Account nun in der Public Preview. Aber worum handelt es sich hier überhaupt?

Schon seit Längerem bieten Storage Accounts die Möglichkeit, die Daten georedundant vorzuhalten. Dabei werden in den Optionen ZRS, GRS und RA-GRS (und neuerdings auch GZRS) die Daten (die am primären Speicherort schon 3-fach vorgehalten werden) in ein anderes Azure Rechenzentrum in der selben Region (ZRS) oder in einer anderen Region gespiegelt. Dies geschieht allerdings asynchron, d.h., bei einem Ausfall in der Ursprungsregion kann es sein, dass nicht alle Daten vollständig gespiegelt worden, somit kann es zu Datenverlust kommen.

Clients write data to the storage account in the primary region

In der Option RA-GRS (Read-access geo-redundant Storage) gibt es die Option, die Daten auch am sekundären Speicherort zu nutzen, aber nur lesend! Das heisst: Kommt es zu einem Ausfall des primären Datacenters, sind meine Daten zwar nach wie vor vorhanden, allerdings komme ich nicht oder nur lesend an diese ran. Das dürfte für die meisten Anwendungsfälle, bei denen die Daten nicht nur als Archiv abgelegt sondern permanent genutzt werden ein Problem sein.

Diesem begegnet Microsoft jetzt mit einem tollen Feature: Account Failover.

Damit kann man nun den Failover (manuell) einleiten, wenn der primäre Endpunkt nicht verfügbar ist. Dadurch wird der bisherige sekundäre Endpunkt zum primären und andersherum. Und das wiederum hat zur Folge, dass man die Daten eben von dort weiterhin lesend und auch schreibend nutzen kann. Allerdings dauert dieser Failover laut Microsoft etwa eine Stunde - eine Dienstunterbrechung kann man damit also im Regelfall nicht vermeiden. Der Failover biegt die DNS-Einträge und Service Endpoints auf den sekundären Endpunkt um.

Customer initiates account failover to secondary endpoint

Allerdings wird der Storage Account dadurch zu einem LRS Account (also ohne zonenübergreifende Redundanz). Wenn gewünscht kann man ihn aber dann wieder in einen georedundanten Storage Account umwandeln - dies ist dann aber mit einer vollständigen (Neu)Replikation und den damit einhergehenden Kosten verbunden! Allerdings scheint das aktuell der einzige Weg für ein Failback zu sein - hier muss man aber dann warten, bis die vollständige Replikation abgeschlossen ist. Microsoft warnt hier vor sonst möglicherweise auftretenden gravierenden Datenverlusten!

Die Preview ist leider nur in diesen Regionen verfügbar:

  • Asia East
  • Asia Southeast
  • Australia East
  • Australia Southeast
  • US Central
  • US East 2
  • US West Central
  • US West 2

Wie bei Previews üblich sind diese nicht für produktive Workloads gedacht und es gibt auch keinen SLA!

Hier findet sich die komplette Doku zu diesem Feature:

https://docs.microsoft.com/en-us/azure/storage/common/storage-disaster-recovery-guidance

31Jan/200

Mein Beitrag zum Azure Day 2020 in der Schweiz

In den letzten Tagen habe ich auf dem Microsoft-Event "Azure Day" sowohl in der Westschweiz als auch Zürich über Azure App Service, Web Apps und Container gesprochen.

Die Folien zum Vortrag sind hier zu finden:

https://github.com/HaikoHertes/slides/tree/master/AzureDaySuisse2020

Die Aufzeichnungen der beiden Sessions finden sich auf meinem YouTube-Kanal.

Hier einmal die Variante aus Zürich in Deutsch:

Und hier die Aufzeichnung in Englisch aus der West-Schweiz:

Viel Spaß damit!

21Jan/200

Kostenloses Azure Cloud Governance Webinar!

Die Cloud-Einführung richtig planen: ​Mit dem Azure Governance Workshop entsteht anhand Ihrer Anforderungen ein fundiertes Cloud-Konzept. Zur Prüfung der Wirtschaftlichkeit und der Einhaltung von Compliance-Regeln analysieren dabei Experten Ihre Anforderungen. Erfahren Sie im Detail, wie wir dabei vorgehen und Ihnen mit der Modernisierung Ihrer IT-Infrastruktur helfen können. Kostenlos zum Webinar anmelden:

https://bit.ly/37efMyL

19Jan/200

Global Azure Bootcamp in Leipzig

Vom 23. bis 25. April 2020 findet wieder das weltweite Global Azure Bootcamp statt. Im Rahmen des Azure Meetup Leipzig wollen wir am 24. April bei SoftwareOne / COMPAREX im Leipziger Norden ein Community-Event veranstalten. Details und Anmeldung dazu über Meetup:

https://www.meetup.com/de-DE/Azure-Meetup-Leipzig/events/268031527/

Außerdem gibt es einen Call for Papers / Call for Speakers:

https://sessionize.com/global-azure-bootcamp-2020-in-leipzig

Ich würde mich sowohl über reichlich Anmeldungen als auch rege Beteiligung als Speaker freuen!

11Jan/200

Azure & PowerShell – Das UsageDetails CSV nach Tags auswerten

Hinweis: Der Großteil des Artikels ist auch in meinem YouTube-Video zu diesem Thema enthalten:

Auf Grund vieler Nachfragen aus Community und Kunden habe ich mich dazu entschieden, dieses Thema etwas genauer zu beleuchten... Wenn man Azure in größerem Umfang nutzt, dann kommt schnell die Frage nach interner Kostenverrechnung ("Innerbetriebliche Leistungsverrechnung" / "Charge back") oder zumindest der Möglichkeit, die Kosten den jeweiligen Verursachern zuzuordnen und transparent darzustellen. Ein wesentliches Hilfsmittel dafür ist das Tagging von Ressourcen. Klar, man könnte die Ressourcen auch nach Kostenstellen getrennt in unterschiedlichen Subscriptions unterbringen, das stößt in der Praxis aber schnell an Grenzen und auf Probleme.

Hat man nun seine Ressourcen mit den entsprechenden Tags versehen, z.B. nach Besitzer ("Owner"), Kostenstelle ("Cost center") oder Abteilung ("Department"), dann tauchen diese Tags leider noch nicht in der regulären Rechnung auf.

Nun kann man sich aus dem Azure Portal (oder auch aus dem EA / Enterprise Portal oder via REST API) eine Detail-Aufstellung der Kosten herunterladen. Dazu muss man zu "Cost Management + Billing" / Billing-Scope auswählen / "Usage + Charges" / Monat wählen / Download-Button klicken / Kurz warten / " Usage Details Version 2" auswählen. Diese "Usage Details" enthalten dann auch die Tags. Allerdings: Selbst wenn man das CSV-File so umformatiert, dass Excel damit umgehen kann, ergibt sich noch ein Problem:

Die einzelnen Tags werden alle zusammen geworfen und in einer "Spalte" vermischt. Damit ist das Suchen oder Filtern nach einzelnen Tags schon recht schwer - eine bestimmte Kombination aus Tags ist damit unmöglich zu filtern. Dazu müsste man die Tags jeweils in einzelnen Spalten ablegen. Und da kommt PowerShell und dessen Möglichkeit, mit dem JSON-Format umzugehen, ins Spiel! Ich habe eine Script geschrieben, was die Spalte in die einzelnen Tags aufteilt. Dabei werden auch gleich Zahlen und Daten in das lokale Format überführt.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# Script to expand tags from the usage details CSV provided by Azure / Microsoft
# to filter usage by tags; also converts some numbers to local format
# Download CSV file by hand first!
 
 
# This is needed for the FileOpen Dialog	
Add-Type -AssemblyName System.Windows.Forms
$FileBrowser = New-Object System.Windows.Forms.OpenFileDialog -Property @{ 
    InitialDirectory = [Environment]::GetFolderPath('Desktop') 
    Filter = 'CSV-Files (*.csv)|*.csv'
}
$null = $FileBrowser.ShowDialog() # Just to open the dialog
 
If($FileBrowser.FileName -eq "")
{
    Write-Verbose "No file selected - aborting."
    Break    
}
 
$CSV = Import-Csv $FileBrowser.FileName -Delimiter ","
 
for ($i=0; $i -lt $CSV.length; $i++) 
{
    # Showing progress
    Write-Progress -Activity "Expanding in Progress..." -Status "$([math]::truncate($i / $($CSV.length) * 100))% complete..." -PercentComplete $($i / $($CSV.length) * 100)
 
    # Converting dates and numbers to local format
    $CSV[$i].Date = [datetime]::ParseExact( $CSV[$i].Date, 'MM/dd/yyyy', $null).ToString("d")
    $CSV[$i].BillingPeriodStartDate = [datetime]::ParseExact( $CSV[$i].BillingPeriodStartDate, 'MM/dd/yyyy', $null).ToString("d")
    $CSV[$i].BillingPeriodEndDate = [datetime]::ParseExact( $CSV[$i].BillingPeriodEndDate, 'MM/dd/yyyy', $null).ToString("d")
    $CSV[$i].Quantity = [float]$CSV[$i].Quantity
    $CSV[$i].EffectivePrice = [float]$CSV[$i].EffectivePrice
    $CSV[$i].Cost = [float]$CSV[$i].Cost
    $CSV[$i].UnitPrice = [float]$CSV[$i].UnitPrice
 
 
    # Expand Tags
    $Tags = "{ $($CSV[$i].Tags) }" | ConvertFrom-Json # We need to add some brackets here...
    if ($Tags -ne $null) {
         $Tags.PSObject.Properties | ForEach { 
            $TagName = "Tag-$($_.Name)" 
            Add-Member -InputObject $CSV[$i] $TagName $_.Value 
            # Adding the heading - what a rhyme (; ...
            if ($CSV[0].PSObject.Properties[$TagName] -eq $null) {
                Add-Member -InputObject $CSV[0] $TagName $null -Force
            }
        }
    }
 
}
 
# Saving as Excel-readable CSV
$CSV | Export-Csv "$([System.IO.Path]::GetDirectoryName($FileBrowser.FileName))\$([io.path]::GetFileNameWithoutExtension($FileBrowser.FileName))_expanded.csv" -NoTypeInformation -Delimiter ";"

Das Script findet ihr natürlich auch auf meinem GitHub Repo:

https://github.com/HaikoHertes/scripts/blob/master/Azure/Management/Expand-AzureTagsFromUsageDetails.ps1 

Das Resultat der Umwandlung wird dann in eine neue Excel-Datei im selben Folder wie die Originaldatei abgespeichert und kann dann problemlos in Excel geöffnet werden:

Wie man hier sieht sind die Tags nun in separaten Spalten untergebracht, so dass man sehr gut danach sortieren, darauf filtern oder mehr tun kann.

Viel Spaß beim Ausprobieren bzw. Benutzen!

4Dez/190

Altaro-Gewinnspiel zur Weihnachtszeit

This Holiday Season, Altaro is helping you out with your Holiday Shopping: they’re giving you the chance to WIN fantastic gifts that you can give to your loved ones! 

It’s no secret that Holiday shopping can be stressful and very time-consuming. So this year, whether you need a present for your partner, your children, your parents and in-laws, or your friends… Altaro’s got your back. Enter and share it on socials for a chance to WIN one of the Grand Prizes: a Holy Stone GPS FPV RC Drone HS100, an All-Access MasterClass pass, 

Lomography Lomo’Instant San Sebastian, an Echo Plus (Smart Home Hub), a Wii Console & Mario Kart for Wii, 2x Netflix Gift Cards of $100 each, and a JBL Clip Portable Waterproof Speaker. 

And guess what? For any eligible subscription they give you a guaranteed Amazon voucher! 

So, if you are a Hyper-V or VMware user, download Altaro’s VM Backup and follow the instructions you will find over here to WIN these exciting prizes! 

Good luck & Happy Holidays! 

veröffentlicht unter: Allgemein keine Kommentare