Ziele | Nutzung | Änderungen
Einfache Dienstprogrammfunktionen zum Vergleichen und Synchronisieren lokaler Dateien mit S3-Buckets.
[confetti/s3-deploy " 0.1.4 " ] ; ; latest release
Die meisten Funktionen, die Teil der öffentlichen API dieser Bibliothek sind, arbeiten mit einfachen Karten wie den folgenden, die auch als file-maps
bezeichnet werden:
{ :s3-key " desired/destination/file.txt "
:file #object[java.io.File " file.txt.gz " ]
:metadata { :content-encoding " gzip " }}
Durch die Verwendung von file-maps
entkoppeln wir die Struktur des Dateisystems von der Struktur, die wir letztendlich in unserem Ziel-S3-Bucket erreichen möchten.
Standardmäßig werden die
:content-type
-Metadaten von der Erweiterung des Werts abgeleitet, den Sie als:s3-key
angegeben haben.
Die Synchronisierung ist über confetti.s3-deploy/sync!
:
( confetti.s3-deploy/sync! creds bucket-name file-maps)
Um file-maps
aus einem Verzeichnis zu generieren, liefert diese Bibliothek ein kleines Hilfsprogramm dir->file-maps
mit, das Dateizuordnungen generiert:
( dir->file-maps ( io/file " src " ))
; ;=> [{:s3-key "confetti/s3_deploy.clj",
; ; :file #object[java.io.File 0x4795c68f "/Users/martin/code/confetti-s3-deploy/src/confetti/s3_deploy.clj"]}]
Abhängig von Ihrem Anwendungsfall möchten Sie möglicherweise Ihre eigene Funktion zur Generierung file-maps
erstellen. Es sind auch Funktionen auf niedrigerer Ebene verfügbar:
( confetti.s3-deploy/diff* bucket-objects file-maps)
Kann verwendet werden, um einen Unterschied zwischen Buckets-Objekten und einer bestimmten Sammlung von file-maps
zu ermitteln.
( confetti.s3-deploy/calculate-ops bucket-objects file-maps)
Gibt einen Vektor von Operationen zurück, die erforderlich sind, um den Bucket mit den bereitgestellten file-maps
zu synchronisieren.
Weitere Einzelheiten finden Sie in der Implementierung.
s3-deploy
bietet eine High-Level-API, die es für CLI-Jobs attraktiv macht. Hier ist ein Minimalbeispiel:
; ; cat deploy.clj
( require '[confetti.s3-deploy :as s3]
'[clojure.java.io :as io])
( def dir-to-sync ( io/file " public " ))
( s3/sync!
{ :access-key ( System/getenv " AWS_ACCESS_KEY " )
:secret-key ( System/getenv " AWS_SECRET_KEY " )}
( System/getenv " S3_BUCKET_NAME " )
( s3/dir->file-maps dir-to-sync)
{ :dry-run? true
:report-fn ( fn [{ :keys [s3-key op]}]
( println op s3-key))})
Was ausgeführt werden kann mit:
clj -Sdeps '{:deps {confetti/s3-deploy {:mvn/version "0.1.3"}}}' deploy.clj
Inst
-Warnungen zu vermeiden relative-path
, damit sie unter Windows ordnungsgemäß funktioniert. (#16)