Docs

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 plan prüfen, bevor terraform apply läuft.

Das Ergebnis: ein versionierter, unveränderlicher Bucket in der Schweiz, in Zürich oder Genf und auf Wunsch georedundant, reproduzierbar aus Code.