Agenda
- Aktywacja subskrypcji Azure for Students
- Azure Portal: subscription, resource group, resource, region
- Sprawdzenie kredytu i miejsc, w których widać koszty
- Azure Cloud Shell jako środowisko awaryjne
- Przygotowanie lokalnego systemu Linux: pakiety i narzędzia
- Instalacja Azure CLI zgodnie z dokumentacją Microsoft
- Logowanie, wylogowanie, device code, wybór subskrypcji
- Dozwolone regiony i wartości własne studenta (
<SUFFIX>,<REGION>) - Pierwsza Resource Group i pierwszy darmowy zasób: create -> observe -> delete
- Podstawowa kontrola kosztów i cleanup
- Raport z laboratorium
Wprowadzenie
Stan projektu
To pierwsze laboratorium. Projekt CloudNotes jeszcze nie istnieje w chmurze.
przed: brak środowiska, brak zasobów
po: skonfigurowany komputer + zalogowane Azure CLI + brak zasobów w Azure
To laboratorium jest też instrukcją przygotowania komputera na cały semestr. Jeżeli w przyszłości zmienisz komputer lub przeinstalujesz system, wróć do części B, C i D.
Co zrobisz na tym laboratorium
- Aktywujesz subskrypcję Azure for Students i poznasz Azure Portal.
- Sprawdzisz, gdzie widać kredyt i koszty.
- Zainstalujesz Azure CLI i narzędzia potrzebne w kolejnych tygodniach.
- Zalogujesz się do Azure z terminala.
- Utworzysz i usuniesz pierwsze zasoby według schematu create -> experiment -> observe -> delete.
Koszt laboratorium
0 USD. Tworzymy wyłącznie Resource Group i Network Security Group. Oba zasoby są bezpłatne. Mimo to na końcu wszystko usuwamy, bo tak będziemy postępować na każdych zajęciach.
Konwencje w poleceniach
- Polecenia są gotowe do skopiowania do terminala
bash. - Polecenia nie używają zmiennych powłoki. Każde polecenie zawiera pełne nazwy zasobów i wartości.
- Wartości, które musisz zastąpić własnymi, są zapisane WIELKIMI LITERAMI w nawiasach ostrych, np.
<SUBSCRIPTION_ID>,<REGION>. Placeholder zastępujesz w całości, razem z nawiasami ostrymi:--location <REGION>->--location swedencentral. - Jeżeli wartość wynika z wcześniejszego polecenia, instrukcja najpierw pokazuje polecenie, które ją wyświetla. Przepisujesz ją wtedy do kolejnego polecenia.
- Linia zaczynająca się od
$w bloku z wynikiem oznacza polecenie, a pozostałe linie to przykładowy wynik. W blokach poleceń do skopiowania nie ma znaku$.
Część A. Konto Azure i Azure Portal
Krok 1. Aktywacja Azure for Students
Cel
Uzyskać subskrypcję Azure, na której będziesz wykonywać wszystkie laboratoria, bez podawania karty płatniczej.
Wykonanie
- Otwórz stronę oferty: https://azure.microsoft.com/free/students
- Wybierz opcję rozpoczęcia korzystania z oferty (przycisk typu Start free lub Activate now).
- Zaloguj się kontem uczelnianym (adres e-mail w domenie uczelni). Jeśli uczelnia nie ma kont Microsoft dla studentów, możesz użyć prywatnego konta Microsoft, ale wtedy trzeba zweryfikować status studenta adresem uczelnianym lub dokumentem.
- Wypełnij formularz: kraj, dane kontaktowe, numer telefonu do weryfikacji.
- Zaakceptuj warunki oferty.
- Poczekaj na komunikat o utworzeniu subskrypcji. Zwykle trwa to kilka minut.
Najważniejsze informacje o ofercie Azure for Students (stan według dokumentacji Microsoft):
- 100 USD kredytu na 12 miesięcy,
- dostęp do wybranych usług bezpłatnych w określonych limitach,
- brak wymogu podania karty płatniczej,
- po wykorzystaniu kredytu lub po 12 miesiącach subskrypcja jest wyłączana, a usługi przestają działać,
- ofertę można odnowić po roku, jeśli nadal masz status studenta,
- jedna subskrypcja Azure for Students na osobę.
Na tym kursie nigdy nie przechodzisz na Pay-As-You-Go. Wszystkie laboratoria są zaprojektowane tak, żeby zmieściły się w kredycie studenckim.
Weryfikacja
- Otwórz https://portal.azure.com i zaloguj się tym samym kontem.
- W górnym polu wyszukiwania wpisz
Subscriptionsi otwórz usługę Subscriptions. - Na liście powinna być subskrypcja o nazwie Azure for Students ze statusem Active.
Co właśnie zrobiliśmy?
Subskrypcja jest jednostką rozliczeniową w Azure. Każdy zasób, który utworzysz, należy do dokładnie jednej subskrypcji, a jego koszt jest odliczany od kredytu tej subskrypcji. Subskrypcja jest też granicą uprawnień i limitów (quota).
Typowe problemy
| Problem | Rozwiązanie |
|---|---|
| Formularz nie akceptuje adresu uczelnianego. | Uczelnia może nie być rozpoznana automatycznie. Wybierz weryfikację dokumentem albo zgłoś problem prowadzącemu. |
| Komunikat, że masz już subskrypcję Azure for Students. | Oferta przysługuje raz. Zaloguj się kontem, którym aktywowałeś ją wcześniej, i sprawdź w portalu, czy jest aktywna. |
| Po aktywacji nie widać subskrypcji w portalu. | Sprawdź, czy jesteś zalogowany tym samym kontem. Kliknij ikonę konta w prawym górnym rogu i wybierz Switch directory, żeby sprawdzić inne katalogi (tenanty). |
| Portal prosi o kartę płatniczą. | To nie jest oferta Azure for Students, tylko inna oferta (np. Azure free account). Wróć na stronę z punktu 1. |
| Subskrypcja ma status Disabled. | Kredyt się skończył lub minęło 12 miesięcy. Zgłoś to prowadzącemu. Nie przechodź na Pay-As-You-Go. |
Krok 2. Orientacja w Azure Portal
Cel
Poznać podstawową hierarchię Azure: tenant, subscription, resource group, resource i region.
Wykonanie
- W Azure Portal kliknij ikonę konta w prawym górnym rogu. Zobaczysz nazwę katalogu (directory, czyli tenant). To jest instancja Microsoft Entra ID, w której istnieje Twoje konto, np. katalog uczelni.
- Otwórz Subscriptions i kliknij subskrypcję Azure for Students. Zwróć uwagę na:
- Subscription ID: unikalny identyfikator (GUID),
- Offer: typ oferty,
- Status,
- menu po lewej: Cost Management, Resource groups, Resources, Usage + quotas, Resource providers.
- Otwórz Resource groups (z menu subskrypcji albo przez wyszukiwarkę). Nowa subskrypcja zwykle nie ma żadnych grup lub ma grupy utworzone automatycznie przez usługi Azure.
- Kliknij Create w widoku Resource groups, ale nie twórz grupy. Zobacz tylko, że formularz wymaga: subskrypcji, nazwy i regionu. Zamknij formularz. Grupę utworzymy z Azure CLI.
Weryfikacja
Potrafisz odpowiedzieć na pytania:
- Jak nazywa się Twój katalog (tenant)?
- Jaki jest identyfikator Twojej subskrypcji?
- Ile Resource Groups jest obecnie w subskrypcji?
Co właśnie zrobiliśmy?
Hierarchia, której będziemy używać przez cały semestr:
Tenant (Microsoft Entra ID, katalog tożsamości)
-> Subscription (rozliczenia, limity, uprawnienia)
-> Resource Group (logiczny kontener, wspólny cykl życia)
-> Resource (VM, konto storage, baza danych...)
- Resource to pojedynczy element, za który zwykle płacisz.
- Resource Group grupuje zasoby, które razem tworzysz i razem usuwasz. Usunięcie grupy usuwa wszystkie zasoby w środku. To najważniejsze narzędzie cleanup na tym kursie.
- Region to lokalizacja data center. Resource Group też ma region, ale jest to tylko miejsce przechowywania jej metadanych. Zasoby w grupie mogą technicznie działać w innych regionach. Na tym kursie trzymamy wszystko w jednym regionie.
Typowe problemy
| Problem | Rozwiązanie |
|---|---|
| Portal jest po polsku, a instrukcja używa angielskich nazw. | Nazwy usług są podobne. Możesz przełączyć język: ikona koła zębatego (Settings) -> Language + region. Na kursie zalecamy język angielski, bo tak nazywa się usługi w dokumentacji i w CLI. |
| Menu lewe jest zwinięte. | Kliknij ikonę menu (trzy poziome kreski) w lewym górnym rogu. |
Krok 3. Gdzie sprawdzić kredyt i koszty
Cel
Od pierwszych zajęć wiedzieć, ile kredytu zostało i gdzie szukać informacji o kosztach.
Wykonanie
Miejsce 1: Education Hub w Azure Portal
- W wyszukiwarce portalu wpisz
Educationi otwórz Education. - Na stronie Overview zobaczysz informacje o subskrypcji Azure for Students: wykorzystanie kredytu i czas do odnowienia.
- Przycisk View cost details prowadzi do Cost Management.
Miejsce 2: Azure Sponsorships portal
- Otwórz https://www.microsoftazuresponsorships.com/balance
- Zaloguj się tym samym kontem.
- Strona Balance pokazuje wykorzystany i pozostały kredyt oraz datę wygaśnięcia.
- Strona Usage pokazuje, które usługi zużywały kredyt.
Miejsce 3: Cost Management
- W portalu otwórz subskrypcję Azure for Students.
- W menu po lewej wybierz Cost Management -> Cost analysis.
- Zobacz, czy widok pokazuje dane. W nowej subskrypcji koszty wynoszą 0.
Ważne ograniczenia Cost Management dla Azure for Students:
- Dokumentacja Cost Management wymienia ofertę Azure for Students na liście ofert nieobsługiwanych przez część funkcji. Widok może być pusty lub niekompletny.
- Nawet gdy dane są widoczne, pojawiają się z opóźnieniem, często kilkunastu godzin, a czasem do 72 godzin.
- Koszty w Cost Management są szacunkowe i nie uwzględniają kredytu.
Dlatego podstawowym źródłem informacji o kredycie są Education Hub i Azure Sponsorships portal.
Weryfikacja
Zapisz dla siebie:
- ile kredytu pozostało,
- kiedy kredyt wygasa.
Co właśnie zrobiliśmy?
Chmura jest usługą mierzoną (measured service, W01). Każdy działający zasób zużywa kredyt. Dane o kosztach pojawiają się z opóźnieniem, więc nie można polegać na tym, że zobaczysz koszt od razu. Jedyna pewna metoda kontroli kosztów to wiedzieć, co jest uruchomione, i usuwać to, czego nie potrzebujesz.
Typowe problemy
| Problem | Rozwiązanie |
|---|---|
| Cost analysis pokazuje błąd lub brak danych. | To zachowanie spodziewane dla nowej subskrypcji i oferty Azure for Students. Użyj Education Hub i Sponsorships portal. |
| Sponsorships portal nie pokazuje subskrypcji. | Upewnij się, że logujesz się tym samym kontem, którym aktywowałeś ofertę. Spróbuj okna prywatnego przeglądarki. |
Krok 4. Dozwolone regiony w portalu
Cel
Sprawdzić, w których regionach Twoja subskrypcja pozwala tworzyć zasoby.
Wykonanie
Subskrypcje Azure for Students mają przypisaną przez Microsoft politykę Azure Policy o nazwie Allowed resource deployment regions. Ogranicza ona tworzenie zasobów do kilku regionów. Lista może być różna dla różnych studentów.
- W wyszukiwarce portalu wpisz
Policyi otwórz Policy. - W menu po lewej wybierz Authoring -> Assignments.
- Znajdź przypisanie Allowed resource deployment regions i otwórz je.
- Przejdź do parametrów przypisania (Parameters lub View parameters). Parametr z listą dozwolonych lokalizacji zawiera nazwy regionów, np.
swedencentral,northeurope.
Weryfikacja
Zapisz listę dozwolonych regionów. W kroku 14 sprawdzisz ją ponownie z Azure CLI i wybierzesz region kursu.
Co właśnie zrobiliśmy?
Azure Policy to mechanizm, który wymusza reguły na zasobach w subskrypcji, np. dozwolone regiony, wymagane tagi, zakazane typy zasobów. Tutaj reguły ustawił Microsoft, żeby ograniczyć regiony dostępne w ofercie studenckiej. W firmach Azure Policy jest jednym z podstawowych narzędzi zarządzania.
Typowe problemy
| Problem | Rozwiązanie |
|---|---|
| Lista przypisań jest pusta. | Sprawdź filtr Scope na górze strony: powinna być wybrana subskrypcja Azure for Students. Jeśli nadal nic nie ma, subskrypcja może nie mieć ograniczenia regionów. Sprawdzisz to w kroku 14. |
Krok 5. Azure Cloud Shell
Cel
Poznać Cloud Shell, czyli terminal w przeglądarce z gotowym Azure CLI. To środowisko awaryjne, gdy lokalny komputer nie działa albo nie masz na nim uprawnień administratora.
Wykonanie
- W Azure Portal kliknij ikonę terminala (Cloud Shell) na górnym pasku, obok pola wyszukiwania.
- Przy pierwszym uruchomieniu wybierz Bash.
- W panelu Getting started wybierz No storage account required. Wybierz subskrypcję Azure for Students i kliknij Apply.
- Po chwili pojawi się terminal. Wykonaj:
az account show --output table
- Sprawdź wersję Azure CLI w Cloud Shell:
az version
Weryfikacja
Polecenie az account show wyświetla nazwę subskrypcji Azure for Students. Nie musiałeś się logować, bo Cloud Shell używa sesji z portalu.
Co właśnie zrobiliśmy?
Cloud Shell to maszyna tymczasowa zarządzana przez Microsoft. W trybie No storage account required (sesja efemeryczna) nie tworzy żadnych płatnych zasobów, ale pliki zapisane w katalogu domowym znikają po zakończeniu sesji. Sesja kończy się po zamknięciu okna albo po okresie bezczynności.
Cloud Shell jest wygodny, ale na kursie podstawowym środowiskiem jest Twój komputer z Linuksem. W kolejnych laboratoriach będziesz uruchamiać aplikację lokalnie, budować kontenery i edytować pliki, a to wygodniej robić na własnym komputerze.
Typowe problemy
| Problem | Rozwiązanie |
|---|---|
Błąd związany z rejestracją Microsoft.CloudShell. | Subskrypcja musi mieć zarejestrowanego dostawcę zasobów. Otwórz subskrypcję -> Settings -> Resource providers, wyszukaj Microsoft.CloudShell, zaznacz i kliknij Register. Po kilku minutach spróbuj ponownie. |
| Cloud Shell proponuje utworzenie konta storage. | Wybierz No storage account required. Konto storage generuje niewielkie koszty i nie jest nam potrzebne. |
Część B. Przygotowanie komputera z Linuksem
Ta część zakłada system z rodziny Debian-like: Ubuntu, Debian lub Linux Mint. Jeśli używasz innego systemu, zajrzyj do dodatku na końcu instrukcji.
Krok 6. Sprawdzenie systemu
Cel
Ustalić, jaki system i jaką architekturę procesora masz. Od tego zależy, które pakiety Azure CLI zostaną zainstalowane.
Wykonanie
Otwórz terminal i wykonaj:
cat /etc/os-release
uname -m
dpkg --print-architecture
sudo -v && echo "sudo OK"
Weryfikacja
Przykładowy wynik dla Ubuntu 24.04:
$ cat /etc/os-release
PRETTY_NAME="Ubuntu 24.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION_CODENAME=noble
UBUNTU_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
...
$ uname -m
x86_64
$ dpkg --print-architecture
amd64
$ sudo -v && echo "sudo OK"
sudo OK
Sprawdź w tabeli, czy Twój system jest obsługiwany przez pakiety Azure CLI z repozytorium Microsoft:
| System | Obsługa | Nazwa kodowa repozytorium |
|---|---|---|
| Ubuntu 22.04 | tak | jammy |
| Ubuntu 24.04 | tak | noble |
| Ubuntu 26.04 | tak | resolute |
| Debian 11 | tak | bullseye |
| Debian 12 | tak | bookworm |
| Debian 13 | brak pakietu w repozytorium, używamy bookworm | bookworm |
| Linux Mint 21.x / 22.x | tak, przez bazowe Ubuntu | jammy / noble |
Architektura amd64 (x86_64) i arm64 (aarch64) są obsługiwane.
Co właśnie zrobiliśmy?
Plik /etc/os-release jest standardowym źródłem informacji o dystrybucji. Pola VERSION_CODENAME i UBUNTU_CODENAME wskażą nam, z której gałęzi repozytorium Microsoft pobrać pakiet. Linux Mint ma własną nazwę kodową (np. wilma), ale w polu UBUNTU_CODENAME podaje nazwę Ubuntu, na którym bazuje.
Typowe problemy
| Problem | Rozwiązanie |
|---|---|
sudo: command not found lub user is not in the sudoers file. | Nie masz uprawnień administratora. Na komputerze w sali poproś prowadzącego o informację, czy Azure CLI jest już zainstalowane. Jeśli nie, wykonuj laboratorium w Cloud Shell (krok 5) i pomiń część B. |
| System to Fedora, Arch, macOS lub Windows. | Zajrzyj do dodatku na końcu instrukcji. |
Krok 7. Aktualizacja indeksu pakietów i instalacja narzędzi
Cel
Zainstalować narzędzia potrzebne w tym i kolejnych laboratoriach.
Wykonanie
Zaktualizuj indeks pakietów:
sudo apt-get update
Zainstaluj narzędzia podstawowe kursu:
sudo apt-get install -y curl git jq unzip openssh-client python3 python3-venv python3-pip
Zainstaluj pakiety wymagane przez oficjalną instrukcję instalacji Azure CLI:
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
Do czego służą te narzędzia:
| Narzędzie | Do czego | Od kiedy |
|---|---|---|
curl | pobieranie plików i testowanie endpointów HTTP | L01 |
git | pobieranie kodu projektu i checkpointów | L02 |
jq | przetwarzanie wyników JSON z Azure CLI | L01 |
unzip | rozpakowywanie paczek | L03 |
openssh-client | połączenie SSH z maszyną wirtualną | L02 |
python3, python3-venv, python3-pip | uruchomienie aplikacji CloudNotes lokalnie | L03 |
gnupg, ca-certificates, apt-transport-https, lsb-release | bezpieczne dodanie repozytorium Microsoft | L01 |
Docker zainstalujemy dopiero na L11. Nie jest potrzebny wcześniej.
Weryfikacja
curl --version | head -n 1
git --version
jq --version
unzip -v | head -n 1
ssh -V
python3 --version
python3 -m venv --help | head -n 1
Każde polecenie powinno wypisać wersję lub krótki opis, bez błędu command not found.
Co właśnie zrobiliśmy?
apt-get update pobiera aktualną listę pakietów z repozytoriów. Bez tego system może próbować pobrać nieistniejące już wersje. apt-get install -y instaluje pakiety bez pytania o potwierdzenie.
Typowe problemy
| Problem | Rozwiązanie |
|---|---|
E: Could not get lock /var/lib/dpkg/lock-frontend | W tle działa inna instalacja, np. automatyczne aktualizacje. Poczekaj kilka minut i spróbuj ponownie. Nie usuwaj pliku blokady. |
E: Unable to locate package apt-transport-https | W nowszych wersjach systemu pakiet może być niedostępny, bo jego funkcja jest wbudowana w apt. Wykonaj polecenie bez tego pakietu: sudo apt-get install -y ca-certificates curl gnupg lsb-release. |
Błędy Temporary failure resolving | Brak połączenia z Internetem lub problem z DNS. Sprawdź ping -c 3 archive.ubuntu.com. |
Krok 8. Instalacja Azure CLI
Cel
Zainstalować Azure CLI z oficjalnego repozytorium Microsoft, tak żeby później aktualizowało się razem z systemem.
Instrukcja jest zgodna z dokumentacją Microsoft Learn „Install the Azure CLI on Linux”, wariant apt, instalacja krok po kroku. Wybieramy wariant krok po kroku zamiast skryptu instalacyjnego, bo widać w nim, co dokładnie dzieje się w systemie, i łatwiej poprawić go dla Linux Mint i Debian 13.
Wykonanie
8.1. Klucz podpisujący Microsoft
sudo mkdir -p /etc/apt/keyrings
curl -sLS https://packages.microsoft.com/keys/microsoft.asc |
gpg --dearmor | sudo tee /etc/apt/keyrings/microsoft.gpg > /dev/null
sudo chmod go+r /etc/apt/keyrings/microsoft.gpg
System pobiera publiczny klucz Microsoft i zapisuje go w formacie, którego używa apt. Dzięki temu apt sprawdzi, że pakiety z repozytorium Microsoft są podpisane przez Microsoft.
8.2. Ustalenie nazwy kodowej dystrybucji i architektury
W kolejnym poleceniu wpiszesz dwie wartości, które odczytasz teraz:
<DIST_CODENAME>: nazwa kodowa wydania, z którego Microsoft publikuje pakiety, np.noble,<ARCH>: architektura pakietów, np.amd64alboarm64.
Wyświetl nazwy kodowe zapisane w systemie:
grep -E '^(UBUNTU_CODENAME|DEBIAN_CODENAME|VERSION_CODENAME)=' /etc/os-release
Wybierz <DIST_CODENAME> według zasady:
- Jeśli jest linia
UBUNTU_CODENAME, użyj jej wartości (Ubuntu i Linux Mint). - W przeciwnym razie użyj
DEBIAN_CODENAME, a gdy jej nie ma,VERSION_CODENAME(Debian). - Jeśli system to Debian 13 (
trixie), użyjbookworm.
Porównaj wynik z tabelą z kroku 6. Oficjalna instrukcja używa lsb_release -cs, ale ta metoda zwraca w Linux Mint nazwę kodową Minta (np. wilma), której nie ma w repozytorium Microsoft.
Wyświetl architekturę pakietów. Wynik to <ARCH>:
dpkg --print-architecture
Sprawdź, czy repozytorium Microsoft ma pakiety dla wybranej nazwy kodowej. Zastąp <DIST_CODENAME>, np. noble:
curl -fsI https://packages.microsoft.com/repos/azure-cli/dists/<DIST_CODENAME>/Release > /dev/null && echo "Repozytorium: OK" || echo "Brak repozytorium"
Jeżeli wynik to Brak repozytorium, użyj bookworm dla dystrybucji opartych na Debianie albo noble dla dystrybucji opartych na Ubuntu i sprawdź ponownie.
Zapisz obie wartości. Dla Ubuntu 24.04 na typowym laptopie są to noble i amd64.
8.3. Dodanie repozytorium Azure CLI
Zastąp <DIST_CODENAME> i <ARCH> wartościami z kroku 8.2. Przykład dla Ubuntu 24.04 na amd64: linie mają postać Suites: noble i Architectures: amd64.
echo "Types: deb
URIs: https://packages.microsoft.com/repos/azure-cli/
Suites: <DIST_CODENAME>
Components: main
Architectures: <ARCH>
Signed-by: /etc/apt/keyrings/microsoft.gpg" | sudo tee /etc/apt/sources.list.d/azure-cli.sources
Sprawdź zawartość pliku. Nie może w nim zostać żaden tekst w nawiasach ostrych:
cat /etc/apt/sources.list.d/azure-cli.sources
Polecenie echo ... | sudo tee tworzy plik /etc/apt/sources.list.d/azure-cli.sources, który mówi apt, skąd pobierać pakiet azure-cli i jakim kluczem sprawdzać podpis.
8.4. Instalacja
sudo apt-get update
sudo apt-get install -y azure-cli
Alternatywa: instalacja jednym poleceniem
Microsoft udostępnia też skrypt, który wykonuje kroki 8.1-8.4 automatycznie:
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
Używaj go tylko na Ubuntu lub Debianie z tabeli w kroku 6. Na Linux Mint i Debianie 13 skrypt może nie rozpoznać dystrybucji. Uruchamianie skryptów pobranych z Internetu z uprawnieniami sudo wymaga zaufania do ich źródła. Tutaj źródłem jest Microsoft, ale dobrą praktyką jest najpierw pobrać skrypt i przeczytać jego treść.
Weryfikacja
Sprawdź, z jakiego repozytorium pochodzi pakiet:
apt-cache policy azure-cli
W wyniku przy zainstalowanej wersji powinien być adres https://packages.microsoft.com/repos/azure-cli.
Przejdź do kroku 9.
Co właśnie zrobiliśmy?
Dodaliśmy do systemu zewnętrzne repozytorium pakietów. Dzięki temu Azure CLI będzie aktualizowane zwykłym apt-get upgrade, tak jak reszta systemu. To typowy sposób instalacji narzędzi dostawców chmury na Linuksie.
Typowe problemy
| Problem | Rozwiązanie |
|---|---|
E: Unable to locate package azure-cli | Repozytorium nie zostało dodane poprawnie. Sprawdź zawartość pliku: cat /etc/apt/sources.list.d/azure-cli.sources. Pola Suites i Architectures muszą zawierać wartości z kroku 8.2, np. noble i amd64, a nie teksty <DIST_CODENAME> i <ARCH>. Popraw wartości i powtórz 8.3. |
NO_PUBKEY lub The following signatures couldn't be verified | Klucz nie został zapisany. Powtórz krok 8.1 i sprawdź, że plik istnieje: ls -l /etc/apt/keyrings/microsoft.gpg. |
apt-get update zgłasza błąd 404 Not Found dla packages.microsoft.com | Nazwa kodowa nie istnieje w repozytorium. Wybierz bookworm (Debian) albo noble (Ubuntu, Linux Mint), sprawdź ją poleceniem curl z kroku 8.2 i powtórz 8.3. |
bash: syntax error near unexpected token lub No such file or directory przy poleceniu curl z kroku 8.2 | Placeholder <DIST_CODENAME> nie został zastąpiony. Bash traktuje znaki < i > jako przekierowanie wejścia i wyjścia. Wpisz samą nazwę kodową, bez nawiasów ostrych. |
Zainstalowała się bardzo stara wersja, np. 2.0.81 | Zainstalowałeś pakiet z repozytorium dystrybucji, nie Microsoft. Usuń go: sudo apt-get remove -y azure-cli, a następnie wykonaj ponownie kroki 8.1-8.4. |
| Błędy związane z proxy | Na sieci z proxy ustaw zmienne HTTP_PROXY i HTTPS_PROXY zgodnie z informacją administratora sieci. |
Krok 9. Weryfikacja i aktualizacja Azure CLI
Cel
Upewnić się, że Azure CLI działa i jest aktualne.
Wykonanie
az version
which az
Jeżeli w przyszłości będziesz chciał zaktualizować Azure CLI, użyj:
sudo apt-get update && sudo apt-get install --only-upgrade -y azure-cli
Możesz też użyć wbudowanego polecenia az upgrade.
Weryfikacja
Przykładowy wynik az version:
$ az version
{
"azure-cli": "2.90.0",
"azure-cli-core": "2.90.0",
"azure-cli-telemetry": "1.1.0",
"extensions": {}
}
$ which az
/usr/bin/az
Twoja wersja może być nowsza. Wersja powinna zaczynać się od 2. i nie powinna być starsza niż kilka miesięcy. Aktualny numer wersji podaje strona dokumentacji instalacji Azure CLI.
Co właśnie zrobiliśmy?
az to jedno narzędzie do zarządzania prawie wszystkimi usługami Azure. Polecenia mają strukturę:
az <grupa> [<podgrupa>] <akcja> --parametr wartość
Przykłady: az group create, az vm list, az storage account show. Pomoc dla każdego polecenia wyświetla --help:
az group --help
Typowe problemy
| Problem | Rozwiązanie |
|---|---|
az: command not found | Instalacja się nie udała. Wróć do kroku 8 i przeczytaj komunikaty błędów apt-get. |
az version wyświetla ostrzeżenie o dostępnej aktualizacji. | Wykonaj polecenie aktualizacji z tego kroku. |
Część C. Logowanie i wybór subskrypcji
Krok 10. Logowanie przez przeglądarkę
Cel
Połączyć Azure CLI z Twoim kontem Azure.
Wykonanie
az login
Co się dzieje:
- Azure CLI otwiera domyślną przeglądarkę ze stroną logowania Microsoft.
- Logujesz się kontem, którym aktywowałeś Azure for Students.
- Potwierdzasz logowanie drugim składnikiem (MFA). Microsoft wymaga MFA przy logowaniu użytkowników do Azure CLI.
- Przeglądarka wyświetla komunikat, że logowanie się udało, i można ją zamknąć.
- W terminalu pojawia się lista subskrypcji z numerami i pytanie o wybór subskrypcji. Jeśli masz tylko jedną subskrypcję, CLI wybierze ją automatycznie.
Przykład wyboru subskrypcji:
[Tenant and subscription selection]
No Subscription name Subscription ID Tenant
----- ------------------- ------------------------------------ -----------
[1] * Azure for Students 00000000-0000-0000-0000-000000000000 Uczelnia
Select a subscription and tenant (Type a number or Enter for no changes): 1
Wpisz numer subskrypcji Azure for Students i naciśnij Enter.
Weryfikacja
az account show --output table
W kolumnie Name powinno być Azure for Students, a w kolumnie State wartość Enabled.
Co właśnie zrobiliśmy?
Azure CLI uzyskało od Microsoft Entra ID token dostępowy dla Twojego konta i zapisało go lokalnie w katalogu ~/.azure. Kolejne polecenia az używają tego tokenu. Token ma ograniczony czas ważności i jest automatycznie odświeżany.
Katalog ~/.azure zawiera dane pozwalające działać w Twoim imieniu. Nie kopiuj go, nie udostępniaj i nie umieszczaj w repozytorium Git.
Typowe problemy
| Problem | Rozwiązanie |
|---|---|
Przeglądarka się nie otwiera, a CLI wyświetla adres https://microsoft.com/devicelogin i kod. | CLI automatycznie przełączyło się na device code. Postępuj jak w kroku 11. |
Edge wyświetla „The connection for this site isn’t secure” na adresie localhost. | Otwórz edge://net-internals/#hsts, w sekcji Delete domain security policies wpisz localhost i kliknij Delete. Albo użyj device code (krok 11). |
AADSTS50076 lub komunikat o wymaganym MFA. | Skonfiguruj drugi składnik uwierzytelniania na koncie (np. Microsoft Authenticator) i zaloguj się ponownie. |
Błąd Authentication failed against tenant przy wielu katalogach. | Zaloguj się, wskazując tenant: az login --tenant <TENANT_ID>. Identyfikator katalogu znajdziesz w portalu: ikona konta -> Switch directory. Jeśli CLI zgłasza konflikt z wyborem subskrypcji, najpierw wykonaj az config set core.login_experience_v2=off. |
| Lista subskrypcji jest pusta. | Zalogowałeś się innym kontem niż to, na którym jest Azure for Students. Wykonaj az logout i zaloguj się ponownie właściwym kontem. |
Krok 11. Logowanie przez device code
Cel
Umieć zalogować się, gdy przeglądarka na tym komputerze nie działa, np. w sesji SSH, na serwerze bez środowiska graficznego albo w kontenerze.
Wykonanie
az login --use-device-code
- Terminal wyświetli komunikat z adresem
https://microsoft.com/devicelogini kodem, np.ABCD1234. - Otwórz ten adres w dowolnej przeglądarce, także na innym urządzeniu, np. na telefonie.
- Wpisz kod z terminala.
- Zaloguj się i potwierdź MFA.
- Wróć do terminala i wybierz subskrypcję.
Weryfikacja
az account show --query "{subscription:name, user:user.name, state:state}" --output table
Co właśnie zrobiliśmy?
Device code flow rozdziela logowanie na dwa urządzenia: urządzenie bez przeglądarki (terminal) i urządzenie z przeglądarką. To standardowy mechanizm OAuth 2.0 używany np. przez telewizory i narzędzia wiersza poleceń.
Kod jest ważny kilka minut. Nigdy nie wpisuj kodu, którego nie wygenerowałeś sam, np. otrzymanego mailem. To znana technika phishingu.
Typowe problemy
| Problem | Rozwiązanie |
|---|---|
AADSTS50199, AADSTS53003 lub komunikat o zasadach dostępu warunkowego (Conditional Access). | Tenant uczelni może blokować device code. Użyj logowania przez przeglądarkę (krok 10) lub Cloud Shell. |
| Kod wygasł. | Uruchom az login --use-device-code ponownie. |
Krok 12. Wylogowanie i ponowne logowanie
Cel
Sprawdzić, jak wygląda stan niezalogowany, i zobaczyć, że dane logowania są przechowywane lokalnie.
Wykonanie
az logout
az account show
Ostatnie polecenie powinno zakończyć się błędem z prośbą o zalogowanie, np. Please run 'az login' to setup account.
Zaloguj się ponownie wybraną metodą:
az login
Weryfikacja
az account show --output table
Polecenie znowu pokazuje subskrypcję Azure for Students.
Co właśnie zrobiliśmy?
az logout usuwa z komputera token dla bieżącego konta. Na współdzielonym komputerze w sali laboratoryjnej wyloguj się na koniec zajęć. Inaczej następna osoba przy tym komputerze będzie mogła tworzyć zasoby na Twój kredyt.
Typowe problemy
| Problem | Rozwiązanie |
|---|---|
Po az logout polecenie az account show nadal pokazuje konto. | Byłeś zalogowany na kilka kont. Użyj az account clear, żeby usunąć wszystkie zapisane konta, i zaloguj się ponownie. |
Krok 13. Lista subskrypcji i wybór aktywnej subskrypcji
Cel
Upewnić się, że wszystkie kolejne polecenia trafiają do subskrypcji Azure for Students. To ważne, jeśli masz dostęp do kilku subskrypcji, np. z pracy lub innego przedmiotu.
Wykonanie
Wyświetl wszystkie dostępne subskrypcje:
az account list \
--query "[].{name:name, id:id, state:state, isDefault:isDefault}" --output table
Ustaw subskrypcję Azure for Students jako aktywną. Zastąp <SUBSCRIPTION_ID> identyfikatorem z kolumny Id:
az account set --subscription "<SUBSCRIPTION_ID>"
Sprawdź bieżący kontekst:
az account show --query "{subscription:name, id:id, tenant:tenantId, user:user.name, state:state}" --output table
Sprawdź typ oferty i limit wydatków subskrypcji. Polecenie wymaga identyfikatora subskrypcji. Wyświetl go:
az account show --query id --output tsv
Skopiuj wynik i wstaw go w miejsce <SUBSCRIPTION_ID>. To ta sama wartość, której użyłeś w az account set:
az rest --method get --url "https://management.azure.com/subscriptions/<SUBSCRIPTION_ID>?api-version=2022-12-01" --query "{quotaId:subscriptionPolicies.quotaId, spendingLimit:subscriptionPolicies.spendingLimit}" --output table
Weryfikacja
az account showpokazujeAzure for Studentsi stanEnabled.- Kolumna
QuotaIdzawiera tekstAzureForStudents. - Kolumna
SpendingLimitma wartośćOn.
Co właśnie zrobiliśmy?
Azure CLI zawsze działa w kontekście jednej aktywnej subskrypcji. Polecenie wykonane w złej subskrypcji utworzy zasób tam, gdzie się go nie spodziewasz, i obciąży inny budżet. Przed każdym laboratorium warto wykonać az account show.
Ostatnie polecenie wywołało bezpośrednio API Azure Resource Manager. Wszystkie narzędzia Azure (portal, CLI, IaC) korzystają z tego samego API. spendingLimit: On oznacza, że subskrypcja zostanie wyłączona po wykorzystaniu kredytu zamiast generować rachunek.
Typowe problemy
| Problem | Rozwiązanie |
|---|---|
The subscription of '...' doesn't exist in cloud 'AzureCloud'. | Identyfikator jest błędny lub należy do innego konta. Skopiuj go ponownie z az account list. |
| Brak subskrypcji Azure for Students na liście. | Jesteś zalogowany innym kontem lub w innym tenancie. Wykonaj az logout i zaloguj się właściwym kontem. |
Polecenie az rest zwraca InvalidSubscriptionId lub SubscriptionNotFound. | W adresie został tekst <SUBSCRIPTION_ID> albo identyfikator jest niepełny. Skopiuj go ponownie z az account show --query id --output tsv. |
Polecenie az rest zwraca inny błąd. | Nie jest wymagane do dalszej pracy. Sprawdź typ oferty w portalu: subskrypcja -> Overview -> Offer. |
Część D. Konfiguracja kursu
Krok 14. Dozwolone regiony i wybór regionu kursu
Cel
Wybrać jeden region, w którym będziesz tworzyć zasoby przez cały semestr.
Wykonanie
Wyświetl dozwolone regiony z przypisania Azure Policy:
az policy assignment list --disable-scope-strict-match --output json |
jq -r '.[]
| select((.displayName // "") | test("region|location"; "i"))
| .parameters[]?.value[]?'
Wyświetl pełną listę regionów Azure z nazwami czytelnymi dla człowieka:
az account list-locations --query "[?metadata.regionType=='Physical'].{name:name, displayName:displayName, geography:metadata.geographyGroup}" --output table
Wybierz region kursu według zasad. Od tej chwili w instrukcjach będzie on oznaczany placeholderem <REGION>:
- Region musi być na liście dozwolonych regionów Twojej subskrypcji.
- Jeśli prowadzący wskazał preferowany region kursu i jest on na Twojej liście, wybierz go.
- W przeciwnym razie wybierz region w Europie, najbliżej uczelni.
- Jeśli na liście nie ma regionu w Europie, wybierz dowolny z listy i poinformuj prowadzącego.
Używaj nazwy technicznej regionu, pisanej małymi literami bez spacji, np. swedencentral, a nie Sweden Central.
Zapisz wybrany region w swoich notatkach. W kroku 15 sprawdzisz, czy nazwa jest poprawna.
Weryfikacja
Pierwsze polecenie wypisuje kilka nazw regionów, po jednej w linii, np.:
swedencentral
northeurope
francecentral
uksouth
polandcentral
Jeśli nie wypisuje nic, subskrypcja może nie mieć ograniczenia regionów albo przypisanie ma inną nazwę. Wtedy sprawdź listę w portalu (krok 4). Ostateczną weryfikacją regionu będzie utworzenie zasobu w kroku 18.
Co właśnie zrobiliśmy?
Azure ma dziesiątki regionów na świecie. Wybór regionu wpływa na opóźnienia, dostępność usług, ceny i miejsce przechowywania danych (data residency). Temat rozwiniemy na W02. Na kursie trzymamy wszystkie zasoby w jednym regionie, bo:
- unikamy kosztów przesyłania danych między regionami,
- unikamy błędów wynikających z tego, że usługa nie jest dostępna w danym regionie,
- łatwiej znaleźć zasoby i je usunąć.
Typowe problemy
| Problem | Rozwiązanie |
|---|---|
jq: command not found | Zainstaluj jq (krok 7). |
jq: error ... Cannot iterate over null | Wynik ma inną strukturę niż oczekiwana. Sprawdź listę regionów w portalu (krok 4). |
| Lista zawiera tylko regiony poza Europą. | To zależy od Microsoft i nie da się tego zmienić. Wybierz region z listy i poinformuj prowadzącego. Wszystkie laboratoria będą działać, ale opóźnienia mogą być nieco większe. |
Krok 15. Wartości własne studenta: <SUFFIX> i <REGION>
Cel
Ustalić dwie wartości, których będziesz używać przez cały semestr, i zapisać je dla siebie, np. w notatkach. Polecenia w kolejnych instrukcjach będą je zawierać jako placeholdery <SUFFIX> i <REGION>.
Wykonanie
<REGION> wybrałeś w kroku 14, np. swedencentral.
Wymyśl <SUFFIX>:
- 4-10 znaków,
- tylko małe litery
a-zi cyfry, - zaczyna się od litery,
- np. pierwsza litera imienia, trzy litery nazwiska i dwie cyfry:
jkow42.
<SUFFIX> będzie częścią nazw zasobów, które muszą być unikalne globalnie, np. konta storage stcloudnotes<SUFFIX> albo aplikacji app-cloudnotes-<SUFFIX>. Dlatego dodaj cyfry, żeby zmniejszyć ryzyko kolizji z inną osobą. Nazwy Resource Groups są unikalne tylko w obrębie Twojej subskrypcji, więc nie zawierają sufiksu, np. rg-lab01, rg-cloudnotes.
Zapisz obie wartości w notatkach, np.:
<SUFFIX> = jkow42
<REGION> = swedencentral
Jak używać placeholderów w kolejnych poleceniach. W instrukcjach wartości własne są zapisane wielkimi literami w nawiasach ostrych. Przed uruchomieniem polecenia zastępujesz cały placeholder, razem z nawiasami ostrymi, swoją wartością:
--location <REGION> -> --location swedencentral
--name app-cloudnotes-<SUFFIX> -> --name app-cloudnotes-jkow42
Najwygodniej skopiować polecenie do edytora tekstu, zamienić placeholdery i dopiero wtedy wkleić je do terminala.
Weryfikacja
Sprawdź, czy <SUFFIX> spełnia zasady. Zastąp <SUFFIX> swoją wartością, np. echo "jkow42" | ...:
echo "<SUFFIX>" | grep -Ex '[a-z][a-z0-9]{3,9}' && echo "SUFFIX poprawny" || echo "SUFFIX niepoprawny"
Sprawdź, czy <REGION> jest poprawną nazwą techniczną regionu. Zastąp <REGION> swoją wartością:
az account list-locations --query "[?name=='<REGION>'].displayName" --output tsv
Pierwsze polecenie powinno wypisać Twój sufiks i SUFFIX poprawny. Drugie powinno wypisać czytelną nazwę regionu, np. Sweden Central. Pusty wynik oznacza literówkę albo pozostawiony placeholder.
Co właśnie zrobiliśmy?
Ustaliliśmy dwie wartości, które odróżniają Twoje zasoby od zasobów innych studentów i wskazują, gdzie będą działać. Polecenia w instrukcjach są zapisane w pełnej postaci, z nazwami zasobów wpisanymi wprost. Dzięki temu każde polecenie można przeczytać i zrozumieć bez znajomości wcześniejszych kroków, a w historii terminala widać dokładnie, co zostało wykonane. Wartości stałe dla wszystkich studentów są wpisane wprost, a różne dla każdego są oznaczone placeholderem.
Typowe problemy
| Problem | Rozwiązanie |
|---|---|
| „SUFFIX niepoprawny”. | Wybierz wartość zgodną z zasadami: zaczyna się od litery, 4-10 znaków, tylko małe litery i cyfry. Bez wielkich liter, myślników i polskich znaków. |
bash: REGION: No such file or directory albo bash: syntax error near unexpected token 'newline'. | Placeholder nie został zastąpiony albo zostały nawiasy ostre, np. <swedencentral>. Bash traktuje < i > jako przekierowanie wejścia i wyjścia. Wpisz samą wartość: swedencentral. |
az account list-locations zwraca pusty wynik. | Nazwa regionu ma literówkę, wielkie litery lub spację. Użyj nazwy z kolumny Name z kroku 14, np. swedencentral. |
| Zgubiłeś zapisane wartości. | <REGION> odczytasz z listy dozwolonych regionów (krok 14). <SUFFIX> odczytasz z nazw już utworzonych zasobów: az resource list --query "[].name" --output tsv. |
Krok 16. Konfiguracja Git i pobranie kodu projektu
Cel
Przygotować git i pobrać kod projektu CloudNotes, z którego będziemy korzystać od L02.
Wykonanie
Zastąp wartości swoimi danymi:
git config --global user.name "<IMIE_I_NAZWISKO>"
git config --global user.email "<ADRES_EMAIL>"
git config --global init.defaultBranch main
Pobierz kod projektu do katalogu ~/cloudnotes. Wszystkie kolejne instrukcje zakładają właśnie tę lokalizację:
git clone https://github.com/michuhu/cloudnotes.git ~/cloudnotes
Weryfikacja
git config --global --list
ls ~/cloudnotes
Lista powinna zawierać między innymi katalogi src, function i checkpoints oraz plik README.md.
Co właśnie zrobiliśmy?
Git będzie potrzebny do pobierania kodu CloudNotes i jego aktualizacji. Na L12 użyjemy go też do przechowywania definicji infrastruktury w repozytorium.
Kod aplikacji jest jeden przez cały semestr. Na kolejnych zajęciach będziemy zmieniać przede wszystkim infrastrukturę i konfigurację, a nie kod. Jeżeli prowadzący opublikuje poprawki, pobierzesz je poleceniem:
git -C ~/cloudnotes pull
Typowe problemy
| Problem | Rozwiązanie |
|---|---|
| Nie chcesz podawać prywatnego adresu e-mail. | Możesz użyć adresu uczelnianego. |
fatal: destination path '/home/.../cloudnotes' already exists | Repozytorium jest już pobrane. Zaktualizuj je poleceniem git -C ~/cloudnotes pull. |
Could not resolve host: github.com | Brak połączenia z Internetem albo problem z DNS. Sprawdź curl -I https://github.com. |
Część E. Pierwsze zasoby: create -> observe -> delete
Krok 17. Utworzenie Resource Group
Cel
Utworzyć pierwszą Resource Group z tagami kursu.
Wykonanie
Upewnij się, że działasz w dobrej subskrypcji:
az account show --query name --output tsv
Utwórz grupę. Zastąp <REGION> regionem wybranym w kroku 14, np. --location swedencentral:
az group create --name rg-lab01 --location <REGION> \
--tags course=cloud-services lab=l01
Weryfikacja
az group show --name rg-lab01 --output table
az group list --query "[].{name:name, location:location, state:properties.provisioningState}" --output table
az group show --name rg-lab01 --query tags
Grupa powinna mieć stan Succeeded, region <REGION> i dwa tagi: course i lab.
Co właśnie zrobiliśmy?
Resource Group to kontener, który sam nic nie kosztuje. Nazwa rg-lab01 mówi, że grupa jest tymczasowa i należy do L01. Tagi to pary klucz-wartość, dzięki którym można wyszukiwać zasoby i analizować koszty, np. „ile kosztowały wszystkie zasoby z tagiem course=cloud-services”.
Konwencja nazw na kursie:
| Rodzaj | Wzorzec |
|---|---|
| zasoby tymczasowe laboratorium | rg-labNN, np. rg-lab02 |
| zasoby projektu CloudNotes | rg-cloudnotes |
Każda Resource Group kursu ma tagi course=cloud-services i lab=lNN. Nazwy grup nie zawierają <SUFFIX>, bo muszą być unikalne tylko w Twojej subskrypcji. <SUFFIX> pojawi się w nazwach zasobów, które muszą być unikalne globalnie, np. kont storage.
Typowe problemy
| Problem | Rozwiązanie |
|---|---|
RequestDisallowedByAzure lub RequestDisallowedByPolicy | Region jest zablokowany przez politykę subskrypcji. Wróć do kroku 14, wybierz region z listy dozwolonych, popraw go w notatkach i powtórz polecenie z nowym regionem. |
bash: REGION: No such file or directory | Placeholder <REGION> nie został zastąpiony. Bash traktuje < jako przekierowanie wejścia z pliku REGION. Wpisz nazwę regionu bez nawiasów ostrych, np. --location swedencentral. |
argument --location/-l: expected one argument | Po --location nie ma wartości. Wpisz nazwę regionu. |
The provided location '...' is not available | Literówka w nazwie regionu. Sprawdź ją poleceniem z kroku 15. |
Krok 18. Pierwszy zasób w grupie
Cel
Utworzyć darmowy zasób w grupie, żeby zobaczyć, jak zasoby należą do Resource Group, i żeby sprawdzić, że wybrany region pozwala tworzyć zasoby.
Wykonanie
Utworzymy Network Security Group (NSG), czyli zestaw reguł filtrujących ruch sieciowy. Sam NSG jest bezpłatny. Na L02 użyjemy NSG do ochrony maszyny wirtualnej. Zastąp <REGION> tym samym regionem co w kroku 17.
az network nsg create --resource-group rg-lab01 \
--name nsg-lab01 --location <REGION>
Wyświetl zasoby w grupie:
az resource list --resource-group rg-lab01 \\
--query "[].{name:name, type:type, location:location}" --output table
Wyświetl domyślne reguły NSG:
az network nsg rule list --resource-group rg-lab01 --nsg-name nsg-lab01 --include-default --query "[].{name:name, direction:direction, access:access, priority:priority}" --output table
Weryfikacja
az resource list pokazuje jeden zasób typu Microsoft.Network/networkSecurityGroups w Twoim regionie <REGION>. Lista reguł zawiera domyślne reguły, np. DenyAllInBound z priorytetem 65500.
Co właśnie zrobiliśmy?
- Zasób ma typ w formacie
Dostawca/typ, np.Microsoft.Network/networkSecurityGroups.Microsoft.Networkto resource provider, czyli usługa Azure odpowiedzialna za dany rodzaj zasobów. - Udało się utworzyć zasób w regionie
<REGION>, więc region jest dozwolony w Twojej subskrypcji. - Domyślne reguły NSG blokują cały ruch przychodzący z Internetu. Wrócimy do tego na L02.
Typowe problemy
| Problem | Rozwiązanie |
|---|---|
MissingSubscriptionRegistration dla Microsoft.Network | Zarejestruj dostawcę zasobów: az provider register --namespace Microsoft.Network --wait, a potem powtórz polecenie tworzące NSG. |
RequestDisallowedByAzure | Region jest niedozwolony. Postępuj jak w kroku 17: usuń grupę (az group delete --name rg-lab01 --yes), wybierz inny region z listy dozwolonych, zapisz go w notatkach i zacznij od kroku 17. |
Krok 19. Obserwacja w Azure Portal
Cel
Zobaczyć te same zasoby w portalu i poznać najważniejsze widoki Resource Group.
Wykonanie
- W portalu otwórz Resource groups i kliknij
rg-lab01. Jeśli jej nie widać, odśwież widok. - Na stronie Overview zobacz:
- listę zasobów w grupie (
nsg-lab01), - subskrypcję i region,
- tagi.
- listę zasobów w grupie (
- Otwórz Activity log. Znajdziesz tam operacje utworzenia grupy i NSG, wraz z informacją, kto je wykonał.
- Kliknij
nsg-lab01i zobacz Inbound security rules oraz Outbound security rules. To te same reguły, które wyświetliło CLI. - Wróć do grupy i otwórz Cost Management -> Cost analysis w menu grupy. Koszt powinien wynosić 0 lub widok może być niedostępny (krok 3).
Weryfikacja
W portalu widzisz tę samą grupę, ten sam zasób i te same tagi, co w CLI.
Co właśnie zrobiliśmy?
Portal i CLI to dwa interfejsy do tego samego API (Azure Resource Manager). Zasób utworzony w CLI jest od razu widoczny w portalu i odwrotnie. Activity log pokazuje, kto i kiedy wykonał operację zarządczą. To podstawowe źródło informacji, gdy trzeba ustalić, kto zmienił konfigurację.
Typowe problemy
| Problem | Rozwiązanie |
|---|---|
| Grupy nie ma na liście. | Sprawdź filtr subskrypcji na górze listy. Upewnij się, że w portalu jesteś w tym samym katalogu (tenant) co w CLI. |
| Activity log jest pusty. | Wpisy pojawiają się z opóźnieniem do kilku minut. Sprawdź filtr Timespan. |
Krok 20. Usunięcie Resource Group
Cel
Usunąć wszystkie zasoby laboratorium jednym poleceniem i sprawdzić, że nic nie zostało.
Wykonanie
az group delete --name rg-lab01 --yes --no-wait
az group wait --name rg-lab01 --deleted
Weryfikacja
az group exists --name rg-lab01
Wynik powinien być false.
az resource list --tag lab=l01 --output table
Wynik powinien być pusty.
W portalu odśwież Resource groups. Grupy rg-lab01 nie ma na liście.
Co właśnie zrobiliśmy?
az group deleteusuwa grupę i wszystkie zasoby w środku. NSG zniknął razem z grupą.--yespomija pytanie o potwierdzenie.--no-waitzwraca terminal od razu, a usuwanie trwa w tle.az group wait --deletedczeka, aż usuwanie się zakończy.
To podstawowy wzorzec cleanup na tym kursie. Operacji nie da się cofnąć. Przed usunięciem zawsze sprawdź nazwę grupy.
Typowe problemy
| Problem | Rozwiązanie |
|---|---|
az group exists zwraca true zaraz po delete. | Usuwanie trwa. Uruchom az group wait --name rg-lab01 --deleted i sprawdź ponownie. |
Błąd ResourceGroupNotFound. | Grupa już jest usunięta. To poprawny stan. |
Część F. Kontrola kosztów od pierwszych zajęć
Krok 21. Zasady kontroli kosztów na kursie
Cel
Znać podstawowe zasady, które chronią kredyt Azure for Students przez cały semestr.
Wykonanie
Przeczytaj zasady i wykonaj sprawdzenie na końcu kroku.
Zasada 1. Wiedz, co jest uruchomione. Listę wszystkich Resource Groups wyświetlisz poleceniem:
az group list --query "[].{name:name, location:location, tags:tags}" --output table
A wszystkie zasoby w subskrypcji:
az resource list --query "[].{name:name, type:type, group:resourceGroup}" --output table
Zasada 2. Usuwaj zasoby zaraz po laboratorium. Każde laboratorium kończy się sekcją Cleanup. Wykonuj ją zawsze, także gdy nie skończyłeś wszystkich kroków.
Zasada 3. Zatrzymanie to nie zawsze to samo co brak kosztów. Na L02 zobaczysz, że zatrzymana maszyna wirtualna może nadal generować koszty, jeśli nie zostanie zwolniona (deallocate), a jej dysk kosztuje nawet wtedy. Najpewniejszym sposobem zatrzymania kosztów jest usunięcie Resource Group.
Zasada 4. Sprawdzaj kredyt co tydzień. Education Hub lub Azure Sponsorships portal (krok 3).
Zasada 5. Nie przechodź na Pay-As-You-Go. Jeśli portal proponuje upgrade subskrypcji, nie akceptuj. Jeśli kredyt się kończy, zgłoś to prowadzącemu.
Zasada 6. Nie zgaduj ceny, sprawdź ją. Kalkulator cen Azure: https://azure.microsoft.com/pricing/calculator
Weryfikacja
Uruchom oba polecenia z Zasady 1. Grupa rg-lab01 nie powinna się pojawić. Mogą być widoczne grupy utworzone automatycznie przez Azure, np. NetworkWatcherRG. Nie usuwaj ich, jeśli nie wiesz, do czego służą, i nie ma w nich płatnych zasobów.
Co właśnie zrobiliśmy?
W chmurze koszt wynika bezpośrednio z decyzji inżyniera. Zapomniany zasób nie zgłasza się sam i działa, dopóki nie zostanie usunięty albo nie skończy się kredyt. Wtedy subskrypcja jest wyłączana, a zasoby przestają działać.
Typowe problemy
| Problem | Rozwiązanie |
|---|---|
| Na liście jest grupa, której nie tworzyłeś. | Sprawdź jej zawartość: az resource list --resource-group <NAZWA_GRUPY> --output table. Grupy tworzone przez Azure automatycznie, np. NetworkWatcherRG, zwykle nie zawierają płatnych zasobów. W razie wątpliwości zapytaj prowadzącego. |
Weryfikacja końcowa
Uruchom poniższe polecenie. Generuje ono raport ~/l01-report.txt, który oddajesz po zajęciach. Przed uruchomieniem zastąp <SUFFIX> i <REGION> w liniach echo swoimi wartościami, np. echo "SUFFIX: jkow42":
{
echo "L01 report"
echo "SUFFIX: <SUFFIX>"
echo "REGION: <REGION>"
date -u +%Y-%m-%dT%H:%M:%SZ
grep PRETTY_NAME /etc/os-release
echo "azure-cli:"
az version --query '"azure-cli"' --output tsv
az account show --query "{subscription:name, state:state, user:user.name}" -o table
echo "rg-lab01 exists:"
az group exists --name rg-lab01
az group list --query "[].{name:name, location:location}" -o table
} > ~/l01-report.txt
Wyświetl raport:
cat ~/l01-report.txt
Sprawdź w raporcie:
- Linie
SUFFIXiREGIONzawierają Twoje wartości, a nie teksty w nawiasach ostrych. - Wersja Azure CLI zaczyna się od
2.. - Subskrypcja to
Azure for Studentsw stanieEnabled. - Pod linią
rg-lab01 exists:jest wartośćfalse. - Na liście grup nie ma grup z tego laboratorium.
Dodatkowo potwierdź, że:
- wiesz, ile kredytu zostało na Twojej subskrypcji,
- potrafisz uruchomić Cloud Shell,
- masz zapisane w notatkach swoje wartości
<SUFFIX>i<REGION>.
Co powinieneś rozumieć po laboratorium
- Czym są tenant, subscription, resource group, resource i region oraz jak są powiązane.
- Że każdy zasób należy do subskrypcji, a jego koszt jest pobierany z kredytu subskrypcji.
- Że usunięcie Resource Group usuwa wszystkie zasoby w środku i nie da się tego cofnąć.
- Że Azure Portal i Azure CLI korzystają z tego samego API i pokazują ten sam stan.
- Że Azure CLI działa zawsze w kontekście jednej aktywnej subskrypcji i trzeba to sprawdzać.
- Że subskrypcja Azure for Students ma ograniczoną listę dozwolonych regionów.
- Że dane o kosztach pojawiają się z opóźnieniem, więc kontrola kosztów polega na świadomym tworzeniu i usuwaniu zasobów.
- Kiedy użyć logowania przez przeglądarkę, a kiedy device code.
- Dlaczego trzeba się wylogować na współdzielonym komputerze.
Cleanup
Wszystkie zasoby tego laboratorium powinny już być usunięte w kroku 20. Sprawdź to i w razie potrzeby usuń pozostałości:
az group exists --name rg-lab01
Jeśli wynik to true:
az group delete --name rg-lab01 --yes
Sprawdź, czy nie zostały inne grupy z tagiem tego laboratorium, np. utworzone podczas eksploracji portalu:
az group list --tag lab=l01 --query "[].name" --output tsv
Jeśli polecenie wypisze nazwy grup, usuń każdą z nich, zastępując <NAZWA_GRUPY>:
az group delete --name "<NAZWA_GRUPY>" --yes
Jeśli podczas eksploracji portalu utworzyłeś zasoby bez tagów, znajdź je na liście:
az group list --query "[].{name:name, location:location}" --output table
Nie usuwaj instalacji Azure CLI ani katalogu ~/cloudnotes. Zachowaj notatki z wartościami <SUFFIX> i <REGION>. Będą potrzebne na kolejnych zajęciach.
Jeżeli pracujesz na współdzielonym komputerze w sali, wyloguj się na koniec zajęć:
az logout
Zasoby do utrzymania po laboratorium: brak.
Zadanie do oddania
Oddaj w sposób wskazany przez prowadzącego:
- Plik
~/l01-report.txtwygenerowany w sekcji Weryfikacja końcowa. - Krótkie odpowiedzi, po 2-4 zdania, na pytania:
- Czym różni się Subscription od Resource Group i dlaczego na kursie tworzymy osobną Resource Group dla każdego laboratorium?
- Dlaczego nie można polegać wyłącznie na Cost Management przy kontroli kosztów subskrypcji Azure for Students?
- Kiedy użyjesz
az login --use-device-codezamiastaz login?
Raport nie zawiera sekretów. Nie dołączaj zawartości katalogu ~/.azure ani tokenów dostępowych.
Dodatek. Jeżeli nie masz komputera z Linuksem Debian-like
Kurs zakłada Linux z rodziny Debian-like. Jeśli używasz innego systemu, masz trzy możliwości:
Windows: zainstaluj WSL z Ubuntu i wykonuj całą instrukcję w terminalu Ubuntu. W PowerShell uruchomionym jako administrator:
wsl --install -d UbuntuPo restarcie i utworzeniu użytkownika Ubuntu wykonaj część B od kroku 6. Logowanie przez przeglądarkę w WSL może nie otworzyć okna automatycznie. Użyj wtedy device code (krok 11).
macOS lub inna dystrybucja Linuksa: zainstaluj Azure CLI zgodnie z dokumentacją Microsoft dla Twojego systemu (link w źródłach), a narzędzia z kroku 7 menedżerem pakietów systemu. Polecenia z części C-F działają tak samo.
Brak uprawnień administratora: używaj Azure Cloud Shell (krok 5). Pamiętaj, że w sesji efemerycznej pliki znikają po jej zakończeniu.
Źródła i materiały dodatkowe
- Microsoft Learn, Install the Azure CLI on Linux: https://learn.microsoft.com/cli/azure/install-azure-cli-linux?pivots=apt
- Microsoft Learn, Sign in with Azure CLI interactively: https://learn.microsoft.com/cli/azure/authenticate-azure-cli-interactively
- Microsoft Learn, Manage Azure subscriptions with the Azure CLI: https://learn.microsoft.com/cli/azure/manage-azure-subscriptions-azure-cli
- Microsoft Learn, Get started with Azure CLI: https://learn.microsoft.com/cli/azure/get-started-with-azure-cli
- Microsoft Learn, About the Azure for Students program: https://learn.microsoft.com/azure/education-hub/azure-dev-tools-teaching/azure-students-program
- Microsoft Learn, Track usage and create budgets in Azure for Students: https://learn.microsoft.com/azure/education-hub/navigate-costs
- Microsoft Learn, Reactivate disabled Azure for Students subscription: https://learn.microsoft.com/azure/cost-management-billing/manage/azurestudents-subscription-disabled
- Microsoft Learn, Understand Cost Management data: https://learn.microsoft.com/azure/cost-management-billing/costs/understand-cost-mgt-data
- Microsoft Learn, Get started with Azure Cloud Shell ephemeral sessions: https://learn.microsoft.com/azure/cloud-shell/get-started/ephemeral
- Microsoft Learn, Manage Azure resource groups by using Azure CLI: https://learn.microsoft.com/azure/azure-resource-manager/management/manage-resource-groups-cli
- Microsoft Learn, Use tags to organize your Azure resources: https://learn.microsoft.com/azure/azure-resource-manager/management/tag-resources
- Microsoft Learn, Overview of Azure Policy: https://learn.microsoft.com/azure/governance/policy/overview
- Microsoft Learn, Install WSL: https://learn.microsoft.com/windows/wsl/install
- Azure for Students: https://azure.microsoft.com/free/students
- Azure Sponsorships portal: https://www.microsoftazuresponsorships.com/
- Azure Pricing Calculator: https://azure.microsoft.com/pricing/calculator