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.