S3
S3とは安価で非常に耐久性があるオブジェクトストレージです。
S3にデータを保存するには特定のリージョンにバケットを作成し、その中にKVS形式でファイルをアップロードすることができます。
各オブジェクトには一意となるURLが付与されアクセスが可能となります。
その為、バケット名はAWSの全アカウントで一意とする必要があり、既に使用されているバケットと同名のものは作成できません。
整合性に関して
S3は格納したデータを複数のデータセンタに複製することで非常に高いデータ耐久性を実現しています。
しかし、そのためにデータの整合性については注意が必要となります。
- 新しいオブジェクトの書き込み(PUT)
新規アップロード直後に一覧表示を実施してもそのオブジェクトが表示されないことがある。
S3から「完了」が返されると正常に一覧表示がされる。 - 既存オブジェクトの上書き(PUT)
既存オブジェクトを上書きし、S3から「完了」が返された後でも、そのオブジェクトにアクセスした際に上書き前データが返されることがある。
浸透が十分に済めば正常に上書き後のデータが返される。 - オブジェクトの削除
オブジェクトを削除し「完了」が返された後でも、削除したはずのオブジェクトにアクセスできることがある。
浸透が十分に済めば結果的に削除済みオブジェクトにアクセスできなくなる。
アクセス制限に関して
デフォルトではそのリソースを作成したアカウントだけにアクセス制限が与えられているが、バケットとオブジェクトには適切なアクセス制限をかける必要があります。
アクセス管理の方法には3つあります。
- アクセスコントロールリスト(ACL)
他のAWSアカウントにアクセス権限を与える場合。 - バケットポリシー
自分のAWSアカウント内のIAMユーザやグループにアクセス制限を与える場合。
バケット毎に設定。 - IAMポリシー
同上。
S3へのアクセス許可を設定したIAMポリシーを自アカウント内のIAMユーザやグループ、ロールに割り当てる。 - 署名(期限)付きURL
特定のオブジェクトに対し、特定のエンドユーザに対しアクセスさせたい場合等に適している。
通常のオブジェクトURLに対し、AWS側が発行したシグネチャー付きのURL。
バージョニング機能
S3にはバージョニング機能があり、バケット単位で有効にすることが可能です。
バージョニング機能を有効にしたバケットではオブジェクトを誤って上書きしたり削除した後でも、操作前のオブジェクトを復元することができます。
バージョニング機能を有効にしたバケットに格納されるオブジェクトにはキーの他にバージョンIDが付与されるため、上書きしたり削除した後でも操作前のオブジェクトを保持することができます。