Azure

Praca z kilkoma subskrypcjami Azure w konsoli

Często zdarza się, że w danej organizacji jest więcej niż jedna subskrypcja Azure. Rozdział często następuje na subskrypcję per projekt, dział, czy środowisko. Szczególnie ten ostatni podział jest szczególnie ważny, między innymi że względów bezpieczeństwa i uprawnień.

Przy takim podejściu jednak pojawia się problem przełączania między subskrypcjami. Na portalu Azure jest to jeszcze mało nieprzyjemne. Jednak gdy przychodzi do obsługi Azure z poziomu konsoli, wymaga to więcej akcji.

Jak zmienianie subskrypcji wyglądało do tej pory

Najczęściej, żeby zmienić subskrypcje najpierw listuję wszystkie dostępne subskrypcje. Później wybieram interesującą mnie, kopiuję jej id i wklejam do odpowiedniego parametru w poleceniu zmieniającym subskrypcje. Całość sprowadza się do dwóch komend w Az Powershell:

 Get-AzSubscription
# Tutaj następuje zaznaczanie myszką Id subskrypcji (obym się nie pomylił) i skopiowanie go
Set-AzContext -SubscriptionId xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Takie operacje będą generować błędy i frustracje. Przez przypadek zaznaczy się jeden znak z id subskrypcji za mało, wybiorę nie tę subskrypcję którą chciałem itp. W momencie, w którym przełączeń między subskrypcjami wykonuje się nawet kilka razy dziennie, w skali miesiąca poświęconego czasu, błędów i frustracji jest niezliczenie wiele.

Rozwiązanie jest jednak bardzo proste i używane zapewne przez wszystkich wykonujących choćby proste polecenia w konsoli. Rozwiązaniem tym są aliasy. W Powershellu wpisując komendę listujacą pliki zapewne używasz polecenia ls. To nic innego jak właśnie alias do komendy Get-ChildItem.

Jak ustawić własne aliasy?

Wykonuje to polecenie New-Alias. Żeby jednak aliasy były ustawione globalnie dla wszystkich sesji Powershell-a należy zapisać je w pliku profile.ps1. Aby taki plik edytować należy w oknie Powershell wpisać:

notepad.exe $Profile
# lub jeżli używasz Visual Studio Code lub innego edytora tekstu:
code $Profile

Jeśli pliku nie ma, zostanie on stworzony.

Następnie w treści należy umieścić parę: funkcję z odpowiednią komendą lub komendami i alias do niej. W moim przypadku wygląda to następująco:

Function Set-AzSubscriptionBizspark { Set-AzContext -SubscriptionId xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx }

New-Alias azsubprod Set-AzSubscriptionBizspark

Takich par dodajemy oczywiście tyle ile mamy subskrypcji, do których dostawać chcemy się aliasami. Teraz, gdy tylko chcę wykonać jakieś polecenia na subskrypcji developerskiej wpisuję w cli polecenie: azsubdev. Duże usprawnienie i przyspieszenie pracy.

Protip

Jeśli boisz się, że przypadkowo wykonasz niezamierzone akcje na subskrypcji produkcyjnej możesz zabezpieczyć się przed taką niezamierzoną zmianą. Wystarczy, że funkcja przełączająca na subskrypcję produkcyjną będzie wyglądać tak:

Function Set-AzSubscriptionProd
{
    $title = 'Switch to prod subscription'
    $prompt = 'Do you really want to switch to prod Azure subscription?'
    $yes = New-Object System.Management.Automation.Host.ChoiceDescription '&Yes','Switches to prod subscription'
    $no = New-Object System.Management.Automation.Host.ChoiceDescription '&No','Stays on current subscription'
    $options = [System.Management.Automation.Host.ChoiceDescription[]] ($yes,$no)

    $choice = $host.ui.PromptForChoice($title,$prompt,$options,1)

    if ($choice -eq 0) {
        Set-AzContext -SubscriptionId xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    }
}

New-Alias azsubprod Set-AzSubscriptionProd

Zanim zmienisz subskrypcję na produkcyjną, Powershell zapyta Cię o potwierdzenie tej operacji. Zawsze to zabezpieczenie.

Zostaw odpowiedź

Twój adres email nie zostanie upubliczniony.* Pola wymagane *

This site uses Akismet to reduce spam. Learn how your comment data is processed.