⚠️ Tämä teksti on tekoälyn tekemä käännös alkuperäisestä englanninkielisestä sisällöstä.
Hetzner Cloud on EU-pohjainen ja verrattain edullinen pilvialusta — varsinkin jos vertailukohtana on AWS. Tarjolla on selkeä valikoima pienten ja keskisuurten projektien peruspalveluita: virtuaalipalvelimia, levyjä, yksinkertainen kuormantasaus ja S3-yhteensopiva objektitallennus. Mutta miten homma toimii, kun haluaa automatisoida?
Terraform-tuki Hetznerille
Olemme käyttäneet Hetzner Cloudia sekä omissa että asiakasprojekteissa perinteisten virtuaalipalvelimien pyörittämiseen. Käyttötapaukset ovat olleet vakaita ja ennustettavia: verkkopalveluita ja taustapalveluita, joissa kuorma ei heittele. Palvelimien määrä on kasvanut tasaisesti, joten oli aika katsoa automaatiovaihtoehtoja — halusimme yhtenäisemmät ympäristöt ja vähemmän käsityötä ylläpidossa.
Onneksi Hetznerille löytyy Terraform-tarjoaja, jolla useimmat asiat saa määriteltyä kohtuullisen helposti. Tässä esimerkki yksinkertaisen palvelimen määrittelystä:
resource "hcloud_server" "web" {
name = "test-service"
image = "docker-ce"
server_type = "cpx11"
public_net {
ipv4_enabled = true
ipv6_enabled = true
}
ssh_keys = data.hcloud_ssh_keys.by_label.ssh_keys[*].id
datacenter = "hel1-dc2" # Helsinki, Suomi
firewall_ids = [hcloud_firewall.test-service-firewall.id]
}
Näyttää suoraviivaiselta. Hetzner tarjoaa kätevästi valmiin levykuvan (eli “Appin”), jossa docker ja docker compose ovat valmiiksi asennettuna Ubuntu 24.04:n päälle. Tämä sopii meille mainiosti, koska ajamme monia palveluitamme juuri näillä työkaluilla. SSH-avaimet hoitavat pääsynhallinnan, ja niitä voi hallita joko tunnisteiden avulla tai määrittelemällä julkiset avaimet suoraan git-tietovarastossa.
Arjessa on kuitenkin tullut vastaan useita kompastuskiviä verrattuna AWS:ään — asioita, jotka vaativat kiertoteitä ja joihin ei osannut varautua. Tässä muutama esimerkki.
Kompastuskivi 1: Pääsynhallinta palvelimille
Lyhyesti: varaudu kirjoittamaan ylimääräisiä automaatioskriptejä
Hetznerillä ei ole AWS:n kaltaista IAM- tai SSM-järjestelmää. Palvelimien pääsynhallinta nojaa kokonaan SSH-avaimiin, joita ei voi muuttaa Terraformilla jälkikäteen ilman koko palvelimen uudelleenluontia. Tarvitset siis erillisen automaatiotyökalun (vaikkapa Ansiblen tai PyInfran) avainten hallintaan. Muista myös lisätä seuraava pätkä, ettei Terraform vahingossa tuhoa palvelintasi tunnisteiden vaihtuessa:
lifecycle {
ignore_changes = [
ssh_keys
]
}
Käyttöoikeudet palvelimella hoituvat perinteisillä Linux-mekanismeilla (chmod, ryhmät). Alkumäärittelyt saa tehtyä cloudinit-skripteillä, mutta kuten AWS:ssäkin, userdata ajetaan vain palvelimen luonnin yhteydessä. AWS:ssä on sentään tarjolla muitakin yhteys- ja hallintavaihtoehtoja. Hetznerillä käyttäjien lisääminen, poistaminen tai oikeuksien muuttaminen vaatii aina ulkoista työkalua. Tai sitten ei anna kehenkään pääsyä palvelimille ollenkaan?
Kompastuskivi 2: Kelluvan IP-osoitteen käyttöönotto
Lyhyesti: tarvitset lisäskriptejä, jotta osoite oikeasti toimii
Kelluvat IP-osoitteet ovat kätevä työkalu esimerkiksi palvelun siirtämiseen uudelle palvelimelle huoltotilanteessa. AWS:ssä kelluvan IP:n (Elastic IP) määrittely Terraformilla näyttää tältä:
resource "aws_eip" "app" {
vpc = true
tags = { Name = "app-1-eip" }
}
resource "aws_eip_association" "app" {
allocation_id = aws_eip.app.id
instance_id = aws_instance.app.id
}
Ja Hetznerillä näin:
resource "hcloud_floating_ip" "app_ipv4" {
name = "app-ipv4"
type = "ipv4"
home_location = "hel1"
}
resource "hcloud_floating_ip_assignment" "app_ipv4" {
floating_ip_id = hcloud_floating_ip.app_ipv4.id
server_id = hcloud_server.web.id
}
Yksinkertaista, eikö totta? No eipä ole: Hetznerillä pitää vielä erikseen kirjoittaa asetustiedostoja ja ajaa komentoja palvelimella, jotta asetukset saadaan voimaan ja osoite pysyvästi käyttöön. Käytännössä meillä on seuraavanlainen cloudinit-konfiguraatiopohja, jonka Terraform täyttää ja joka ajetaan netplan apply -komennolla:
write_files:
- path: /etc/netplan/99-floating-ip.yaml
permissions: "0644"
content: |
network:
version: 2
ethernets:
eth0:
dhcp4: true
addresses:
- ${floating_ip}/32
Tämä oli kyllä sellainen hetki, että “Joo ei, eihän se noin toimi.” IPv6:sta en edes ala kertomaan!
Kompastuskivi 3: Rajapinta-avainten hallinta ja oikeudet
Lyhyesti: avaimet luodaan käsin, ja oikeustasoja on tasan kaksi
AWS:ssä voit luoda IAM-käyttäjiä ja niiden tunnuksia suoraan Terraformilla.
Hetznerillä rajapinta-avaimet pitää luoda käsin verkkokäyttöliittymässä. Sen jälkeen kopioit ne CI/CD-putkesi salaisuuksiin, ympäristömuuttujiin tai mihin ikinä tarvitsetkaan. Ympäristöä ei pysty pystyttämään kokonaan tyhjästä ilman, että ensin käyt käsin luomassa avaimen — vasta sitten automaatio pääsee käyntiin.
Oikeustasoja on kaksi: pelkkä luku tai luku ja kirjoitus. Siinä kaikki. Et voi luoda avainta, jolla saa hallita palvelimia mutta ei poistaa palomuurisääntöjä. Et voi asettaa avaimelle vanhenemisaikaa. Et voi rajata käyttöä IP-osoitteen tai tunnisteen perusteella. Luku-ja-kirjoitus-avaimella on täydet oikeudet kaikkeen projektin sisällä. Niinpä projekteja saa luoda käsin tiuhaan tahtiin (oletusraja on 20 per tili).
Käytännössä tämä tarkoittaa, että Terraform-putkellasi on tismalleen samat oikeudet kuin hallintakonsolillasi. AWS:ssä rajaisit CI/CD-roolin minimioikeuksiin ja käyttäisit väliaikaisia tunnisteita, jotka vanhenevat automaattisesti.
Kannattaako Hetzner silti?
Näistä kompastuskivistä huolimatta käytämme Hetzner Cloudia edelleen monissa projekteissamme. Pienille ja keskisuurille palveluille, joiden kuorma on ennustettavaa, Hetznerin yksinkertaisuus ja edullisuus painavat vaakakupissa usein enemmän kuin automaation puutteet. Pitää vain hyväksyä, että joutuu kirjoittamaan muutaman ylimääräisen skriptin ja ylläpitämään hieman enemmän omia apuvälineitä.
Terraform-tarjoaja kattaa peruspalvelut riittävän hyvin, ja Ansiblella tai PyInfralla saa paikattua puuttuvat palat palvelimien asetuksissa. Kun automaatio on kerran kasassa, arki pyörii mukavasti. Suurin sopeutuminen vaaditaan alkuvaiheessa, kun AWS:n maailmasta siirtyy Hetzneriin.
Jos harkitsette Hetzneriä ympäristöjenne alustaksi tai tarvitsette apua nykyisen Hetzner-asennuksen automatisoinnissa, ottakaa yhteyttä osoitteeseen info@interjektio.fi. Meillä on reilusti kokemusta siitä, miten palvelut pystytetään ja pidetään pystyssä Hetzner Cloudissa.