Amazon S3 上の特定の拡張子のファイルのコンテンツ タイプを再帰的に変更する

Amazon S3 上の特定の拡張子のファイルのコンテンツ タイプを再帰的に変更する

ネストされた「フォルダ」構造を持つ大きな S3 バケットがあり、その中には静的な .json ファイルと .md ファイルなどが含まれています。これらのファイルは、text/plain正しい および ではなく、application/jsonとしてS3 によって提供されていますtext/markdown

新しいアップロードに正しいコンテンツ タイプが含まれるように、バケットのデフォルトを更新しました。

「ツリー」をたどって、特定の拡張子に一致するファイルのコンテンツ タイプを更新する最適な方法は何ですか?

答え1

以下は、aws cli ツールでこれを行う方法の例です。cp ツールでは再帰オプションを使用できますが、s3api ツールではできないと思います。この例では、多数の SVG を修正しています。実行する準備ができたら、--dryrun オプションを削除します。

aws s3 cp \
      --exclude "*" \
      --include "*.svg" \
      --content-type="image/svg+xml"  \
      --metadata-directive="REPLACE" \
      --recursive \
      --dryrun \
       s3://mybucket/static/ \
       s3://mybucket/static/

答え2

少し調べてみると、ツールでこれができることがわかりましたs3cmd。たとえば、JSON ファイルを application/json に設定するには、次のようにします。

s3cmd --recursive modify --acl-public \
       --add-header='content-type':'application/json' \
       --exclude '' --include '.json' \
       s3://bucket/

答え3

boto/python または別の AWS API を使用して手間をかけたくない場合は、フラグを使用して$ aws s3api copy-objectオブジェクト--content-typeをそれ自体にコピーし、新しいコンテンツ タイプを設定するのが最善の方法だと思います。

これがドキュメンテーションs3api 用。

言うまでもなく、バケット全体に対してこれを再帰的に実行する前に、まずこれをテストする必要があります。

答え4

前述のように、awsAmazon のツールを使用して s3api でオブジェクトをコピーし、それ自身にコピーしてmetadata-directive=REPLACEコンテンツ タイプを変更することができます。

これをここに記載するのは、データベースに保存されているファイル名を反復処理する必要がある場合があり、これが CLI を通じて実行できる方法だからです。

aws s3api copy-object \
          --content-type="application/vnd.android.package-archive" \
          --metadata-directive="REPLACE" \
          --copy-source "MYBUCKET/FILE.apk" \
          --bucket "MYBUCKET" \
          --key "FILE.apk" \
          --acl public-read

関連情報