Websync は、CloudFront の自動無効化などを備えたaws s3 syncと似ています。
Websync 同期は、 aws s3 syncの代替となることを目的としています。 Websync は、AWS cli と同様に、ローカル ディレクトリを 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 、またはデフォルトのsize : modtime ) をオーバーライドします: --diffBy sizewildcardPolicyワイルドカード ポリシーをオーバーライドします ( majority 、 unanimous 、またはminority (デフォルト: majority )): --wildcardPolicy unanimouswildcardAllすべての無効化パスにワイルドカードを追加します (注: これによって無効化パスの解決は変わりません)。クエリ文字列パスの無効化に役立ちます: --wildcardAllinvalidateDeletesターゲットから削除される項目のパスを無効にします。ユーザーが項目にアクセスできないようにする場合に便利です: --invalidateDeletesdistribution 1 つ以上の CloudFront ディストリビューション ID (注: これはディストリビューションの検出をオーバーライドします): --distribution <DIST ID> --distribution <ANOTHER DIST ID>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 に保つことができます。
JavaScript の設定。コンテキストについては例を参照してください。
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でオーバーライドして、単純な静的 Web サイトのクリーンなパスを設定します。
{
"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ポリシーに対応するために必要な最小限の無効化パスを自動的に作成します。これは、 target とsourceのdiffと、 diff内の項目の 1 つとtarget内のすべての項目の 2 つのツリーを作成することによって行われます。次に、 diff (ルートから開始) をたどって、無効化されている子の数と無効になっていない子の数を比較します。ここでwildcardポリシーが大きな違いを生みます。さらに、websync は、ワイルドカード化されている特定のパスがそのすべての子または直接の子のみを無効にする必要がある場合を検出し、それによって最適な無効化パスを生成します。
注: wildcardAllオプションは無効化パスの生成を変更しません。むしろ、生成されたすべてのパスにワイルドカードが追加されます。これは、特定のオブジェクトなどのクエリ文字列パスを無効にする場合に便利です。
CloudFront での無効化の仕組みの詳細については、AWS ドキュメントを参照してください。
ワイルドカード ポリシーは、指定されたパスがいつワイルドカード化されるかを決定します。これにより、その直接の子すべてまたは一部のみを無効にして、生成される無効化パスの数を減らします。利用可能な 3 つのポリシーには、最も厳格でないものから最も厳格なものまで、 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