AWS S3 の特徴まとめ

AWSを使っている人全員が触ったことがあるであろうS3。整理のためのメモ。

  • データを複数の場所に複製するという特徴から、データの更新・削除には結果整合性が採用されている
  • Getでファイルをダウンロードできる
  • Putでファイルをアップロード(新規/更新)できる(最大5GBまでだが、Multipart Uploadを利用すると5TBまで可能)
  • Listでオブジェクト一覧を取得できる(最大1000件まで)
  • Copyでオブジェクトを複製できる(最大5GBまでだが、Multipart Uploadを利用すると5TBまで可能)
  • Deleteでオブジェクトを削除できる(最大1000個)
  • Headでオブジェクトのメタデータを取得できる
  • RestoreでアーカイブされたオブジェクトをS3に取り出すことができる
  • ユーザーポリシー/バケットポリシー/ACLを用いたアクセス権の決定ができる
  • Get/Putについては、Pre-signed URLを利用することでセキュアに操作を行うことができる
  • 静的なwebサイトをホスティング可能
  • AJAXなどを利用して、異なるドメインからS3でホスティングしているファイルにアクセスしたい場合にはCORSの設定をする
  • ホスティングの際は、CloudFrontとともに使うことを推奨
  • VPC Endpointを利用すると、VPC内のPrivate SubnetからNAT GatewayやNATインスタンスを経由せずに直接S3とセキュアに通信ができる(同一リージョンの場合のみ)
  • クロスリージョンレプリケーションを用いると、異なるリージョン間でオブジェクトのレプリケーションが可能
  • バージョン管理が可能(バケットに対して設定する)
  • ライフサイクル管理を用いると、バケット全体/Prefixに対して、日単位でのストレージクラスの変更/削除処理が可能
  • オブジェクトをアーカイブすると、データはGlacierに移動する
  • S3インベントリを利用すると、オブジェクトのリストをcsvとして取得できる
  • バケットにイベントが発生した際に、SNS/SQS/Lambdaなどに通知(連携)することができる
  • LambdaでS3バケットのイベントを利用したい場合は、Lambdaが利用するIAM RoleにS3の権限を付与する必要がある
  • 大きなサイズのファイルをダウンロードする際にRange Getを利用することで、マルチスレッド環境で高速なダウンロードが可能(Multipart Upload時と同じチャンクサイズを利用)
  • Multipart Uploadはチャンクサイズと並列コネクション数のバランスが重要
  • ファイルが100MBを超える場合に、Multipart Uploadの利用が推奨される
  • Multipart Uploadでは各チャンクは5GB以下である必要がある
  • バケットへのリクエストが定常的に数百RPSを超える場合は、キー名の先頭部分の文字列をランダムにすると良い

参考になるサイト・スライド

aws.amazon.com

www.slideshare.net