Memo/AmazonWebServices/awscli/S3

https://dexlab.net:443/pukiwiki/index.php?Memo/AmazonWebServices/awscli/S3
 

S3

  • バケット作成:LocationConstraint?を指定しないとus-east-1に作成される
    aws s3api create-bucket --bucket mybucket --create-bucket-configuration LocationConstraint=ap-northeast-1
  • その他
    # バケット一覧
    aws s3 ls s3://mybucket
    
    # s3バケットを再帰的にローカルにコピー
    aws s3 cp s3://mybucket/myfolder myfolder --recursive
    
    # s3バケットとローカルを同期
    aws s3 sync s3://mybucket/myfolder myfolder --exclude *.tmp
    
    # デフォルトに指定したリージョン以外の操作には --region オプションを付ける
    aws s3 cp s3://mybucket/myfolder myfolder --recursive --region ap-northeast-1
  • バケット内一括削除。確認は無いので注意
    aws s3 rm s3://mybucket/ --recursive
  • バケットライフサイクルの指定。JSONが複雑なのでManagement Consoleで設定して、その値を取得すると楽
    aws s3api get-bucket-lifecycle --bucket mybucket > bucket-lifecycle.30.json
    
    cat bucket-lifecycle.30.json 
    {
        "Rules": [
            {
                "Status": "Enabled",
                "Prefix": "",
                "Expiration": {
                    "Days": 30
                },
                "ID": "lifecycle-30"
            }
        ]
    }
    
    aws s3api put-bucket-lifecycle --bucket mybucket --lifecycle-configuration file://bucket-lifecycle.30.json

ファイル数と合計ファイルサイズ

  • このコマンドはオブジェクトが多いと非常に遅い。CloudWatch?のメトリクスを参照した方が良い
    aws s3 ls s3://my-bucket/ --recursive --human --sum --profile example
    ...
    Total Objects: 14
       Total Size: 56.5 KiB

署名付きオブジェクトURLの生成

  • AWS CLI v1.10.59から presign が実装された。例:1時間で有効期限が切れるURLを発行。IAMでS3Readonly権限を付与したアカウントを用意した後、
    aws s3 presign s3://mybucket/example.txt --expires-in 3600
  • AWS CLI(2015-10-15)では未実装だが、botoに実装済みなので、短いスクリプトで生成できるようだ

S3 cp: ワイルドカードを使う

  • 以下のような指定はできない。
    aws s3 cp s3://mybucket/logs/*.log ./
  • --recursive --exclude "*" --include "..." を使う
    aws s3 cp s3://mybucket/ ./ --recursive --exclude "*" --include "*.log"

S3 sync

  • 例: test01とtest02だけをダウンロードしたい
    mybucket
      |-test01
      |-test02
      |-test03
aws s3 sync s3://mybucket/ ./ --exclude "*" --include "test01/*" --include "test02/*"

S3のbucket policy取得

AWS_PROFILE=default
for bucket in $(aws --profile $AWS_PROFILE s3api list-buckets --query "Buckets[].[Name]" --output text); do \
region=$(aws --profile $AWS_PROFILE s3api get-bucket-location --bucket $bucket --output text); \
echo "---- $bucket"; \
aws --profile $AWS_PROFILE --region $region s3api get-bucket-policy --bucket $bucket; \
done > $AWS_PROFILE.s3.bucket-policy.json

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-10-16 (火) 17:36:57 (32d)