Websync는 자동 CloudFront 무효화 등을 갖춘 aws s3 sync 와 같습니다.
Websync 동기화는 aws s3 sync 대체하기 위한 것입니다. AWS cli와 마찬가지로 Websync는 로컬 디렉터리를 s3 접두사로 동기화하거나 그 반대로 동기화합니다. Websync는 연결된 CloudFront 배포에서 최적화된 무효화를 자동으로 생성하고 JSON 또는 JavaScript와 프로그래밍 방식 API를 사용하여 표현 구성 시스템(CLI 인터페이스 상단에)을 노출함으로써 이러한 기능을 확장합니다.
# 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 또는 기본값: modtime 의 size ): --diffBy sizewildcardPolicy 와일드카드 정책( majority , unanimous 또는 minority (기본값: majority ))를 재정의합니다. --wildcardPolicy unanimouswildcardAll 모든 무효화 경로에 와일드카드를 추가합니다(참고: 이는 무효화 경로 확인을 변경하지 않음). 쿼리 문자열 경로를 무효화하는 데 유용합니다. --wildcardAllinvalidateDeletes 대상에서 삭제 되는 항목의 경로를 무효화합니다. 사용자가 더 이상 항목에 액세스할 수 없도록 하려는 상황에 유용합니다. --invalidateDeletesdistribution 하나 이상의 CloudFront 배포 ID(참고: 이는 배포 검색을 재정의함): --distribution <DIST ID> --distribution <ANOTHER DIST ID>yes "yes" 응답으로 모든 프롬프트를 건너뜁니다. (참고: 500개 이상의 무효화가 발생하면 결제가 필요하므로 websync에서 경고를 표시합니다.): --yes참고 : 구성 파일에서 더 많은 옵션을 사용할 수 있습니다.
참고 : 모든 명령줄 인수는 구성 파일 옵션을 무시합니다 . 또한 source 와 target 필수 이지만 CLI 또는 구성 파일을 통해 제공될 수 있습니다.
구성 파일은 S3 put 작업에 명시적 인수를 제공하는 유연한 시스템인 modifiers 추가하여 CLI에서 사용할 수 있는 모든 옵션을 제공할 수 있습니다.
구성 파일의 수정자 객체는 keys Glob Patterns이고 values 이 S3.putObject Params 이거나 S3.putObject Params 또는 S3.putObject Params 해결하는 Promise를 반환하는 함수인 객체입니다. 함수가 제공되면(비동기 여부와 상관없이) SOURCE 컨테이너의 파일이나 객체를 나타내는 단일 Item 인수를 사용하여 호출됩니다. 참고 : 소스 파일은 여러 수정자와 일치할 수 있으므로 항목을 DRY 상태로 유지할 수 있습니다.
자바스크립트 구성. 상황에 대한 예를 참조하세요.
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 구성. 상황에 대한 예를 참조하세요. 아래 예에서 !*.* 패턴은 확장자가 없는 모든 항목(예: "another-page")과 일치하고 묵시적인 Content-Type text/html 로 재정의하여 간단한 정적 웹 사이트에 대한 명확한 경로를 갖습니다.
{
"source" : " ./public " ,
"target" : " s3://websync-basic-example-bucket " ,
"exclude" : " *.exclude " ,
"modifiers" : {
"!*.*" : {
"ContentType" : " text/html "
}
}
} Websync의 Item 객체는 로컬 파일이나 S3 객체를 추상적으로 나타내는 인터페이스입니다. Configuration File 과 관련하여 modifier 함수에 전달된 Item 객체는 항상 소스 컨테이너(로컬 디렉터리 또는 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 정책을 수용하는 데 필요한 최소한의 무효화 경로를 자동으로 생성합니다. 이는 대상과 source 의 diff 와 두 개의 트리, 즉 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