Websync é como aws s3 sync
com invalidação automática do CloudFront e muito mais.
A sincronização do Websync pretende substituir aws s3 sync
. O Websync, como o AWS cli, sincroniza diretórios locais com prefixos s3 e vice-versa. O Websync expande esses recursos criando automaticamente invalidações otimizadas em qualquer distribuição associada do CloudFront e expondo um sistema de configuração expressivo (sobre a interface CLI) com JSON ou JavaScript e uma 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
Contêiner de origem (diretório local ou bucket S3): ./myDirectory
target
Contêiner de destino (bucket S3 ou diretório local): s3://my-bucket
config
Arquivo de configuração explícito (JSON ou JavaScript): --config ./myConfig.json
include
o padrão Glob para filtrar arquivos (da origem) para incluir: --include **/*.ext
exclude
padrão Glob para filtrar arquivos (da origem) para excluir: --exclude **/*.ext
diffBy
Substitui a propriedade pela qual os itens são diferenciados ( modtime
, ou size
com padrão: modtime
): --diffBy size
wildcardPolicy
Substitui a política curinga ( majority
, unanimous
ou minority
com padrão: majority
): --wildcardPolicy unanimous
wildcardAll
Acrescenta curinga a todos os caminhos de invalidação (NOTA: isso não altera a resolução do caminho de invalidação), útil para invalidar caminhos de string de consulta: --wildcardAll
invalidateDeletes
Invalida caminhos para itens que estão sendo excluídos do destino. Útil para situações em que você não deseja mais que os usuários acessem os itens: --invalidateDeletes
distribution
Um ou mais IDs de distribuição do CloudFront (NOTA: isso substitui a descoberta de distribuições): --distribution <DIST ID> --distribution <ANOTHER DIST ID>
yes
Ignore todos os prompts com uma resposta "sim" (NOTA: o websync irá avisá-lo se mais de 500 invalidações estiverem sendo feitas, pois isso exigirá um pagamento): --yes
NOTA : Mais opções estão disponíveis nos Arquivos de Configuração
NOTA : Todos os argumentos da linha de comando SUBSTITUEM as opções do arquivo de configuração. Além disso, source
e target
são obrigatórios , mas podem ser fornecidos pela CLI ou pelo arquivo de configuração
Os arquivos de configuração podem fornecer todas as opções disponíveis na CLI com a adição de modifiers
, um sistema flexível para fornecer argumentos explícitos para operações put do S3.
O objeto modificador do arquivo de configuração é um objeto no qual as keys
são Glob Patterns e os values
são S3.putObject Params
ou uma função que retorna um S3.putObject Params
ou uma Promise que resolve S3.putObject Params
. Observe que se uma função for fornecida (assíncrona ou não), ela será chamada com um único argumento Item
que representará o arquivo ou objeto do contêiner SOURCE . NOTA : Os arquivos de origem podem corresponder a vários modificadores, permitindo manter as coisas SECAS.
Configuração JavaScript. Veja o exemplo para 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 ,
} ) ,
} ,
}
Configuração JSON. Veja o exemplo para contexto. No exemplo abaixo, o padrão !*.*
corresponde a qualquer item sem extensão , ou seja, "outra página", e substitui o Content-Type
implícito por text/html
para ter caminhos limpos para um site estático simples.
{
"source" : " ./public " ,
"target" : " s3://websync-basic-example-bucket " ,
"exclude" : " *.exclude " ,
"modifiers" : {
"!*.*" : {
"ContentType" : " text/html "
}
}
}
O objeto Item
do Websync é uma interface que representa abstratamente um arquivo local ou um objeto S3
. Com relação ao Configuration File
, o objeto Item
passado para uma função modifier
é sempre do contêiner de origem (diretório local ou Bucket S3
). Todos Item
aderem à seguinte interface:
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 >
}
O sistema de invalidação do Websync cria automaticamente a quantidade mínima de caminhos de invalidação necessários para acomodar a política wildcard
fornecida. Ele faz isso criando um diff
de target e source
, e duas árvores: um dos itens no diff
e todos os itens no target
. Em seguida, ele percorre a árvore diff
(começando na raiz) e compara o número de filhos que estão sendo invalidados com aqueles que não estão - é aqui que a política wildcard
faz toda a diferença. Além disso, o websync detectará quando um determinado caminho que está sendo curinga deve invalidar todos os seus filhos, ou apenas seus filhos diretos, produzindo assim os caminhos de invalidação mais ideais.
NOTA : a opção wildcardAll
NÃO altera a geração do caminho de invalidação; em vez disso, os curingas são anexados a cada caminho gerado. Isso é útil para invalidar caminhos de string de consulta para um determinado objeto, etc.
Para obter mais informações sobre como as invalidações funcionam no CloudFront, consulte a documentação da AWS.
As políticas de curinga determinam quando um determinado caminho será curinga , invalidando assim todos ou apenas seus filhos diretos para reduzir o número de caminhos de invalidação gerados. As três políticas disponíveis, da menos rigorosa à mais rigorosa, incluem minority
, majority
e unanimous
.
Um determinado caminho é curinga quando uma minoria de seus filhos está sendo invalidada. NOTA : Isso sempre resulta no caminho de invalidação /*
, quando invalidações são necessárias.
Todos os itens alvo:
/
/css
main.css
vendor.css
/js
main.js
index.html
Itens invalidados:
/
index.html
Caminhos de invalidação:
/*
Um determinado caminho é curinga quando a maioria de seus filhos está sendo invalidada.
Todos os itens alvo:
/
/css
main.css
vendor.css
/js
main.js
index.html
Itens invalidados:
/
/css
main.css
vendor.css
index.html
Caminhos de invalidação:
/css/*
/index.html
Um determinado caminho é curinga quando todos os seus filhos estão sendo invalidados.
Todos os itens alvo:
/
/css
main.css
vendor.css
/js
main.js
index.html
Itens invalidados:
/
/css
main.css
/js
/main.js
index.html
Caminhos de invalidação:
/css/main.css
/js/*
/index.html