Websync es como aws s3 sync
con invalidación automática de CloudFront y más.
La sincronización de Websync está destinada a ser un reemplazo de aws s3 sync
. Websync, al igual que AWS cli, sincroniza directorios locales con prefijos s3 y viceversa. Websync amplía estas funciones creando automáticamente invalidaciones optimizadas en cualquier distribución de CloudFront asociada y exponiendo un sistema de configuración expresivo (en la parte superior de la interfaz CLI) con JSON o JavaScript y una API programática.
# Install global cli, the `websync` command
npm i -g websync
# Install local
npm i websync
# Parse configuration from `websync.json` or `websync.js`
websync
# Parse configuration explicitly
websync --config ./myConfig.js
# With command line options
websync ./www s3://mybucket.io
# General
websync [source] [target] [...options]
source
(directorio local o depósito S3): ./myDirectory
target
Contenedor de destino (depósito S3 o directorio local): s3://my-bucket
config
Archivo de configuración explícito (JSON o JavaScript): --config ./myConfig.json
include
el patrón Glob para filtrar archivos (desde la fuente) para incluir: --include **/*.ext
exclude
patrón Glob para filtrar archivos (desde la fuente) a excluir: --exclude **/*.ext
diffBy
Anula la propiedad mediante la cual se diferencian los elementos ( modtime
o size
con el valor predeterminado: modtime
): --diffBy size
wildcardPolicy
Anula la política de comodines ( majority
, unanimous
o minority
con el valor predeterminado: majority
): --wildcardPolicy unanimous
wildcardAll
Agregue comodines a todas las rutas de invalidación (NOTA: esto no cambia la resolución de la ruta de invalidación), útil para invalidar rutas de cadenas de consulta: --wildcardAll
invalidateDeletes
Invalida las rutas de los elementos que se eliminan del destino. Útil para situaciones en las que ya no desea que los usuarios puedan acceder a los elementos: --invalidateDeletes
distribution
Uno o más ID de distribución de CloudFront (NOTA: esto anula el descubrimiento de distribuciones): --distribution <DIST ID> --distribution <ANOTHER DIST ID>
yes
Omita todas las preguntas con una respuesta "sí" (NOTA: websync le avisará si se realizan más de 500 invalidaciones, ya que esto requerirá un pago): --yes
NOTA : Hay más opciones disponibles en los Archivos de configuración.
NOTA : Todos los argumentos de la línea de comando ANULAN las opciones del archivo de configuración. Además, source
y target
son necesarios , pero pueden proporcionarse mediante CLI o archivo de configuración.
Los archivos de configuración pueden proporcionar todas las opciones disponibles en la CLI con la adición de modifiers
, un sistema flexible para proporcionar argumentos explícitos a las operaciones put de S3.
El objeto modificador del archivo de configuración es un objeto en el que las keys
son patrones globales y los values
son S3.putObject Params
, o una función que devuelve S3.putObject Params
o una promesa que resuelve S3.putObject Params
. Tenga en cuenta que si se proporciona una función (asincrónica o no), se llamará con un único argumento Item
que representará el archivo u objeto del contenedor SOURCE . NOTA : Los archivos de origen pueden coincidir con varios modificadores, lo que permite mantener las cosas SECO.
Configuración de JavaScript. Consulte el ejemplo para conocer el contexto.
const Path = require ( 'path' )
const DOWNLOAD_CONTENT_TYPE = 'application/octet-stream'
const DOWNLOAD_TAG = 'Downloadable'
const REDIRECT_TAG = 'Redirectable'
const makeDispositionName = fileName =>
` ${ Path . basename ( fileName ) . split ( '.' ) [ 0 ] } - ${ Date . now ( ) } ${ Path . extname ( fileName ) } `
module . exports = {
source : './public' ,
target : 's3://websync-complex-example-bucket' ,
modifiers : {
// This matches all files, provides Plain Object
'**/*' : {
Metadata : {
'source-user' : process . env . USER ,
} ,
} ,
// Matches all files in downloads, provides a synchronous function
'downloads/**/*' : item => ( {
ContentType : DOWNLOAD_CONTENT_TYPE ,
ContentDisposition : `attachment; filename=" ${ makeDispositionName ( item . key ) } "` ,
Tagging : DOWNLOAD_TAG ,
} ) ,
// Matches any file with the `.redirect` extension, provides an asynchronous funcion
'*.redirect' : async item => ( {
WebsiteRedirectLocation : ( await item . read ( ) ) . toString ( ) . trim ( ) ,
ContentType : 'text/html' ,
Tagging : REDIRECT_TAG ,
} ) ,
} ,
}
Configuración JSON. Consulte el ejemplo para conocer el contexto. En el siguiente ejemplo, el patrón !*.*
coincide con cualquier elemento sin extensión , es decir, "otra página", y anula el Content-Type
implícito con text/html
para tener rutas limpias para un sitio web estático simple.
{
"source" : " ./public " ,
"target" : " s3://websync-basic-example-bucket " ,
"exclude" : " *.exclude " ,
"modifiers" : {
"!*.*" : {
"ContentType" : " text/html "
}
}
}
El objeto Item
de Websync es una interfaz que representa de forma abstracta un archivo local o un objeto S3
. Con respecto al Configuration File
, el objeto Item
pasado a una función modifier
siempre proviene del contenedor de origen (directorio local o depósito S3
). Todos Item
se adhieren a la siguiente interfaz:
interface Item {
// The "key" (path or S3 Object key)
key : string
// Last modification time
modtime : Date
// Size in bytes of the Item
size : number
// Whether item is a symbolic link (always false for S3)
isSymbolicLink : boolean
// Read the *entire* body of the item
read ( ) : Promise < Buffer >
}
El sistema de invalidación de Websync crea automáticamente la cantidad mínima de rutas de invalidación necesarias para adaptarse a la política wildcard
proporcionada. Para ello, crea una diff
entre el objetivo y la source
, y dos árboles: uno de los elementos de la diff
y todos los elementos del target
. Luego recorre el árbol diff
(comenzando en la raíz) y compara el número de elementos secundarios que se invalidan con los que no; aquí es donde la política wildcard
marca la diferencia. Además, websync detectará cuándo una ruta determinada a la que se le asigna comodín debería invalidar todos sus hijos, o solo sus hijos directos, produciendo así las rutas de invalidación más óptimas.
NOTA : la opción wildcardAll
NO cambia la generación de la ruta de invalidación; más bien, se agregan comodines a cada ruta generada. Esto es útil para invalidar rutas de cadenas de consulta para un objeto determinado, etc.
Para obtener más información sobre cómo funcionan las invalidaciones en CloudFront, consulte la documentación de AWS.
Las políticas de comodines determinan cuándo una ruta determinada tendrá comodines , invalidando así, todos o solo sus hijos directos, para reducir la cantidad de rutas de invalidación generadas. Las tres políticas disponibles, desde la menos estricta hasta la más estricta, incluyen minority
, majority
y unanimous
.
Una ruta determinada tiene un comodín cuando una minoría de sus hijos está siendo invalidada. NOTA : Esto siempre da como resultado una ruta de invalidación /*
, cuando se requieren invalidaciones.
Todos los elementos de destino:
/
/css
main.css
vendor.css
/js
main.js
index.html
Artículos invalidados:
/
index.html
Rutas de invalidación:
/*
Una ruta determinada tiene un comodín cuando la mayoría de sus hijos están siendo invalidados.
Todos los elementos de destino:
/
/css
main.css
vendor.css
/js
main.js
index.html
Artículos invalidados:
/
/css
main.css
vendor.css
index.html
Rutas de invalidación:
/css/*
/index.html
Una ruta determinada tiene un comodín cuando se invalidan todos sus elementos secundarios.
Todos los elementos de destino:
/
/css
main.css
vendor.css
/js
main.js
index.html
Artículos invalidados:
/
/css
main.css
/js
/main.js
index.html
Rutas de invalidación:
/css/main.css
/js/*
/index.html