Websync เหมือนกับ aws s3 sync
พร้อมการทำให้ CloudFront ใช้งานไม่ได้โดยอัตโนมัติ และอื่นๆ อีกมากมาย
การซิงค์ Websync มีไว้เพื่อทดแทน aws s3 sync
Websync เช่นเดียวกับ AWS cli ซิงค์ไดเร็กทอรีในเครื่องด้วยคำนำหน้า s3 และในทางกลับกัน Websync ขยายคุณสมบัติเหล่านี้โดยการสร้างการใช้งานไม่ถูกต้องที่ ได้รับการปรับปรุง โดยอัตโนมัติบนการกระจาย CloudFront ที่เกี่ยวข้อง และเปิดเผยระบบการกำหนดค่าที่ชัดเจน (ที่ด้านบนของอินเทอร์เฟซ CLI) ด้วย JSON หรือ JavaScript และ API แบบเป็นโปรแกรม
# 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
แทนที่นโยบาย wildcard ( 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 และ 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 ,
} ) ,
} ,
}
การกำหนดค่า JSON ดูตัวอย่างสำหรับบริบท ในตัวอย่างด้านล่าง รูปแบบ !*.*
จะจับคู่รายการใดๆ ที่ ไม่มีส่วนขยาย เช่น "หน้าอื่น" และแทนที่ 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