Sinkronisasi web seperti aws s3 sync
dengan pembatalan CloudFront otomatis dan banyak lagi.
Sinkronisasi websync dimaksudkan sebagai pengganti aws s3 sync
. Websync, seperti AWS cli, menyinkronkan direktori lokal dengan awalan s3, dan sebaliknya. Websync memperluas fitur-fitur ini dengan secara otomatis membuat pembatalan yang dioptimalkan pada setiap distribusi CloudFront terkait, dan mengekspos sistem konfigurasi ekspresif (di atas antarmuka CLI) dengan JSON atau JavaScript, dan API terprogram.
# 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
Kontainer sumber (direktori lokal atau bucket S3): ./myDirectory
target
Kontainer target (bucket S3 atau direktori lokal): s3://my-bucket
config
File konfigurasi eksplisit (JSON atau JavaScript): --config ./myConfig.json
include
pola Glob untuk memfilter file (dari sumber) untuk menyertakan: --include **/*.ext
exclude
pola Glob untuk memfilter file (dari sumber) untuk mengecualikan: --exclude **/*.ext
diffBy
Override properti yang itemnya berbeda ( modtime
, atau size
dengan default: modtime
): --diffBy size
wildcardPolicy
Ganti kebijakan wildcard ( majority
, unanimous
, atau minority
dengan default: majority
): --wildcardPolicy unanimous
wildcardAll
Tambahkan wildcard ke semua jalur pembatalan (CATATAN: ini tidak mengubah resolusi jalur pembatalan), berguna untuk membatalkan jalur querystring: --wildcardAll
invalidateDeletes
Membatalkan jalur untuk item yang dihapus dari target. Berguna untuk situasi di mana Anda tidak ingin pengguna dapat mengakses item lagi: --invalidateDeletes
distribution
Satu atau beberapa ID distribusi CloudFront (CATATAN: ini mengesampingkan penemuan distribusi): --distribution <DIST ID> --distribution <ANOTHER DIST ID>
yes
Lewati semua perintah dengan respons "ya" (CATATAN: websync akan memperingatkan Anda jika lebih dari 500 pembatalan validasi dilakukan, karena ini memerlukan pembayaran): --yes
CATATAN : Opsi lainnya tersedia di File Konfigurasi
CATATAN : Semua argumen baris perintah OVERRIDE opsi file konfigurasi. Selain itu, source
dan target
diperlukan , tetapi dapat disediakan oleh CLI atau File Konfigurasi
File konfigurasi dapat menyediakan semua opsi yang tersedia dari CLI dengan tambahan modifiers
, sistem yang fleksibel untuk memberikan argumen eksplisit pada operasi put S3.
Objek pengubah file konfigurasi adalah objek yang keys
adalah Pola Glob, dan values
adalah S3.putObject Params
, atau fungsi yang mengembalikan S3.putObject Params
, atau Promise yang menyelesaikan S3.putObject Params
. Catatan, jika suatu fungsi disediakan (asinkron atau tidak), fungsi tersebut akan dipanggil dengan argumen Item
tunggal yang akan mewakili file atau objek dari wadah SOURCE . CATATAN : File sumber dapat mencocokkan beberapa pengubah, memungkinkan seseorang menjaga semuanya tetap KERING.
Konfigurasi JavaScript. Lihat contoh untuk konteksnya.
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 ,
} ) ,
} ,
}
Konfigurasi JSON. Lihat contoh untuk konteksnya. Pada contoh di bawah, pola !*.*
cocok dengan item apa pun tanpa ekstensi , yaitu "halaman lain", dan menimpa Content-Type
yang tersirat dengan text/html
agar memiliki jalur yang bersih untuk situs web statis sederhana.
{
"source" : " ./public " ,
"target" : " s3://websync-basic-example-bucket " ,
"exclude" : " *.exclude " ,
"modifiers" : {
"!*.*" : {
"ContentType" : " text/html "
}
}
}
Objek Item
Websync adalah antarmuka yang secara abstrak mewakili file lokal, atau Objek S3
. Sehubungan dengan Configuration File
, objek Item
yang diteruskan ke fungsi modifier
selalu dari kontainer sumber (direktori lokal, atau S3
Bucket). Semua Item
mematuhi antarmuka berikut:
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 >
}
Sistem pembatalan Websync secara otomatis membuat jumlah minimal jalur pembatalan yang diperlukan untuk mengakomodasi kebijakan wildcard
yang disediakan. Hal ini dilakukan dengan membuat diff
target dan source
, dan dua pohon: salah satu item di diff
dan semua item di target
. Kemudian ia menelusuri pohon diff
(dimulai dari akar) dan membandingkan jumlah anak yang diinvalidasi dengan yang tidak -- di sinilah kebijakan wildcard
membuat perbedaan. Selain itu, sinkronisasi web akan mendeteksi kapan jalur tertentu yang diberi karakter pengganti akan membuat semua turunannya menjadi tidak valid, atau hanya turunan langsungnya, sehingga menghasilkan jalur pembatalan yang paling optimal.
CATATAN : opsi wildcardAll
TIDAK mengubah pembuatan jalur pembatalan, melainkan wildcard ditambahkan ke setiap jalur yang dihasilkan. Ini berguna untuk membatalkan validasi jalur querystring untuk objek tertentu, dll.
Untuk informasi selengkapnya tentang cara kerja pembatalan di CloudFront, silakan merujuk ke Dokumentasi AWS.
Kebijakan karakter pengganti menentukan kapan jalur tertentu akan diberi karakter pengganti , sehingga membatalkan, semua atau hanya turunan langsungnya, untuk mengurangi jumlah jalur pembatalan yang dihasilkan. Tiga kebijakan yang tersedia mulai dari yang paling ketat hingga yang paling ketat mencakup minority
, majority
, dan unanimous
.
Jalur tertentu diberi karakter pengganti ketika sebagian kecil turunannya tidak valid. CATATAN : Ini selalu menghasilkan jalur pembatalan /*
, ketika pembatalan diperlukan.
Semua Item Sasaran:
/
/css
main.css
vendor.css
/js
main.js
index.html
Item Tidak Valid:
/
index.html
Jalur Pembatalan:
/*
Jalur tertentu diberi karakter pengganti ketika sebagian besar turunannya tidak valid.
Semua Item Sasaran:
/
/css
main.css
vendor.css
/js
main.js
index.html
Item Tidak Valid:
/
/css
main.css
vendor.css
index.html
Jalur Pembatalan:
/css/*
/index.html
Jalur tertentu diberi wildcard ketika semua anaknya tidak valid.
Semua Item Sasaran:
/
/css
main.css
vendor.css
/js
main.js
index.html
Item Tidak Valid:
/
/css
main.css
/js
/main.js
index.html
Jalur Pembatalan:
/css/main.css
/js/*
/index.html