Gzip およびカスタムヘッダーサポート (「Cache-Control」など) を使用して、静的ウェブサイトを Amazon S3 および CloudFront にデプロイするためのシンプルなツール。 ETag ハッシュを使用してファイルが変更されたかどうかを確認するため、Hugo などの静的サイト ジェネレーターと組み合わせるのが最適です。
事前に構築されたバイナリはここにあります。
s3deployは Go アプリケーションであるため、次の方法で最新バージョンをインストールすることもできます。
go install github.com/bep/s3deploy/v2@latest
Homebrew を使用して MacOS にインストールするには:
brew install bep/tap/s3deploy
注:上記の醸造タップは現在 v2.8.1 で停止しています。詳細については、この号を参照してください。
s3deploy
、CircleCI などの継続的統合ツールと併用するのに最適なツールであることに注意してください。 CircleCI で s3deploy を使用するチュートリアルについては、これを参照してください。
s3deploy -h
実行によるフラグのリスト:
-V print version and exit
-acl string
provide an ACL for uploaded objects. to make objects public, set to 'public-read'. all possible values are listed here: https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-acl (default "private")
-bucket string
destination bucket name on AWS
-config string
optional config file (default ".s3deploy.yml")
-distribution-id value
optional CDN distribution ID for cache invalidation, repeat flag for multiple distributions
-endpoint-url string
optional endpoint URL
-force
upload even if the etags match
-h help
-ignore value
regexp pattern for ignoring files, repeat flag for multiple patterns,
-key string
access key ID for AWS
-max-delete int
maximum number of files to delete per deploy (default 256)
-path string
optional bucket sub path
-public-access
DEPRECATED: please set -acl='public-read'
-quiet
enable silent mode
-region string
name of AWS region
-secret string
secret access key for AWS
-skip-local-dirs value
regexp pattern of files of directories to ignore when walking the local directory, repeat flag for multiple patterns, default "^\/?(?:\w+\/)*(\.\w+)"
-skip-local-files value
regexp pattern of files to ignore when walking the local directory, repeat flag for multiple patterns, default "^(.*/)?/?.DS_Store$"
-source string
path of files to upload (default ".")
-strip-index-html
strip index.html from all directories expect for the root entry
-try
trial run, no remote updates
-v enable verbose logging
-workers int
number of workers to upload files (default -1)
フラグは、次のいずれか (優先順位) で設定できます。
s3deploy -path public/
S3DEPLOY_
というプレフィックスが付いた OS 環境変数として (例: S3DEPLOY_PATH="public/"
。.s3deploy.yml
のキー/値として、例: path: "public/"
key
とsecret
解決では、OS 環境変数AWS_ACCESS_KEY_ID
およびAWS_SECRET_ACCESS_KEY
(およびAWS_SESSION_TOKEN
) もチェックされます。この方法では、AWS Vault や同様のツールで動作させるために特別な操作を行う必要はありません。 .s3deploy.yml
内の${VAR}
形式の環境変数式は、解析される前に展開されます。
path : " ${MYVARS_PATH} "
max-delete : " ${MYVARS_MAX_DELETE@U} "
int フィールドの特別な@U
( Unquote ) 構文に注意してください。
オプション-skip-local-dirs
および-skip-local-files
Unix スタイルのパス区切り文字を使用して、ソース ディレクトリからの相対パスと照合します。ソース ディレクトリは で表されます.
、残りは/
で始まります。
オプション-strip-index-html
ルート エントリを除くすべてのディレクトリからindex.html を削除します。これは、hugodeploy の (ほぼ) 同じ名前のオプションと一致します。これにより、S3 バケットオリジンを使用した CloudFront ディストリビューションなど、一部のユースケースに必要なクラウド構成が簡素化されます。詳細については、この PR をご覧ください。
.s3deploy.yml
構成ファイルには 1 つ以上のルートを含めることもできます。ルートは、正規表現が指定されたファイルと一致します。各ルートは以下を適用できます。
header
: ヘッダー値。最も注目すべきはおそらくCache-Control
です。 S3 が現在サポートし、静的サイトをホストするときに HTTP ヘッダーとして返すシステム定義のメタデータのリストは非常に短いことに注意してください。より高度な要件 (セキュリティ ヘッダーなど) がある場合は、このコメントを参照してください。
gzip
: S3 に保存するときにコンテンツを gzip するには true に設定します。これにより、S3 からオブジェクトを取得するときに正しいContent-Encoding
設定されます。
例:
routes :
- route : " ^.+ \ .(js|css|svg|ttf)$ "
# cache static assets for 1 year.
headers :
Cache-Control : " max-age=31536000, no-transform, public "
gzip : true
- route : " ^.+ \ .(png|jpg)$ "
headers :
Cache-Control : " max-age=31536000, no-transform, public "
gzip : false
- route : " ^.+ \ .(html|xml|json)$ "
gzip : true
https://docs.aws.amazon.com/sdk-for-go/api/aws/session/#hdr-Sessions_from_Shared_Config を参照してください。
AWS SDK
~/.aws/credentials
の認証情報にフォールバックします。
AWS_SDK_LOAD_CONFIG
環境変数を設定すると、 ~/.aws/config
から共有設定もロードされ、指定されていない場合に使用するグローバルregion
を設定できます。
{
"Version" : " 2012-10-17 " ,
"Statement" :[
{
"Effect" : " Allow " ,
"Action" :[
" s3:ListBucket " ,
" s3:GetBucketLocation "
],
"Resource" : " arn:aws:s3:::<bucketname> "
},
{
"Effect" : " Allow " ,
"Action" :[
" s3:PutObject " ,
" s3:PutObjectAcl " ,
" s3:DeleteObject "
],
"Resource" : " arn:aws:s3:::<bucketname>/* "
}
]
}
自分のものに置き換えてください。
S3 バケットの前に CloudFront CDN を設定している場合は、 distribution-id
フラグとして指定できます。これにより、S3 へのデプロイ後に更新されたファイルのキャッシュが確実に無効になります。 AWS ユーザーは必要なアクセス権を持っている必要があることに注意してください。
CloudFront では毎月 1,000 のパスが無料で許可されるため、S3deploy は無効化戦略について賢明に対応しようとすることに注意してください。パスの数を 8 に減らそうとします。それが不可能な場合は、完全な無効化 (たとえば「/*」) に戻ります。
{
"Version" : " 2012-10-17 " ,
"Statement" : [
{
"Effect" : " Allow " ,
"Action" : [
" s3:ListBucket " ,
" s3:GetBucketLocation "
],
"Resource" : " arn:aws:s3:::<bucketname> "
},
{
"Effect" : " Allow " ,
"Action" : [
" s3:PutObject " ,
" s3:DeleteObject " ,
" s3:PutObjectAcl "
],
"Resource" : " arn:aws:s3:::<bucketname>/* "
},
{
"Effect" : " Allow " ,
"Action" : [
" cloudfront:GetDistribution " ,
" cloudfront:CreateInvalidation "
],
"Resource" : " * "
}
]
}
s3deploy
を見ている場合は、おそらくaws s3 sync
コマンドをすでに見たことがあるでしょう。このコマンドには、静的サイト用に最適化されていない同期戦略があり、ファイルのタイムスタンプとサイズを比較して、ファイルをアップロードするかどうかを決定します。ファイル。
静的サイトジェネレーターはすべてのファイル (同一であっても) を再作成できるため、タイムスタンプが更新されるため、 aws s3 sync
すべてのファイルを不必要にアップロードします。一方、 s3deploy
etag ハッシュをチェックして実際の変更を確認し、代わりにそれを使用します。