Skip to content

S3

Amazon S3 provides object storage with 11 9s durability. High-level aws s3 commands cover day-to-day usage; aws s3api exposes the full OpenAPI surface.

Storage Classes

ClassUse CaseMinimum Storage
StandardHot data, frequent accessNone
Standard-IACool data, occasional access30 days
One Zone-IACool data, single AZ30 days
Intelligent-TieringAuto-tier based on accessNone
Glacier Instant RetrievalQuarterly access, ms retrieval90 days
Glacier Flexible RetrievalMinutes-to-hours retrieval90 days
Glacier Deep ArchiveLong-term, 12+ hour retrieval180 days

CLI

Buckets

bash
aws s3 mb s3://BUCKET_NAME --region us-east-1
aws s3 ls
aws s3 rb s3://BUCKET_NAME
aws s3 rb s3://BUCKET_NAME --force                # delete with contents

# Bucket policy / ACL (via s3api)
aws s3api get-bucket-policy --bucket BUCKET_NAME
aws s3api put-bucket-policy --bucket BUCKET_NAME --policy file://policy.json
aws s3api delete-bucket-policy --bucket BUCKET_NAME
aws s3api put-bucket-acl --bucket BUCKET_NAME --acl private

Objects

bash
aws s3 cp LOCAL_FILE s3://BUCKET_NAME/KEY
aws s3 cp s3://BUCKET_NAME/KEY ./
aws s3 cp s3://SRC_BUCKET/KEY s3://DST_BUCKET/KEY
aws s3 cp LOCAL_DIR s3://BUCKET_NAME/PREFIX/ --recursive

aws s3 ls s3://BUCKET_NAME/PREFIX/
aws s3 ls s3://BUCKET_NAME/ --recursive --human-readable --summarize

aws s3 mv s3://BUCKET_NAME/OLD s3://BUCKET_NAME/NEW
aws s3 rm s3://BUCKET_NAME/KEY
aws s3 rm s3://BUCKET_NAME/PREFIX/ --recursive

Sync

bash
aws s3 sync LOCAL_DIR s3://BUCKET_NAME/PREFIX/
aws s3 sync s3://BUCKET_NAME/PREFIX/ LOCAL_DIR
aws s3 sync LOCAL_DIR s3://BUCKET_NAME/PREFIX/ --delete   # mirror, removes extras
aws s3 sync LOCAL_DIR s3://BUCKET_NAME/PREFIX/ \
  --exclude "*.tmp" --include "*.log"

Storage Class

bash
aws s3 cp s3://BUCKET_NAME/KEY s3://BUCKET_NAME/KEY \
  --storage-class STANDARD_IA --metadata-directive COPY
aws s3 cp LOCAL_FILE s3://BUCKET_NAME/KEY \
  --storage-class INTELLIGENT_TIERING

Versioning

bash
aws s3api put-bucket-versioning \
  --bucket BUCKET_NAME \
  --versioning-configuration Status=Enabled
aws s3api list-object-versions --bucket BUCKET_NAME
aws s3api delete-object \
  --bucket BUCKET_NAME --key KEY --version-id VERSION_ID

Presigned URLs

bash
aws s3 presign s3://BUCKET_NAME/KEY --expires-in 3600    # presigned GET, 1 hour

Lifecycle Rules

bash
aws s3api put-bucket-lifecycle-configuration \
  --bucket BUCKET_NAME \
  --lifecycle-configuration file://lifecycle.json
aws s3api get-bucket-lifecycle-configuration --bucket BUCKET_NAME
aws s3api delete-bucket-lifecycle --bucket BUCKET_NAME

Reference:

  1. Official Website
  2. aws s3 vs s3api

Power by VitePress & Vue