objectifs | utilisation | changements
Fonctions utilitaires simples pour comparer et synchroniser les fichiers locaux avec les compartiments S3.
[confetti/s3-deploy " 0.1.4 " ] ; ; latest release
La plupart des fonctions qui font partie de l'API publique de cette bibliothèque opèrent sur des maps simples comme les suivantes, appelées par ailleurs file-maps
:
{ :s3-key " desired/destination/file.txt "
:file #object[java.io.File " file.txt.gz " ]
:metadata { :content-encoding " gzip " }}
En utilisant file-maps
nous dissocions la structure du système de fichiers de la structure que nous souhaitons finalement atteindre dans notre compartiment S3 cible.
Par défaut, les métadonnées
:content-type
sont dérivées de l'extension de la valeur que vous avez fournie sous la forme:s3-key
.
La synchronisation est possible via confetti.s3-deploy/sync!
:
( confetti.s3-deploy/sync! creds bucket-name file-maps)
Pour générer file-maps
à partir d'un répertoire, cette bibliothèque fournit un petit assistant dir->file-maps
qui générera des mappages de fichiers :
( 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"]}]
En fonction de votre cas d'utilisation, vous souhaiterez créer votre propre fonction de génération file-maps
. Des fonctions de niveau inférieur sont également disponibles :
( confetti.s3-deploy/diff* bucket-objects file-maps)
Peut être utilisé pour obtenir une différence entre des objets buckets et une collection donnée de file-maps
.
( confetti.s3-deploy/calculate-ops bucket-objects file-maps)
Renvoie un vecteur d'opérations nécessaires pour synchroniser le bucket avec les file-maps
fournis.
Pour plus de détails, vérifiez l’implémentation.
s3-deploy
fournit une API de haut niveau, ce qui la rend attrayante pour les tâches CLI. Voici un exemple minimal :
; ; 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))})
Qui peut être exécuté avec :
clj -Sdeps '{:deps {confetti/s3-deploy {:mvn/version "0.1.3"}}}' deploy.clj
Inst
relative-path
afin qu'elle fonctionne correctement sous Windows. (#16)