🕌

s3関連を素人ながらまとめる

2023/12/11に公開

概要

なんとなくs3を使用しているから、立ち止まってできるだけ詳しくまとめたい。

経緯

恥ずかしながらawsサービスに詳しくない現状の自分ですが、お手軽というイメージがある、ストレージサービスであるということもあり、s3に関しては触る機会が多いです。

ただここで完全に理解した状態に持っていくために自分の中で一度体型的に整理したい。

定義

s3:
Simple Storage serviceの略称。AWSが提供するオブジェクトストレージサービスであり、最高水準のスケーラビリティ、データ可用性、セキュリティ、及びパフォーマンスを提供してくれる。

データレイクや、ウェブサイト、ネイティブアプリケーションやバックアップ、機械学習など様々なユースケースのあらゆる量のデータを保存し、99.999999999% (9 x 11) の耐久性を実現するような設計の下でデータを保護するサービスとなっている。

https://aws.amazon.com/jp/pm/serv-s3/?gclid=Cj0KCQiA4NWrBhD-ARIsAFCKwWshlGaWL9WaTfbPbCc-JlfugVeW9DkfVNYyadTn7c2IWk-DhdWP_JsaAgxNEALw_wcB&trk=7307ac43-21ab-472b-91fc-d397a3762850&sc_channel=ps&ef_id=Cj0KCQiA4NWrBhD-ARIsAFCKwWshlGaWL9WaTfbPbCc-JlfugVeW9DkfVNYyadTn7c2IWk-DhdWP_JsaAgxNEALw_wcB:G:s&s_kwcid=AL!4422!3!530706637385!e!!g!!s3

概念としては大まかに以下。

オブジェクト

- s3にて保存する一つ一つのデータの名称。ファイルと、そのファイルを記述している任意のメタデータのことを指している。

バケット

- s3にデータを保存するために用いるオブジェクトのコンテナを指す。

ストレージクラス

- s3が提供している、データアクセス、復元力及びコスト要件に基づいて選択できる様々なオブジェクトの全てで使用されるメタデータのこと。
- 一覧に関しては、以下のように分かれている。
	- アクセスパターンが不明または変化するデータに対して自動的にコストを削減する S3 Intelligent-Tiering
	- アクセス頻度の高いデータ向けの S3 Standard、アクセス頻度の低いデータ向けの S3 Standard-Infrequent Access (S3 Standard-IA) および S3 One Zone-Infrequent Access (S3 One Zone-IA)
	- 即時アクセスを必要とするアーカイブデータ向けの S3 Glacier Instant Retrieval
	- 即時アクセスを必要としないアクセス頻度の低い長期データ用の S3 Glacier Flexible Retrieval (旧 S3 Glacier)
	- クラウド上の最も低コストなストレージで数時間で取り出し可能な長期アーカイブやデジタル保存用の Amazon S3 Glacier Deep Archive (S3 Glacier Deep Archive) 

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/UsingObjects.html

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/UsingBucket.html

https://aws.amazon.com/jp/s3/storage-classes/

料金

基本的に最低料金の設定はなく、ストレージ価格、リクエストおよびデータ取得の価格、データ転送と転送アクセラレーション価格、データ管理とインサイト機能の価格、レプリケーション価格、変換とクエリ機能の価格の合計となっている。

実際に使用した分だけお支払いいただきます。最低料金の設定はありません。Amazon S3 のコスト構成要素は、ストレージ価格、リクエストとデータ取得の価格、データ転送と転送アクセラレーションの価格、データ管理とインサイト機能の価格、レプリケーションの価格、変換とクエリの機能の価格です。

ストレージ価格に関してはストレージクラス(Standard, Infrequent Access, One Zone-IA, Glacier Instant Retrieval, Glacier Flexible Retrieval, Glacier Deep Archive)によって変動する。

https://aws.amazon.com/jp/s3/pricing/?p=pm&c=s3&z=4

データ管理とセキュリティに関して:

バージョニング

同じバケット内でオブジェクトの複数のバリアントを保持する手段。バージョニングを有効にすることで、オブジェクトを誤って削除したり、上書きしたりしても復元が簡単に行うことができる。

デフォルトではバケットのS3バージョニングは無効になっているので、明治的に有効にする必要がある。

ライフサイクル

オブジェクトがコスト効率の高い方法で保存されるように管理するためのルールセット。別のストレージクラスにオブジェクトを移行するタイミングを定義するTransition actiionsもしくは期限切れのオブジェクトを削除する有効起源切れアクションの二種類のアクションがある。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/object-lifecycle-mgmt.html

暗号化

転送時 (Amazon S3 との間でデータを送受信するとき)と保存時 (Amazon S3 データセンター内のディスクに格納されているとき) にデータを保護するために、Secure Socket Layer/Transport Layer Security(SSL/TLS)またはクライアうんと側の暗号化を使用して、転送中のデータを保護できる。

保管時のデータを保護する際にサーバー側の暗号化もしくはクライアント側で暗号化して保存させることができたが、2023年1月5日以降はデフォルトでサーバー側の暗号化(SSE-S3)が適用されるようになる。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/UsingEncryption.html

アクセス管理

デフォルトではリソースの所有者のみがリソースにアクセスで浮きる。リソースの所有者はアクセスポリシーを作成することにより、オプションで他のユーザーにアクセス許可を付与できる。

リソース(バケットおよびオブジェクト)にアタッチするアクセスポリシーを指すリソースベースのポリシー、もしくはアカウント内のユーザーにアタッチするアクセスポリシーを指すユーザーベースのポリシーがある。

組み合わされるサービスに関して

lambda

s3にはイベントを設定して lambdaを呼び出すことができる。
シンプルにs3イベントをトリガーとして lambdaを呼び出すこともできるし、
sqsを挟んだり、eventbridge schedulerから呼び出したり、s3 objectlambdaにてs3へのGETリクエストに対するレスポンスをlambdaで加工できるサービスなどがある。

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-s3.html

https://engineers.fenrir-inc.com/entry/2022/04/20/104220

API及びSDK

s3でもSDKを用いて構築することができる。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/service_code_examples.html

S3 Analytics

このサービスを用いることで、s3のアクセス情報などの分析が表示されるので、適切なデータをいつ適切なストレージクラスに移行すべきかを判断する際などに用いることができる。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/analytics-storage-class.html

Trasfer Family

データ連携の際に、s3にファイルを送受信していただく際に、SFTP、FTPSなどのファイル送受信方法などもサポートするためのサービス。

BtoBのシステムにて、連携データを顧客システム上SFTPで連携したいなどの用途に用いる。

結論

素人ながらにまとめました。
全然s3の詳細まで網羅できていないから都度追記します。

備考

s3だけでこんなに奥が深いなら自分はどのサービスなら理解できるのだろうか...

参考文献

https://aws.amazon.com/jp/pm/serv-s3/?gclid=Cj0KCQiA4NWrBhD-ARIsAFCKwWshlGaWL9WaTfbPbCc-JlfugVeW9DkfVNYyadTn7c2IWk-DhdWP_JsaAgxNEALw_wcB&trk=7307ac43-21ab-472b-91fc-d397a3762850&sc_channel=ps&ef_id=Cj0KCQiA4NWrBhD-ARIsAFCKwWshlGaWL9WaTfbPbCc-JlfugVeW9DkfVNYyadTn7c2IWk-DhdWP_JsaAgxNEALw_wcB:G:s&s_kwcid=AL!4422!3!530706637385!e!!g!!s3

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/UsingObjects.html

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/UsingBucket.html

https://aws.amazon.com/jp/s3/storage-classes/

https://aws.amazon.com/jp/s3/pricing/?p=pm&c=s3&z=4

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/object-lifecycle-mgmt.html

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/UsingEncryption.html

Discussion