-
Zaloguj się na portal Azure-a:
az login --use-device-code
-
Zainstaluj terraform na twoim komputerze według instrukcji.
-
Zainstaluje następujące narzędzia:
-
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_B9ls" 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
. -
A co z jakością naszego Terraforma?
tflint
przychodzi z pomocą. Możemy zainstalować krok po kroku, jak to jest opisane na [githubie projektu](docker pull ghcr.io/terraform-linters/tflint-bundle:latest), albo skorzystać z dockera:Utwórz plik konfiguracyjny dla tflinta -
.tflint.hcl
:plugin "azurerm" { enabled = true }
Uruchom tflinta z pomocą dockera lub CLI, które wcześniej zainstalowałaś/eś:
docker run --rm -v $(pwd):/data -t ghcr.io/terraform-linters/tflint-bundle
Popraw błąd, zanim przejdziesz dalej.
-
Zanim zaplikujesz plan, wykorzystaj nowe narzędzia, aby poznać koszt naszej nowej infrastruktury:
# let's store our plan in a file terraform plan -out plan.cache infracost breakdown --path plan.cache
-
A co z najlepszymi praktykami bezpieczeństwa? Skorzystajmy z
tfsec
:tfsec .
Sprawdź też checkov.
-
Apply:
terraform apply
-
Zaloguj się do swojej maszyny:
-
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.
Ansible jest popularnym narzędziem do przygotowania zasobów chmurowych, np., zainstowanie pakietów oraz administracji, np., wykonywania równolegle operacji na wszystkich wirtualnych maszynach. Często ansible wykorzystuje się do zrealizowania ostatniego kroku w Continuous Deployment, jeśli infrastructura jest oparta o wirtualne maszyny.
-
Utwórz wirtualną maszynę za pomoca TF.
-
Do pliku inventory wspomnianym w tutorialu w punkcie 3, zapisz publiczny adres IP twojej maszyny wirtualnej.
-
Zrób następujący tutorial: https://www.digitalocean.com/community/tutorials/how-to-deploy-a-static-html-website-with-ansible-on-ubuntu-20-04-nginx
-
dockerfile lint - hadolint:
docker run --rm -i hadolint/hadolint Dockerfile find . -iname Dockerfile | xargs -I {} bash -c "echo {}; docker run --rm -i hadolint/hadolint < {}"
-
# zeskanujmy stary obraz dockera trivy image python:2