SAA試験対策レベルでAmazon S3の仕様についてまとめた

[^1]:250MB未満に限る

:::note info
2023年 4月現在の情報です。
:::

AWS SAA試験対策の個人的まとめです。
S3が関わってくる問題はテストで確実に出る範囲なので、一旦まとめておきます。

サービスの内容も結構ちょくちょく変わるのですが、例えば __S3のデータ整合性について、結果整合性から強い一貫性に変わっている__ ので、以前合格した方も見ておいて損はないかもしれません。

# S3とは

https://aws.amazon.com/jp/s3/

99.999999999%（以降11 9s）の耐久性を誇り、拡張性も非常に高いストレージサービスです。
SAAは勿論CPを受験される方もご存じかと思います。

## 用語
厳密には違うでしょうが、イメージ的にはこんな感じでよさそう。
| windows    | S3           | S3 Glacier   |
|:-----------|:-------------|:-------------|
| フォルダ    | バケット      | ボールト     |
| ファイル    | オブジェクト  | アーカイブ    |

### オブジェクト
S3の基本単位、ファイルと大体同じ。

### アーカイブ
S3 Glacierの基本単位、ファイルと大体同じ。

### バケット（bucket）
オブジェクト用のコンテナ、ディレクトリと大体同じ。

### ボールト（vault）
アーカイブを格納するコンテナ、ディレクトリと大体同じ。

### ライフサイクル
__「最初の3カ月は頻繁にアクセスされますが、それ以降はほぼアクセスされません。」__
__「このファイルは5年間保存されなければなりません。」__
という設問を見たことがあると思います。見たことない人はこれから見ます。
「3カ月後にS3 Glacier Deep Archiveに移行する」「5年後に削除」と言ったようなコスト効率を上げるための設定。

## S3の特徴
### キーバリューストア
一意のキー値を利用して保存できるオブジェクトストアです。
Management Consoleから見るとあたかもフォルダ構造になっているように見えますが、実態は __キーバリューストア__ なので、キーを指定してオブジェクトを取得します。

### オブジェクト当たりの容量
AWS SDK / REST API / AWS CLIからのPUTオペレーションでは __最大5GB__ のオブジェクトをアップロードできます。
S3 コンソールからのオペレーションでは __最大160GB__ のオブジェクトをアップロードできます。
AWS SDK / REST API / AWS CLIからのマルチパートアップロードAPIを利用したアップロードでは __最大5TB__ のオブジェクトをアップロードできます。100MBを超える場合、ネットワークエラーがしばしば起こる環境、安定したネットワークでの複数スレッドを利用できる環境でのアップロードに関してはマルチアップロードを利用することが推奨されています。

### リソースはデフォルトでプライベート
他のユーザーがアクセスするには署名付きURL、セキュリティ証明書、（ダウンロード用に）期限付きの許可が必要。

### ストレージ管理方法色々
__「誤ってデータを削除されないようにする必要があるが、ソリューションアーキテクトとしてできる対策はどれか。」__
という設問を見たことがあると思います。見たことない人はこれから見ます。

1つ目は __[S3バージョニング](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/versioning-workflows.html)__ を使用したバージョン管理です。削除されても復旧が可能になります。

2つ目は __[MFA Delete](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/MultiFactorAuthenticationDelete.html)__ を有効にすることです。MFA（多要素認証）の削除を有効にすることで、削除する前にMFA認証が必要になるため、誤操作による削除を防ぐことができます。

3つ目は __[オブジェクトロック](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/object-lock-overview.html)__ を使うことです。一定期間または無期限に削除や上書きを防止できます。
ただしいくつか注意点がありますのでセットで覚えておきましょう。
* オブジェクトレベル及びバケットレベルで設定する必要がある
* __新しいバケットに対してのみ__ 有効化できる（バケット作成後の有効化はできない）
* オブジェクトロックが有効化されたバケットを作成すると、 __自動でバージョニングも有効化__ される

# ストレージクラス
正しい用途で利用した場合の保存コストはS3標準が一番高く、順に安くなっていきS3 Glacier Deep Archiveが最安値となります。
## S3 標準
最も一般的なクラスです。
アクセス頻度：高い
レイテンシ：低い
取り出しまでの時間：即時
取り出し料金：無料
耐久性：11 9s
可用性：99.99%
AZ:3カ所以上

## S3 Intelligent-Tiering
アクセス頻度がよく分からないデータにお勧め。
いい感じにデータを移動してくれます。
アクセス頻度：不明
レイテンシ：低い
取り出しまでの時間：即時
取り出し料金：無料
耐久性：11 9s
可用性：99.9%
AZ：3カ所以上
備考：
・モニタリングとオートメーションに月額料金あり
・30日連続アクセスがないとIA階層に移動
・90日連続アクセスがないとArchive Instant階層に移動
・移動したオブジェクトにアクセスすると高頻度アクセス階層に戻る

## S3 標準 – IA（低頻度アクセス）
アクセス頻度：低い
レイテンシ：低い
取り出しまでの時間：即時
取り出し料金： __有料__
耐久性：11 9s
可用性：99.9%
AZ：3カ所以上

## S3 1 ゾーン – IA
アクセス頻度：低い
レイテンシ：低い
取り出しまでの時間：即時
取り出し料金： __有料__
耐久性：11 9s
可用性： __99.5%__
AZ：1カ所
　
　

ここからはデータアーカイブ用ストレージクラスこと __S3 Glacier（氷河）__ です。
　
## S3 Glacier Instant Retrieval
アクセス頻度：四半期に1回くらい
レイテンシ：低い
取り出しまでの時間：即時
取り出し料金： __有料__
耐久性：11 9s
可用性：99.9%
AZ：3カ所以上

## S3 Glacier Flexible Retrieval（旧S3 Glacier）
アクセス頻度：1年に1～2回くらい
レイテンシ：分または時間
取り出しまでの時間：数分から数時間
取り出し料金： __有料__
耐久性：11 9s
可用性：99.99%
AZ：3カ所以上

### 迅速取り出し
1～5分で取り出し可能 [^1]

### 標準取り出し
3～5時間で取り出し可能

### 大容量取り出し
5～12時間で取り出し可能

## S3 Glacier Deep Archive
アクセス頻度：1年に1～2回くらい
レイテンシ：時間
取り出しまでの時間：12時間以内
取り出し料金： __有料__
耐久性：11 9s
可用性：99.99%
AZ：3カ所以上
備考：
・7～10年以上保持されるデータ用に設計されている
・AWS Strage Gatewayの仮想テープライブラリ機能であるTape Gatewayと統合された

### 標準取り出し
12時間以内に取り出し可能

### 大容量取り出し
ペタバイト単位を含む大容量のデータを48時間以内に取り出し可能


## Amazon S3 on Outposts（AWS Outposts）
他のストレージクラスとは毛色が違いますが、簡単に書きます。
自分もよく分かっていないので･･････。

outpost：前哨基地：休止する部隊が敵状探索、奇襲防止などのため、その前面に配置する基地。

「オンプレで実行できるフルマネージド型のインフラストラクチャ」「お客様のサイトにデプロイされる AWS のコンピューティングおよびストレージキャパシティーのプール」だそうです。
要は物理サーバー・ラックのレンタルサービスですね。

リソースタイプがEC2, ECSクラスタ, EKSノード
ストレージがEBS, S3
分析とデータベースがEMR, ElastiCache, RDS DB
ネットワークがVPC, ALB, Sagemaker

などを組み合わせたラックやサーバーをレンタルできるサービス。

> Outpost サブネット内のインスタンスは、プライベート IP アドレスを使用して、AWS リージョン内の他のインスタンスと通信します。
これらはすべて同じ VPC 内にあります。

データをオンプレで保持するという企業コンプライアンスを守りつつAWS環境を使う運用ができそうですね。

## 参考
他にも見たページはありますが、全て公式ドキュメントを参考にしています。

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

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

https://aws.amazon.com/jp/s3/faqs/

https://docs.aws.amazon.com/ja_jp/outposts/latest/userguide/what-is-outposts.html

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