回答:
これを行うには、AWSコンソール、コマンドライン、またはs3cmdコマンドラインツールの 3つの方法があります。
これが現在推奨されるソリューションです。簡単ですが、時間がかかる場合があります。
もともと、このバケットポリシーを作成したときはうまくいかなかったので、aws-cliを使用してそれを実行する方法を考えました。調査したところ、実際には例を見つけることができなかったので、困っている人を助けるための解決策をいくつか投稿したいと思いました。
注:デフォルトでは、aws-cliは、新しいメタデータを指定した場合でも、ファイルの現在のメタデータのみをコピーします。
コマンドラインで指定されたメタデータを使用するには、「-metadata-directive REPLACE」フラグを追加する必要があります。ここにいくつかの例があります。
単一ファイルの場合
aws s3 cp s3://mybucket/file.txt s3://mybucket/file.txt --metadata-directive REPLACE \
--expires 2034-01-01T00:00:00Z --acl public-read --cache-control max-age=2592000,public
バケット全体(--recursiveフラグに注意):
aws s3 cp s3://mybucket/ s3://mybucket/ --recursive --metadata-directive REPLACE \
--expires 2034-01-01T00:00:00Z --acl public-read --cache-control max-age=2592000,public
私が見つけたちょっとした落とし穴、それを特定のファイルタイプにのみ適用したい場合は、すべてのファイルを除外してから、必要なファイルを含める必要があります。
jpgとpngのみ:
aws s3 cp s3://mybucket/ s3://mybucket/ --exclude "*" --include "*.jpg" --include "*.png" \
--recursive --metadata-directive REPLACE --expires 2034-01-01T00:00:00Z --acl public-read \
--cache-control max-age=2592000,public
詳細が必要な場合は、マニュアルへのリンクをいくつか示します。
既知の問題点:
"Unknown options: --metadata-directive, REPLACE"
これは古いawscliが原因である可能性があります- 以下の@eliotRosewaterの回答を参照してください
S3cmdは、「Amazon S3およびCloudFrontサービスを管理するためのコマンドラインツール」です。このソリューションにはgit pullが必要ですが、よりシンプルで包括的なソリューションになる可能性があります。
詳細な手順については、以下の@ ashishyadaveee11の投稿を参照してください
それが役に立てば幸い!
cp
、ダウンロードと再アップロードすべてを?
これで、AWSコンソールから簡単に変更できます。
バケットファイルによっては実行に時間がかかります。誤ってブラウザを閉じてしまった場合は、最初からやり直してください。
ステップ
git clone https://github.com/s3tools/s3cmd
s3cmd --configure
(2つのキーの入力を求められます-確認メールまたはAmazonアカウントページからコピーして貼り付けます。コピーするときは注意してください。大文字と小文字が区別されるため、正確に入力する必要があります。そうしないと、無効に関するエラーが発生し続けます。署名など。s3:ListAllMyBuckets
キーに権限を追加することを忘れないでください。そうしないと、アクセスのAccessDenied
テスト中にエラーが発生します。)./s3cmd --recursive modify --add-header="Cache-Control:public ,max-age= 31536000" s3://your_bucket_name/
私の評判スコアが50を超えていたら、コメントします。しかし、それは(まだ)ではないので、ここで別の完全な答えを示します。
私はしばらくの間、この問題に頭を悩ませてきました。ドキュメントを見つけて読むまで。他の人を助ける場合に備えて、ここでそれを共有します。
結局、私のために確実に機能したのは、このコマンドでした。期待される結果を確認するために、テストに1秒の有効期限を選択しました。
aws s3 cp \
--metadata-directive REPLACE \
--cache-control max-age=1,s-maxage=1 \
s3://bucket/path/file \
s3://bucket/path/file
--metadata-directive REPLACE
「cp
」がS3の既存のファイルのメタデータを変更するときに必要ですmax-age
ブラウザのキャッシュ経過時間を秒単位で設定しますs-maxage
CloudFrontキャッシュを秒単位で設定します同様に、S3へのアップロード中にこれらのCache-Controlヘッダー値をファイルに設定すると、コマンドは次のようになります。
aws s3 cp \
--cache-control max-age=1,s-maxage=1 \
/local/path/file \
s3://bucket/path/file
これをバケットレベルで指定することはできないと思いますが、いくつかの回避策があります。
コピーcache-control
操作に適切なヘッダーを設定して、オブジェクトを S3のオブジェクト自体にコピーします。
ファイルのURLに応答ヘッダーを指定します。これを機能させるには、事前に署名されたURLを使用する必要がありますが、cache-control
およびを含むクエリ文字列で特定の応答ヘッダーを指定できますexpires
。使用可能なオプションの完全なリストについては、http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectGET.html?r = 5225を参照してください。
S3のPUTOBJECTでトリガーを使用してラムダをいつでも構成できます。ラムダは、単に配置されたこの特定のオブジェクトのヘッダーを変更するだけです。
次に、上記のコピーコマンドを最後にもう一度実行すると、すべての新しいオブジェクトがラムダによって修正されます。
ここから始めるのに良い場所です:https : //www.aaronfagan.ca/blog/2017/how-to-configure-aws-lambda-to-automatically-set-cache-control-headers-on-s3-objects /
ダンの答えを使用しようとしてエラーが発生した場合:
「不明なオプション:--metadata-directive、REPLACE」
私は問題に遭遇しました、そして問題は私が使用してawscliをインストールしたことでした
sudo apt-get install awscli
これにより、-metadata-directiveコマンドがない古いバージョンのawscliがインストールされました。そのため、sudo apt-get remove awscliを使用して削除しました。
その後、amazonからの手順に従って再インストールしました: http //docs.aws.amazon.com/streams/latest/dev/kinesis-tutorial-cli-installation.html
唯一の違いは、他の人にも遭遇する可能性のある権限の問題のために、sudo -Hを使用しなければならなかったことです。