Dapr
RustFS-Objekte aus jeder Dapr-Anwendung über das AWS-S3-Binding lesen und schreiben.
In dieser Anleitung verbinden Sie Dapr — die CNCF-portable Runtime für verteilte Anwendungen — über sein AWS-S3-Binding mit RustFS. Sie deklarieren eine Binding-Komponente mit einem RustFS-Bucket als Backend, starten einen Sidecar und nutzen die HTTP-API des Bindings, um ein Objekt zu erzeugen, zurückzulesen und unabhängig zu bestätigen. Der Ablauf wurde mit daprio/dapr:1.19.0 gegen einen RustFS-Bucket mit Path-Style-Adressierung verifiziert.
Sie benötigen Docker. Dieses Setup ist für lokale Integrationstests gedacht, nicht für den Produktivbetrieb.
Architektur
Anwendungen halten keine S3-Zugangsdaten oder Endpunkte. Der Sidecar stellt den Bucket als benanntes Binding bereit, und jede Operation ist ein POST an den Binding-Endpunkt mit einer operation und optionalen metadata.
Binding-Komponente deklarieren
Erstellen Sie die Komponentendatei. Der endpoint enthält das Schema, und forcePathStyle entspricht der Path-Style-Adressierung von RustFS:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: rustfs-s3
spec:
type: bindings.aws.s3
version: v1
metadata:
- name: bucket
value: my-bucket
- name: endpoint
value: http://<your-rustfs-endpoint>:9000
- name: accessKey
value: <your-access-key>
- name: secretKey
value: <your-secret-key>
- name: region
value: us-east-1
- name: forcePathStyle
value: "true"Sidecar starten
Führen Sie daprd mit eingebundenem Komponentenverzeichnis aus. --resources-path ersetzt das veraltete --components-path:
docker run -d --name dapr \
-v "$PWD:/components" \
daprio/dapr:1.19.0 /daprd \
--app-id s3demo \
--dapr-http-port 3500 \
--resources-path /componentsBestätigen Sie die Initialisierung des Bindings — das Log endet mit:
docker logs dapr 2>&1 | grep "successful init"successful init for output binding (rustfs-s3 (bindings.aws.s3/v1))Objekt über das Binding erzeugen
Rufen Sie das Binding von einem beliebigen HTTP-Client auf, der den Sidecar erreicht. Die Metadaten key legen den Objektnamen fest:
curl -s -X POST http://localhost:3500/v1.0/bindings/rustfs-s3 \
-H "Content-Type: application/json" \
-d '{"operation":"create","data":"hello from dapr","metadata":{"key":"dapr/hello.txt"}}'{"location":"http://<your-rustfs-endpoint>:9000/my-bucket/dapr/hello.txt","versionID":null}Objekt zurücklesen
Die Operation get liefert den Objektinhalt im Antwortkörper:
curl -s -X POST http://localhost:3500/v1.0/bindings/rustfs-s3 \
-H "Content-Type: application/json" \
-d '{"operation":"get","metadata":{"key":"dapr/hello.txt"}}'hello from daprBestätigen Sie dasselbe Objekt mit einem unabhängigen Client:
aws s3 cp s3://my-bucket/dapr/hello.txt - \
--endpoint-url http://<your-rustfs-endpoint>:9000hello from dapr
Anhalten oder Zurücksetzen
Sidecar abreißen und die Bucket-Objekte behalten:
docker rm -f daprDemo-Objekt löschen:
aws s3 rm s3://my-bucket/dapr/hello.txt \
--endpoint-url http://<your-rustfs-endpoint>:9000Fehlerbehebung
Binding schlägt beim Initialisieren mit einem S3-Fehler fehl
Prüfen Sie die vier Adressierungswerte gemeinsam: endpoint muss das Schema enthalten, region ist auch für Nicht-AWS-Endpunkte Pflicht, und forcePathStyle muss "true" sein. Ohne forcePathStyle sendet Dapr virtual-hosted-Anfragen, die RustFS ablehnt.
no such binding beim Aufruf
Der Sidecar hat die Komponente nicht geladen — prüfen Sie, dass die Datei auf .yaml endet, im an --resources-path übergebenen Verzeichnis liegt und die Init-Zeile aus Schritt 2 im Log erscheint.
get liefert leeren Inhalt
Der metadata.key stimmt nicht mit dem beim Erzeugen verwendeten Key überein. Keys sind case-sensitiv und enthalten das Präfix.
Nächste Schritte
- Lesen Sie vor den Operationen
list,deleteoderpresigndie S3-Kompatibilitätshinweise. - Erstellen Sie dedizierte Produktionszugangsdaten mit Zugangsdatenverwaltung und referenzieren Sie sie über einen Dapr-Secret-Store statt Klartextwerten in der Komponente.
- Folgen Sie der Dapr-S3-Binding-Dokumentation für den vollen Operationssatz und das Retry-Verhalten.