يشبه Websync aws s3 sync
مع إبطال CloudFront التلقائي والمزيد.
من المفترض أن تكون مزامنة Websync بديلاً لمزامنة aws s3 sync
. يقوم Websync، مثل AWS cli، بمزامنة الدلائل المحلية مع بادئات s3، والعكس. يتوسع Websync في هذه الميزات عن طريق إنشاء عمليات إبطال محسّنة تلقائيًا على أي توزيعات CloudFront مرتبطة، وكشف نظام تكوين معبر (أعلى واجهة CLI) مع JSON أو JavaScript، وواجهة برمجة تطبيقات برمجية.
# 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
(الدليل المحلي أو دلو S3): ./myDirectory
target
(دلو S3 أو الدليل المحلي): s3://my-bucket
config
ملف التكوين الصريح (JSON أو JavaScript): --config ./myConfig.json
include
نمط Glob لتصفية الملفات (من المصدر) ليشمل: --include **/*.ext
exclude
نمط Glob لتصفية الملفات (من المصدر) لاستبعاد: --exclude **/*.ext
diffBy
التي يتم من خلالها تمييز العناصر ( modtime
أو size
الافتراضي: modtime
): --diffBy size
wildcardPolicy
تجاوز سياسة البدل ( majority
، unanimous
، أو minority
بشكل افتراضي: majority
): --wildcardPolicy unanimous
wildcardAll
إلحاق أحرف بدل بجميع مسارات الإبطال (ملاحظة: هذا لا يغير دقة مسار الإبطال)، وهو مفيد لإبطال مسارات سلسلة الاستعلام: --wildcardAll
invalidateDeletes
يبطل صحة المسارات للعناصر التي يتم حذفها من الهدف. مفيد في المواقف التي لا تريد فيها أن يتمكن المستخدمون من الوصول إلى العناصر بعد الآن: --invalidateDeletes
distribution
واحد أو أكثر من معرفات توزيع CloudFront (ملاحظة: هذا يتجاوز اكتشاف التوزيعات): --distribution <DIST ID> --distribution <ANOTHER DIST ID>
yes
تخطي جميع المطالبات التي تحتوي على إجابة "نعم" (ملاحظة: سوف يحذرك websync إذا تم إجراء أكثر من 500 إبطال، لأن هذا سيتطلب الدفع): --yes
ملاحظة : تتوفر المزيد من الخيارات في ملفات التكوين
ملاحظة : تتجاوز جميع وسيطات سطر الأوامر خيارات ملف التكوين. بالإضافة إلى ذلك، source
target
مطلوبان ، ولكن يمكن توفيرهما بواسطة سطر الأوامر (CLI) أو ملف التكوين
يمكن أن توفر ملفات التكوين جميع الخيارات المتاحة من واجهة سطر الأوامر (CLI) مع إضافة modifiers
، وهو نظام مرن لتوفير وسيطات واضحة لعمليات وضع S3.
الكائن المعدل لملف التكوين هو كائن تكون keys
فيه هي Glob Patterns، values
هي S3.putObject Params
أو دالة تُرجع إما S3.putObject Params
أو Promise الذي يحل S3.putObject Params
. لاحظ أنه إذا تم توفير دالة (غير متزامنة أم لا)، فسيتم استدعاؤها باستخدام وسيطة Item
واحدة تمثل الملف أو الكائن من حاوية SOURCE . ملاحظة : يمكن أن تتطابق الملفات المصدر مع معدّلات متعددة ، مما يسمح لأحدها بإبقاء الأشياء جافة.
تكوين جافا سكريبت. انظر المثال للسياق.
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 ,
} ) ,
} ,
}
تكوين جيسون. انظر المثال للسياق. في المثال أدناه، يطابق النمط !*.*
أي عنصر بدون امتداد ، أي "صفحة أخرى"، ويتجاوز Content-Type
الضمني بـ text/html
للحصول على مسارات نظيفة لموقع ويب ثابت بسيط.
{
"source" : " ./public " ,
"target" : " s3://websync-basic-example-bucket " ,
"exclude" : " *.exclude " ,
"modifiers" : {
"!*.*" : {
"ContentType" : " text/html "
}
}
}
كائن Item
الخاص بـ Websync عبارة عن واجهة تمثل بشكل تجريدي إما ملفًا محليًا أو كائن S3
. فيما يتعلق Configuration File
، يكون كائن Item
الذي تم تمريره إلى وظيفة modifier
دائمًا من الحاوية المصدر (الدليل المحلي، أو حاوية S3
). تلتزم جميع Item
بالواجهة التالية:
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 >
}
يقوم نظام إبطال Websync تلقائيًا بإنشاء الحد الأدنى من مسارات الإبطال المطلوبة لاستيعاب سياسة wildcard
المتوفرة. يتم ذلك عن طريق إنشاء diff
بين الهدف source
وشجرتين: أحد العناصر الموجودة في diff
وجميع العناصر الموجودة في target
. ثم يقوم بعد ذلك بالتجول في شجرة diff
(بدءًا من الجذر) ويقارن عدد الأطفال الذين تم إبطالهم مع عدد الأطفال الذين لم يتم إبطالهم - وهذا هو المكان الذي تُحدث فيه سياسة wildcard
كل الفرق. بالإضافة إلى ذلك، سيكتشف websync متى يجب على مسار معين يتم حرف البدل إبطال جميع أبنائه، أو أبنائه المباشرين فقط، وبالتالي إنتاج مسارات الإبطال الأمثل.
ملاحظة : لا يغير خيار wildcardAll
إنشاء مسار الإبطال، بل يتم إلحاق أحرف البدل بكل مسار يتم إنشاؤه. يعد هذا مفيدًا لإبطال مسارات سلسلة الاستعلام لكائن معين، وما إلى ذلك.
لمزيد من المعلومات حول كيفية عمل عمليات الإبطال على CloudFront، يرجى الرجوع إلى وثائق AWS.
تحدد سياسات أحرف البدل متى سيتم إضافة أحرف البدل لمسار معين، وبالتالي إبطال جميع أبنائه المباشرين أو فقط، لتقليل عدد مسارات الإبطال التي تم إنشاؤها. السياسات الثلاثة المتاحة من الأقل صرامة إلى الأكثر صرامة تشمل minority
majority
unanimous
.
يتم وضع حرف البدل على مسار معين عندما يتم إبطال أقلية من توابعه. ملاحظة : يؤدي هذا دائمًا إلى مسار إبطال /*
، عندما تكون عمليات الإبطال مطلوبة.
جميع العناصر المستهدفة:
/
/css
main.css
vendor.css
/js
main.js
index.html
العناصر الباطلة:
/
index.html
مسارات الإبطال:
/*
يتم وضع حرف البدل على مسار معين عندما يتم إبطال أغلبية أبنائه.
جميع العناصر المستهدفة:
/
/css
main.css
vendor.css
/js
main.js
index.html
العناصر الباطلة:
/
/css
main.css
vendor.css
index.html
مسارات الإبطال:
/css/*
/index.html
يتم وضع حرف بدل على مسار معين عندما يتم إبطال جميع أبنائه.
جميع العناصر المستهدفة:
/
/css
main.css
vendor.css
/js
main.js
index.html
العناصر الباطلة:
/
/css
main.css
/js
/main.js
index.html
مسارات الإبطال:
/css/main.css
/js/*
/index.html