-
Rekomendowany: Linux (Ubuntu) / MacOS
-
Zainstalowane:
- azure-cli (instalacje)
- terraform
- pulumi
-
Zaloguj się na https://portal.azure.com posługując się loginem i hasłem wsb.
-
Wybierz Access student benefits, naciskając Explore
-
Podając dane, podaj dane WSB.
-
Na portal.azure.com, w prawym górnym roku będziesz miał rozwijane menu, otwórz Cost Management + Biling
Pamiętajcie proszę o usunięciu resource groupy, w której utworzyliście wasze zasoby, po zajęciach.
Rozmiar VM:
Parametr | Wartość |
---|---|
VM size | General Purpose 4GiB (B2s) |
OS | Ubuntu 20.04LTS |
Inbound port | 22, 80 |
Region | eastus |
Jak się będziemy logować?
Parametr | Wartość |
---|---|
Authentication Type | Password* (nie rób tego w produkcji!) |
Username | ubuntu |
Utworzenie VM przez interfejs webowy:
-
Wybierz Virtual machines w menu portalu Azure.
-
Teraz +Create.
-
Wypełnij pola według wymagań, utwórz Resource Group - wsb
-
Wybierz Review and Create.
Weryfikacja czy maszyna działa:
-
Wyszukaj Public IP address*, będziemy go potrzebować do zalogowania się do VM.
-
Zaloguj się posługując się ssh lub putty:
ssh ubuntu@40.X.X.X ubuntu@wsb:~$ ls ubuntu@wsb:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.3 LTS Release: 20.04 Codename: focal
-
Zainstaluj nginx, aby zweryfikować czy możemy się połączyć do maszyny na porcie 80.
ubuntu@wsb:~$ sudo apt-get update; ubuntu@wsb:~$ sudo apt-get install -y nginx # sprawdzmy czy nginx nasluchuje # lokalnie ubuntu@wsb:~$ curl 127.0.0.1:80
-
Na swoim komputerze, w przeglądarce lub w konsoli:
curl 40.X.X.X
-
Może jednak tak nie jest... zmieńmy domyślną stronę wyświetl przez nginxa:
sudo nano /var/www/html/index.nginx-debian.html
Zapisz, sprawdź lokalnie, a potem ze swojego komputera.
Informacje o VM:
-
Przeglądnij parametry wirtualnej maszyny.
-
Zanotuj:
- jak duży dysk nasza VM ma
- Jaki był najwyższe zużycie procesora?
Konsola w przeglądarce [>_]:
-
Wybierz [>_] i uruchom bash.
-
Zaloguj się do swojej maszyny.
-
Sprawdź czy git jest zainstalowany.
Zatrzymywanie:
-
Zatrzymaj maszynę VM.
Zauważ nie płacisz za uruchomioną maszynę, tylko za statyczne zasoby, np., przestrzeń dyskową.
-
Uruchom ponownie i zaloguj się przez ssh.
Co się zmieniło?
Kasowanie:
- Skasuj swoją wirtualną maszynę 🔥
Nie powinno się używać interfejsu webowego do tworzenia zasobów, minimalna akceptowalna forma to script z komendami az
lub plik README.
Zauważ to ćwiczenie możemy tez zrobić w konsoli bash w portalu.
-
Logowanie
# automatycznie otworzy przegląndarkę az login # wyświetli URL i kod do przeklejenia az login --use-device-code
-
Sprawdźmy czy wszystko działa.
az account list
Powinnaś / powinieneś zobaczyć informacje o swoim koncie.
-
Utwórz resource group w regionie
eastus
. -
Sprawdźmy jakie grupy zasobów mamy:
az group list az group list --query '[].name' az group list --query '[].[name,location]' -o tsv
Podpowiedź: warto mieć zainstalowane
jq
(download). -
Utwórzmy teraz VM za pomocą azure-cli.
Komenda:
az vm create \ --location <region> \ --resource-group <nazwa-grupy-zasobów> \ --name <nazwa-maszyny> \ --size <rozmiar-maszyny> \ --image <obraz-systemu> \ --public-ip-sku Standard \ --admin-username <nazwa-użytkownika> \ --admin-password <haslo>
Pamiętaj:
Poza ćwiczeniami nigdy nie wybieraj logowania się przez użytkownika i hasło, zawsze wybieraj logowanie się za pomocą kluczy ssh, na przykład za pomocą opcji
--generate-ssh-keys
.Problem. Region mamy. Co mam wpisać pod inne wartości :/
-
Jak znaleźć X?
VM size:
# az vm list-sizes \ --location eastus \ --output table # znajdź B1s az vm list-sizes \ --location eastus \ --output table | head
Image:
az vm image list \ --location eastus \ --output table
# możemy wyszukiwać po polach az vm image list \ --offer ubuntu \ --publisher Canonical \ --sku "20_04-lts" \ --location eastus \ --all
-
Na podstawie zdobytych informacji, utwórz wirtualną maszynę:
az vm create...
-
Zweryfikuj czy widzisz VM w portalu.
az vm list --output table
-
Zaloguj się na VM. Zainstaluj nginxa oraz otwórz port 80, korzystając z komendy open-port opisanej w dokumentacji. Zweryfikuj czy możesz się połączyć z ngixem.
-
Skasuj wszystkie zasoby:
# zastąp myResourceGroup twoją nazwą grupy zasobów az group delete --name myResourceGroup
State-of-the-art. Obecnie Terraform i Terragrunt uznawane za najlepsze narzędzie dla Infrastructure-as-a-Code.
-
Zainstaluj terraform na twoim komputerze według instrukcji.
-
Korzystając z dokumentacji Azure Provider i przykładów, utwórzmy w następnych krokach maszynę wirtualną.
-
Przygotuj projekt.
mkdir azure-tf cd azure-tf touch main.tf
-
Do
main.tf
przekopiuj definicję providera (na podstawie przykładu):provider "azurerm" { features {} }
Zanim, pójdziemy dalej zainicjujmy projekt:
terraform init
-
Do
main.tf
przekopuj kilka zasobów i uruchomterraform plan
,provider "azurerm" { features {} } variable "password" { description = "The password for the VM to login over ssh" } resource "azurerm_resource_group" "main" { name = "wsb-resources" location = "eastus" } resource "azurerm_virtual_network" "main" { name = "wsb-network" address_space = ["10.0.0.0/22"] location = azurerm_resource_group.main.location resource_group_name = azurerm_resource_group.main.name } resource "azurerm_subnet" "internal" { name = "internal" resource_group_name = azurerm_resource_group.main.name virtual_network_name = azurerm_virtual_network.main.name address_prefixes = ["10.0.2.0/24"] } resource "azurerm_public_ip" "public_ip" { name = "wsb-public-ip" resource_group_name = azurerm_resource_group.main.name location = azurerm_resource_group.main.location allocation_method = "Dynamic" } resource "azurerm_network_interface" "main" { name = "wsb-nic" resource_group_name = azurerm_resource_group.main.name location = azurerm_resource_group.main.location ip_configuration { name = "internal" subnet_id = azurerm_subnet.internal.id private_ip_address_allocation = "Dynamic" public_ip_address_id = azurerm_public_ip.public_ip.id } } resource "azurerm_linux_virtual_machine" "main" { name = "wsb-vm" resource_group_name = azurerm_resource_group.main.name location = azurerm_resource_group.main.location size = "Standard_B1ls" admin_username = "ubuntu" admin_password = var.password disable_password_authentication = false network_interface_ids = [ azurerm_network_interface.main.id, ] source_image_reference { publisher = "Canonical" offer = "UbuntuServer" sku = "18.04-LTS" version = "latest" } os_disk { storage_account_type = "Standard_LRS" caching = "ReadWrite" } }
Niezwykle pomocną komendą jest również
terraform fmt
. -
Zobacz jakie pliki Terraform utworzył:
ls
Wyszukaj hasła w nowych plikach.
-
Zaloguj się do swojej maszyny:
ssh ubuntu@X.Y.Z.V
-
Usuń tylko definicję maszyny wirtualnej z
main.tf
i wywołajterraform apply
. -
Dodatkowe:
- wyświetlij IP address z pomocą outputs
- generacja hasła z password resource
-
Usuńmy wszystko:
terraform destroy
Zauważ: Moglibyśmy również zainstalować wymagane pakiety z poziomu Terraforma posługując się Provisioner, na przykład, remote-exec. Więcej informacji znajdziesz w dokumentacji.
New kid on the block. Pozwala łączyć kod konfigurujący maszynę (na przykład co zainstalować) z deklaracją infrastruktury. Wszystko za pomocą języka programowania znanego programistom.
-
Zainstaluj Pulumi korzystając z instrukcji
-
Przygotujmy pierwszy projekt:
mkdir azure-pulumi && cd azure-pulumi # jeśli nie chcesz korzystać # z chmury pulumi # # pulumi login --local pulumi new azure-python
-
Przeglądnij
__main__.py
, zmieć nazwę grupy zasobów i nazwy konta dla storage, następnie uruchom pulumi:pulumi up
-
Zobacz czy w konsoli został utworzony storage w konsoli web.
-
Skasuj:
pulumi destroy
-
Jak utworzyć VM, można zobaczyć w tutorialu.
Infrastruktura:
- Są też Azure RM templates, podobne do AWS CloudFormation
Deployment/configuration mgmt:
- Ansible
- Saltstack
- AWS: AWS CDK
Platformy do pracy w zespole nad infrastrukturze: