Buckets mit Terraform
chili spricht die native S3-API, also verwaltet der bestehende AWS-Provider von Terraform den Speicher. Sie zeigen den Provider auf den chili-Endpoint, und Buckets, Versionierung und Object Lock werden zu reproduzierbarem Code.
Voraussetzungen
- Terraform ab 1.5
- chili-Zugangsschlüssel (Access Key und Secret)
- die Schlüssel als Umgebungsvariablen, nicht im Code
1. Provider konfigurieren
Die skip_*-Optionen schalten die AWS-spezifischen Metadaten-Checks ab, s3_use_path_style sorgt für die richtige Adressierung:
provider "aws" {
region = "ch-east"
access_key = var.chili_access_key
secret_key = var.chili_secret_key
skip_credentials_validation = true
skip_requesting_account_id = true
skip_metadata_api_check = true
s3_use_path_style = true
endpoints {
s3 = "https://<ENDPOINT>"
}
}
variable "chili_access_key" { sensitive = true }
variable "chili_secret_key" { sensitive = true }Die Schlüssel per Umgebungsvariable übergeben, damit sie nie im Repository landen:
export TF_VAR_chili_access_key="AKIA..."
export TF_VAR_chili_secret_key="..."2. Bucket als Code
resource "aws_s3_bucket" "backup" {
bucket = "mein-backup"
object_lock_enabled = true
}object_lock_enabled muss bei der Erstellung gesetzt sein, nachträglich lässt es sich nicht aktivieren.
3. Versionierung und Object Lock
Object Lock setzt aktivierte Versionierung voraus:
resource "aws_s3_bucket_versioning" "backup" {
bucket = aws_s3_bucket.backup.id
versioning_configuration {
status = "Enabled"
}
}
resource "aws_s3_bucket_object_lock_configuration" "backup" {
bucket = aws_s3_bucket.backup.id
rule {
default_retention {
mode = "COMPLIANCE"
days = 30
}
}
}Im Compliance-Modus kann die Sperre vor Ablauf von niemandem aufgehoben werden, auch nicht vom Konto-Eigentümer. Das ist die Wahl für regulatorische Aufbewahrung.
4. State und gute Praxis
- Den Terraform-State remote ablegen, etwa in einem eigenen chili-Bucket, nicht lokal und nicht im Repo.
- Schlüssel ausschliesslich über Umgebungsvariablen oder einen Secret-Store.
- Mit
terraform planprüfen, bevorterraform applyläuft.
Das Ergebnis: ein versionierter, unveränderlicher Bucket in der Schweiz, in Zürich oder Genf und auf Wunsch georedundant, reproduzierbar aus Code.