Usługi chmurowe

Agenda

  1. Aktywacja subskrypcji Azure for Students
  2. Azure Portal: subscription, resource group, resource, region
  3. Sprawdzenie kredytu i miejsc, w których widać koszty
  4. Azure Cloud Shell jako środowisko awaryjne
  5. Przygotowanie lokalnego systemu Linux: pakiety i narzędzia
  6. Instalacja Azure CLI zgodnie z dokumentacją Microsoft
  7. Logowanie, wylogowanie, device code, wybór subskrypcji
  8. Dozwolone regiony i wartości własne studenta (<SUFFIX>, <REGION>)
  9. Pierwsza Resource Group i pierwszy darmowy zasób: create -> observe -> delete
  10. Podstawowa kontrola kosztów i cleanup
  11. 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

  1. Aktywujesz subskrypcję Azure for Students i poznasz Azure Portal.
  2. Sprawdzisz, gdzie widać kredyt i koszty.
  3. Zainstalujesz Azure CLI i narzędzia potrzebne w kolejnych tygodniach.
  4. Zalogujesz się do Azure z terminala.
  5. 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

  1. Otwórz stronę oferty: https://azure.microsoft.com/free/students
  2. Wybierz opcję rozpoczęcia korzystania z oferty (przycisk typu Start free lub Activate now).
  3. 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.
  4. Wypełnij formularz: kraj, dane kontaktowe, numer telefonu do weryfikacji.
  5. Zaakceptuj warunki oferty.
  6. 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

  1. Otwórz https://portal.azure.com i zaloguj się tym samym kontem.
  2. W górnym polu wyszukiwania wpisz Subscriptions i otwórz usługę Subscriptions.
  3. 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

ProblemRozwią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

  1. 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.
  2. 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.
  3. 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.
  4. 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

ProblemRozwią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

  1. W wyszukiwarce portalu wpisz Education i otwórz Education.
  2. Na stronie Overview zobaczysz informacje o subskrypcji Azure for Students: wykorzystanie kredytu i czas do odnowienia.
  3. Przycisk View cost details prowadzi do Cost Management.

Miejsce 2: Azure Sponsorships portal

  1. Otwórz https://www.microsoftazuresponsorships.com/balance
  2. Zaloguj się tym samym kontem.
  3. Strona Balance pokazuje wykorzystany i pozostały kredyt oraz datę wygaśnięcia.
  4. Strona Usage pokazuje, które usługi zużywały kredyt.

Miejsce 3: Cost Management

  1. W portalu otwórz subskrypcję Azure for Students.
  2. W menu po lewej wybierz Cost Management -> Cost analysis.
  3. 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

ProblemRozwią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.

  1. W wyszukiwarce portalu wpisz Policy i otwórz Policy.
  2. W menu po lewej wybierz Authoring -> Assignments.
  3. Znajdź przypisanie Allowed resource deployment regions i otwórz je.
  4. 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

ProblemRozwią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

  1. W Azure Portal kliknij ikonę terminala (Cloud Shell) na górnym pasku, obok pola wyszukiwania.
  2. Przy pierwszym uruchomieniu wybierz Bash.
  3. W panelu Getting started wybierz No storage account required. Wybierz subskrypcję Azure for Students i kliknij Apply.
  4. Po chwili pojawi się terminal. Wykonaj:
az account show --output table
  1. 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

ProblemRozwią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:

SystemObsługaNazwa kodowa repozytorium
Ubuntu 22.04takjammy
Ubuntu 24.04taknoble
Ubuntu 26.04takresolute
Debian 11takbullseye
Debian 12takbookworm
Debian 13brak pakietu w repozytorium, używamy bookwormbookworm
Linux Mint 21.x / 22.xtak, przez bazowe Ubuntujammy / 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

ProblemRozwią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ędzieDo czegoOd kiedy
curlpobieranie plików i testowanie endpointów HTTPL01
gitpobieranie kodu projektu i checkpointówL02
jqprzetwarzanie wyników JSON z Azure CLIL01
unziprozpakowywanie paczekL03
openssh-clientpołączenie SSH z maszyną wirtualnąL02
python3, python3-venv, python3-pipuruchomienie aplikacji CloudNotes lokalnieL03
gnupg, ca-certificates, apt-transport-https, lsb-releasebezpieczne dodanie repozytorium MicrosoftL01

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

ProblemRozwiązanie
E: Could not get lock /var/lib/dpkg/lock-frontendW 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-httpsW 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 resolvingBrak 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. amd64 albo arm64.

Wyświetl nazwy kodowe zapisane w systemie:

grep -E '^(UBUNTU_CODENAME|DEBIAN_CODENAME|VERSION_CODENAME)=' /etc/os-release

Wybierz <DIST_CODENAME> według zasady:

  1. Jeśli jest linia UBUNTU_CODENAME, użyj jej wartości (Ubuntu i Linux Mint).
  2. W przeciwnym razie użyj DEBIAN_CODENAME, a gdy jej nie ma, VERSION_CODENAME (Debian).
  3. Jeśli system to Debian 13 (trixie), użyj bookworm.

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

ProblemRozwiązanie
E: Unable to locate package azure-cliRepozytorium 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 verifiedKlucz 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.comNazwa 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.2Placeholder <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.81Zainstalował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 proxyNa 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

ProblemRozwiązanie
az: command not foundInstalacja 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:

  1. Azure CLI otwiera domyślną przeglądarkę ze stroną logowania Microsoft.
  2. Logujesz się kontem, którym aktywowałeś Azure for Students.
  3. Potwierdzasz logowanie drugim składnikiem (MFA). Microsoft wymaga MFA przy logowaniu użytkowników do Azure CLI.
  4. Przeglądarka wyświetla komunikat, że logowanie się udało, i można ją zamknąć.
  5. 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

ProblemRozwią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
  1. Terminal wyświetli komunikat z adresem https://microsoft.com/devicelogin i kodem, np. ABCD1234.
  2. Otwórz ten adres w dowolnej przeglądarce, także na innym urządzeniu, np. na telefonie.
  3. Wpisz kod z terminala.
  4. Zaloguj się i potwierdź MFA.
  5. 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

ProblemRozwią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

ProblemRozwią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 show pokazuje Azure for Students i stan Enabled.
  • Kolumna QuotaId zawiera tekst AzureForStudents.
  • Kolumna SpendingLimit ma 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

ProblemRozwią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>:

  1. Region musi być na liście dozwolonych regionów Twojej subskrypcji.
  2. Jeśli prowadzący wskazał preferowany region kursu i jest on na Twojej liście, wybierz go.
  3. W przeciwnym razie wybierz region w Europie, najbliżej uczelni.
  4. 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

ProblemRozwiązanie
jq: command not foundZainstaluj jq (krok 7).
jq: error ... Cannot iterate over nullWynik 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-z i 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

ProblemRozwią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

ProblemRozwiązanie
Nie chcesz podawać prywatnego adresu e-mail.Możesz użyć adresu uczelnianego.
fatal: destination path '/home/.../cloudnotes' already existsRepozytorium jest już pobrane. Zaktualizuj je poleceniem git -C ~/cloudnotes pull.
Could not resolve host: github.comBrak 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:

RodzajWzorzec
zasoby tymczasowe laboratoriumrg-labNN, np. rg-lab02
zasoby projektu CloudNotesrg-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

ProblemRozwiązanie
RequestDisallowedByAzure lub RequestDisallowedByPolicyRegion 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 directoryPlaceholder <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 argumentPo --location nie ma wartości. Wpisz nazwę regionu.
The provided location '...' is not availableLiteró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.Network to 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

ProblemRozwiązanie
MissingSubscriptionRegistration dla Microsoft.NetworkZarejestruj dostawcę zasobów: az provider register --namespace Microsoft.Network --wait, a potem powtórz polecenie tworzące NSG.
RequestDisallowedByAzureRegion 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

  1. W portalu otwórz Resource groups i kliknij rg-lab01. Jeśli jej nie widać, odśwież widok.
  2. Na stronie Overview zobacz:
    • listę zasobów w grupie (nsg-lab01),
    • subskrypcję i region,
    • tagi.
  3. Otwórz Activity log. Znajdziesz tam operacje utworzenia grupy i NSG, wraz z informacją, kto je wykonał.
  4. Kliknij nsg-lab01 i zobacz Inbound security rules oraz Outbound security rules. To te same reguły, które wyświetliło CLI.
  5. 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

ProblemRozwią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 delete usuwa grupę i wszystkie zasoby w środku. NSG zniknął razem z grupą.
  • --yes pomija pytanie o potwierdzenie.
  • --no-wait zwraca terminal od razu, a usuwanie trwa w tle.
  • az group wait --deleted czeka, 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

ProblemRozwią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

ProblemRozwią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 SUFFIX i REGION zawierają Twoje wartości, a nie teksty w nawiasach ostrych.
  • Wersja Azure CLI zaczyna się od 2..
  • Subskrypcja to Azure for Students w stanie Enabled.
  • 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:

  1. Plik ~/l01-report.txt wygenerowany w sekcji Weryfikacja końcowa.
  2. Krótkie odpowiedzi, po 2-4 zdania, na pytania:
    1. Czym różni się Subscription od Resource Group i dlaczego na kursie tworzymy osobną Resource Group dla każdego laboratorium?
    2. Dlaczego nie można polegać wyłącznie na Cost Management przy kontroli kosztów subskrypcji Azure for Students?
    3. Kiedy użyjesz az login --use-device-code zamiast az 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:

  1. Windows: zainstaluj WSL z Ubuntu i wykonuj całą instrukcję w terminalu Ubuntu. W PowerShell uruchomionym jako administrator:

    wsl --install -d Ubuntu
    

    Po 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).

  2. 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.

  3. 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

 

Imię Nazwisko

OPIS