Infrastruktura jako kod (terraform + digital ocean)
We wpisie pokazuję w jaki sposób rozstawić serwery z linii poleceń terraform.
Daniel Gustaw
• 3 min read
W scrapingu ważnym czynnikiem jest skala, do jakiej możemy rozszerzyć tempo pobierania i przetwarzania danych. Kiedy kilka lat temu pisałem swój pierwszy system, który równolegle zbierał dane używając kilkunastu serwerów, każdy z tych serwerów był przeze mnie “wyklikany” w panelu dostawcy.
Teraz pokażę w jaki sposób rozstawić serwery z linii poleceń terraform
. Dostawcą będzie Digital Ocean, ponieważ w porównaniu ze swoją największą konkurencją ma bardzo korzystne (8-10 razy niższe) ceny transferu sieciowego.
https://www.digitalocean.com/pricing/calculator/
Prezentację przeprowadzimy z systemu arch
.
Instalacja Terraform
Nie ma nic bardzej przyjemnego niż instlacja oprogramowania w arch. Aby cieszyć się gotowym do pracy terraformem wystarczy komenda
yay -S terraform
Podłączenie dostawcy
Aby połączyć się z Digital Ocean potrzebujemy tokenu. Jeśli go nie posiadamy, znajdziemy w zakładce API w panelu przycisk “Generate New Token”
Token warto zapisać w ~/.zshrc
lub ~/.bashrc
export DIGITALOCEAN_TOKEN=xxxxxxxxxxxxxxxxxxxxxx
po ponownym wykonaniu tego plik będzie on dostępny we wszystkich tworzonych przez nas projektach.
Oficjalna dokumentacja pokazuje jak zrobić to przez zmienną do_token
https://registry.terraform.io/providers/digitalocean/digitalocean/latest/docs
ale nie polecam tego sposobu, ponieważ wymusza on na nas dopisywanie argumentów -var
do poleceń terraform
a podejście prezentowane tutaj oszczędza nam ilość wpisywanych znaków.
Aby skonfigurować połączenie do Digital Ocean mając token w zmiennych środowiskowych tworzymy plik provider.tf
i wpisujemy do niego:
terraform {
required_providers {
digitalocean = {
source = "digitalocean/digitalocean"
version = "2.5.1"
}
}
}
provider "digitalocean" {}
A następnie wykonujemy komendę inicjalizacyjną
terraform init
Rozstawianie serwerów
Kolejnym krokiem jest zaplanowanie i rozstawienie infrastruktury. W naszym przypadku bedzie ona bardzo prosta. Powinna zawierać dokładnie jeden droplet z kluczami do wszystkich inoyterów, którymi chcę się na niego logować.
Tworzymy kolejny plik. Nazwałem go master.tf
data "digitalocean_ssh_key" "dell" {
name = "Daniel Laptop Dell"
}
data "digitalocean_ssh_key" "yoga" {
name = "Daniel Lenovo Yoga"
}
data "digitalocean_ssh_key" "hp" {
name = "Daniel Stacjonarny"
}
# Create a web server
resource "digitalocean_droplet" "web" {
image = "ubuntu-18-04-x64"
name = "web-1"
region = "fra1"
size = "s-1vcpu-1gb"
ssh_keys = [
data.digitalocean_ssh_key.dell.id,
data.digitalocean_ssh_key.yoga.id,
data.digitalocean_ssh_key.hp.id
]
}
Są to klucze, które znajdziemy w zakładce “Settings -> Security” w panelu Digital Ocean
Wykonanie
terraform plan
Sprawdzi, czy nasza konfiguracja jest ok i pozwoli zobaczyć jak zmieni się architektura po wdrożeniu. W tym przypadku będzie to dodanie jednego serwera - dokładnie tak jak napisaliśmy w konfiguracji
Wdrożenie wykonamy wpisując
terraform apply -auto-approve
Wykonanie tej komendy trwało u mnie 47s
.
Przegląd wyników
Aby zobaczyć co postawiliśmy wykonujemy polecenie:
terraform show terraform.tfstate
Zwraca ono dane na temat zasobów zarządzanych przez terraform
Najbardziej interesujące jest dla nas ip
. W tym przypadku 164.90.174.250
.
Na serwer loguję się komendą
ssh -o "StrictHostKeyChecking no" [email protected]
Jak widać działa, bo komenda zalogowała nas na serwer web-1
jako root
.
Po powrocie do localhost
poleceniem
exit
możemy usunąć wszystkie utworzone droplety komendą
terraform destroy -auto-approve
Należy o niej pamiętać po zakończonej pracy, szczególnie jeśli operujemy na dużej skali mocy obliczeniowej!
Other articles
You can find interesting also.
Pulumi - Infrastruktura jako kod [ Digital Ocean ]
Za pomocą Pulumi możesz zdefiniować swoją infrastrukturę IT w pliku opisanym za pomocą twojego ulubionego języka programowania. Ten artykuł pokazuje, jak to zrobić.
Daniel Gustaw
• 10 min read
Scraping najbardziej popularnych kont na twitterze
Dzięki obserwacji wpisów z twittera możemy śledzić różne trendy. W tym wpisie pokażę jak pobrać dane o kontach w tym serwisie i wybrać te, które mają największy współczynnik wpływu.
Daniel Gustaw
• 8 min read
Obliczanie różnicy między plikami JSON
Dowiedz się, jak znaleźć brakujące tłumaczenia w plikach JSON przy użyciu słowników.
Daniel Gustaw
• 3 min read