S3-Konnektor
Übersicht
Abschnitt betitelt „Übersicht“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 ausgebenS3Writer- Jede Payload als S3-Objekt mit einem Templatisierten-Schlüssel schreiben
S3 Reader
Abschnitt betitelt „S3 Reader“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 }}Nach dem Lesen löschen
Abschnitt betitelt „Nach dem Lesen löschen“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 }}S3-kompatibler Endpunkt (MinIO, R2)
Abschnitt betitelt „S3-kompatibler Endpunkt (MinIO, R2)“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 }}S3 Writer
Abschnitt betitelt „S3 Writer“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" }}S3-kompatibler Endpunkt
Abschnitt betitelt „S3-kompatibler Endpunkt“{ "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" }}Konfigurationsparameter
Abschnitt betitelt „Konfigurationsparameter“- 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)
Key-Templates
Abschnitt betitelt „Key-Templates“Das keyTemplate des Writers ist ein Go-text/template-String, der gegen die Payload ausgewertet wird. Top-Level-Payload-Felder werden als {{.fieldName}} referenziert:
| Template | Resultierender Schlüssel (Beispiel-Payload) |
|---|---|
events/{{.deviceId}}/{{.timestamp}}.json | events/sensor-42/1737036000.json |
raw/{{.year}}/{{.month}}/{{.id}}.json | raw/2026/05/abc-123.json |
flat-{{.id}}.json | flat-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.
Credentials-Auflösung
Abschnitt betitelt „Credentials-Auflösung“- Wenn sowohl
accessKeyals auchsecretKeygesetzt 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.
Reader-Deduplizierung
Abschnitt betitelt „Reader-Deduplizierung“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.