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 버킷): ./myDirectory
target
대상 컨테이너(S3 버킷 또는 로컬 디렉터리): s3://my-bucket
config
명시적 구성 파일(JSON 또는 JavaScript): --config ./myConfig.json
include
파일(소스에서)을 필터링하는 Glob 패턴: --include **/*.ext
exclude
파일(소스에서)을 필터링하는 Glob 패턴: --exclude **/*.ext
diffBy
항목을 비교하는 속성 재정의( modtime
또는 기본값: modtime
의 size
): --diffBy size
wildcardPolicy
와일드카드 정책( majority
, unanimous
또는 minority
(기본값: majority
))를 재정의합니다. --wildcardPolicy unanimous
wildcardAll
모든 무효화 경로에 와일드카드를 추가합니다(참고: 이는 무효화 경로 확인을 변경하지 않음). 쿼리 문자열 경로를 무효화하는 데 유용합니다. --wildcardAll
invalidateDeletes
대상에서 삭제 되는 항목의 경로를 무효화합니다. 사용자가 더 이상 항목에 액세스할 수 없도록 하려는 상황에 유용합니다. --invalidateDeletes
distribution
하나 이상의 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
있습니다.
소수의 하위 항목이 무효화되면 지정된 경로가 와일드카드로 표시됩니다. 참고 : 무효화가 필요한 경우 항상 /*
무효화 경로가 발생합니다.
모든 대상 항목:
/
/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