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): ./myDirectorytarget Contêiner de destino (bucket S3 ou diretório local): s3://my-bucketconfig Arquivo de configuração explícito (JSON ou JavaScript): --config ./myConfig.jsoninclude o padrão Glob para filtrar arquivos (da origem) para incluir: --include **/*.extexclude padrão Glob para filtrar arquivos (da origem) para excluir: --exclude **/*.extdiffBy Substitui a propriedade pela qual os itens são diferenciados ( modtime , ou size com padrão: modtime ): --diffBy sizewildcardPolicy Substitui a política curinga ( majority , unanimous ou minority com padrão: majority ): --wildcardPolicy unanimouswildcardAll 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: --wildcardAllinvalidateDeletes 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: --invalidateDeletesdistribution 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): --yesNOTA : 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:
//cssmain.cssvendor.css/jsmain.jsindex.htmlItens invalidados:
/index.htmlCaminhos de invalidação:
/*Um determinado caminho é curinga quando a maioria de seus filhos está sendo invalidada.
Todos os itens alvo:
//cssmain.cssvendor.css/jsmain.jsindex.htmlItens invalidados:
//cssmain.cssvendor.cssindex.htmlCaminhos de invalidação:
/css/*/index.htmlUm determinado caminho é curinga quando todos os seus filhos estão sendo invalidados.
Todos os itens alvo:
//cssmain.cssvendor.css/jsmain.jsindex.htmlItens invalidados:
//cssmain.css/js/main.jsindex.htmlCaminhos de invalidação:
/css/main.css/js/*/index.html