يشبه 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): ./myDirectorytarget (دلو S3 أو الدليل المحلي): s3://my-bucketconfig ملف التكوين الصريح (JSON أو JavaScript): --config ./myConfig.jsoninclude نمط Glob لتصفية الملفات (من المصدر) ليشمل: --include **/*.extexclude نمط Glob لتصفية الملفات (من المصدر) لاستبعاد: --exclude **/*.extdiffBy التي يتم من خلالها تمييز العناصر ( modtime أو size الافتراضي: modtime ): --diffBy sizewildcardPolicy تجاوز سياسة البدل ( majority ، unanimous ، أو minority بشكل افتراضي: majority ): --wildcardPolicy unanimouswildcardAll إلحاق أحرف بدل بجميع مسارات الإبطال (ملاحظة: هذا لا يغير دقة مسار الإبطال)، وهو مفيد لإبطال مسارات سلسلة الاستعلام: --wildcardAllinvalidateDeletes يبطل صحة المسارات للعناصر التي يتم حذفها من الهدف. مفيد في المواقف التي لا تريد فيها أن يتمكن المستخدمون من الوصول إلى العناصر بعد الآن: --invalidateDeletesdistribution واحد أو أكثر من معرفات توزيع 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 .
يتم وضع حرف البدل على مسار معين عندما يتم إبطال أقلية من توابعه. ملاحظة : يؤدي هذا دائمًا إلى مسار إبطال /* ، عندما تكون عمليات الإبطال مطلوبة.
جميع العناصر المستهدفة:
//cssmain.cssvendor.css/jsmain.jsindex.htmlالعناصر الباطلة:
/index.htmlمسارات الإبطال:
/*يتم وضع حرف البدل على مسار معين عندما يتم إبطال أغلبية أبنائه.
جميع العناصر المستهدفة:
//cssmain.cssvendor.css/jsmain.jsindex.htmlالعناصر الباطلة:
//cssmain.cssvendor.cssindex.htmlمسارات الإبطال:
/css/*/index.htmlيتم وضع حرف بدل على مسار معين عندما يتم إبطال جميع أبنائه.
جميع العناصر المستهدفة:
//cssmain.cssvendor.css/jsmain.jsindex.htmlالعناصر الباطلة:
//cssmain.css/js/main.jsindex.htmlمسارات الإبطال:
/css/main.css/js/*/index.html