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を超える場合は、キー名の先頭部分の文字列をランダムにすると良い
参考になるサイト・スライド
www.slideshare.net