Zum Inhalt springen

S3-Konnektor

Der S3-Konnektor liest und schreibt JSON-Objekte auf AWS S3 und jedem S3-kompatiblen Dienst (MinIO, Ceph, Cloudflare R2, Backblaze B2).

Konnektor-Typen:

  • S3Reader - Ein Bucket-Präfix abrufen und jedes neue Objekt als Payload ausgeben
  • S3Writer - Jede Payload als S3-Objekt mit einem Templatisierten-Schlüssel schreiben

Ein Bucket pollen und jedes neue Objekt ausgeben:

{
"type": "S3Reader",
"config": {
"region": "us-east-1",
"bucket": "meddle-ingest",
"prefix": "incoming/",
"accessKey": "AKIAIOSFODNN7EXAMPLE",
"secretKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"pollingRate": 5000
}
}

Jedes Objekt entfernen, nachdem es ausgegeben wurde, nützlich für Inbox-artige Aufnahme:

{
"type": "S3Reader",
"config": {
"region": "eu-west-1",
"bucket": "meddle-inbox",
"prefix": "events/",
"pollingRate": 10000,
"deleteAfter": true
}
}

endpoint setzen, um einen Nicht-AWS-Dienst anzusprechen. Path-Style-Adressierung wird automatisch aktiviert, wenn endpoint gesetzt ist:

{
"type": "S3Reader",
"config": {
"endpoint": "https://minio.example.com:9000",
"region": "us-east-1",
"bucket": "sensor-data",
"prefix": "raw/",
"accessKey": "minio_access_key",
"secretKey": "minio_secret_key",
"pollingRate": 5000
}
}

Jede Payload als neues Objekt unter Verwendung eines Go-Templates für den Schlüssel schreiben:

{
"type": "S3Writer",
"config": {
"region": "us-east-1",
"bucket": "meddle-archive",
"keyTemplate": "events/{{.deviceId}}/{{.timestamp}}.json",
"accessKey": "AKIAIOSFODNN7EXAMPLE",
"secretKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
}
}
{
"type": "S3Writer",
"config": {
"endpoint": "https://minio.example.com:9000",
"region": "us-east-1",
"bucket": "processed",
"keyTemplate": "out/{{.line}}/{{.timestamp}}.json",
"accessKey": "minio_access_key",
"secretKey": "minio_secret_key",
"contentType": "application/json"
}
}
  • region: AWS-Region (erforderlich für Reader und Writer)
  • bucket: S3-Bucket-Name (erforderlich)
  • endpoint: (Optional) Benutzerdefinierte Endpunkt-URL für S3-kompatible Dienste; aktiviert Path-Style-Adressierung
  • accessKey: (Optional) AWS-Access-Key-ID; fällt auf die Standard-AWS-Credential-Chain zurück, wenn weggelassen
  • secretKey: (Optional) AWS-Secret-Access-Key
  • prefix: (Reader) Objekt-Schlüssel-Präfix zum Filtern von Auflistungen
  • pollingRate: (Reader, erforderlich) Polling-Intervall in Millisekunden
  • deleteAfter: (Reader) Jedes Objekt nach dem Lesen löschen
  • keyTemplate: (Writer, erforderlich) Go-Template, das verwendet wird, um den Objekt-Schlüssel für jede Payload aufzubauen
  • contentType: (Writer) MIME-Typ für geschriebene Objekte (Standard: application/json)

Das keyTemplate des Writers ist ein Go-text/template-String, der gegen die Payload ausgewertet wird. Top-Level-Payload-Felder werden als {{.fieldName}} referenziert:

TemplateResultierender Schlüssel (Beispiel-Payload)
events/{{.deviceId}}/{{.timestamp}}.jsonevents/sensor-42/1737036000.json
raw/{{.year}}/{{.month}}/{{.id}}.jsonraw/2026/05/abc-123.json
flat-{{.id}}.jsonflat-abc-123.json

Stellen Sie sicher, dass jedes im Template referenzierte Feld in der Payload existiert, andernfalls rendert das Template einen leeren String für fehlende Schlüssel und kann beim Überschreiben kollidieren.

  • Wenn sowohl accessKey als auch secretKey gesetzt sind, verwendet der Konnektor statische Credentials.
  • Wenn weggelassen, gilt die Standard-Chain des AWS-SDK: Umgebungsvariablen, EC2/ECS-Task-Rolle, gemeinsames ~/.aws/credentials-Profil usw.

Der Reader hält ein In-Memory-Set von Objekt-Schlüsseln, die er bereits ausgegeben hat, sodass jedes Objekt nur einmal pro Meddle-Prozesslebenszeit verarbeitet wird. Mit deleteAfter: true kombinieren für dauerhafte Inbox-artige Aufnahme über Neustarts hinweg.

  • MongoDB - Dokumentenspeicher-Alternative
  • InfluxDB - Zeitreihenspeicher-Alternative
  • HTTP - Daten stattdessen an REST-APIs senden