【AWS-SAA勉強記】第2回_Amazon S3編

この記事は作者本人がAWS-SAAの学習を通じて、曖昧や覚えづらい部分をサービス単位でまとめたものです。
特に、概要だけではイメージがわきづらいので、できるだけユースケースを活用して理解しやすいようにしています。
教材はSHOEISHAの[AWS教科書 AWS認定ソリューションアーキテクトアソシエイト テキスト＆問題集](https://www.amazon.co.jp/AWS%E6%95%99%E7%A7%91%E6%9B%B8-AWS%E8%AA%8D%E5%AE%9A%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%88%E3%82%A2%E3%82%BD%E3%82%B7%E3%82%A8%E3%82%A4%E3%83%88-%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%EF%BC%86%E5%95%8F%E9%A1%8C%E9%9B%86-%E7%85%A4%E7%94%B0-%E5%BC%98%E6%B3%95/dp/4798183261/ref=sr_1_5?crid=3FF4OG65DFJ67&dib=eyJ2IjoiMSJ9.T249byXp1rsbDxkYXfxXb6fI4BUDNVOMSaquZL-1mVpPGu6oOTJAj19zZAYJR86Jon6ca0-q7sg_Ial5s1cea15f4gmNEJG8LyNQfNCbzfRWbdc3QShULjB2kryq34xDUkL-inBJMmFaiNYCb3lq0OcIRowzNObcgxFyIO96gEzEfcAYd2dxcSG6AHyl5e2DAQpdDy0xOEQZb_sRAX47vahzwyOMS8huPEScwArE3A0.zBHSxW-BjHBATnQ5vd4s6NikPxikuDNRnvEEGpF7d6A&dib_tag=se&keywords=aws+%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%88+%E3%82%A2%E3%82%BD%E3%82%B7%E3%82%A8%E3%82%A4%E3%83%88&qid=1724027719&s=books&sprefix=AWS%2Cstripbooks%2C195&sr=1-5)を参考にしています。

## S3に関する曖昧な部分
S3は高い耐久性を備えたAWSのオブジェクトストレージです。ファイルタイプを問わず、実質無制限にオブジェクトを保管・共有することができます。
S3の中で、曖昧になりがちな部分は以下の通りです。（あくまでも私個人が曖昧であると感じた部分です）
* そもそもオブジェクトストレージとは？
* S3イベント通知（通知先のサービスは何があるのか）
* S3オブジェクトロック
* S3 Object Lambda
* 静的Webサイトホスティング

本記事では、これらの内容やユースケースについて解説していきます。

## そもそもオブジェクトストレージとは？
オブジェクトストレージは、データを「オブジェクト」という単位で保存する方法です。
なんとなくわかりますが、もう少し身近な例で考えてみます。

##### 例えば・・・
あなたがたくさんの写真を持っているとします。
それぞれの写真には、撮影日や場所、誰が写っているかなどの情報が付いていますよね。
この写真とその情報を一つの「オブジェクト」として保存するのがオブジェクトストレージです。
GoogleフォトやiCloud等がまさにこれに該当するサービスです！

GoogleフォトやiCloud等をイメージすると、オブジェクトストレージの特徴が分かりやすいですね。
* 大容量データの保存に適している
* 各オブジェクトにはメタデータ（データに関する情報）が付与されており、データの管理や検索が容易
* 必要に応じて簡単に容量を増やすことができるため、データ量が増えても対応可能

## S3イベント通知（通知先のサービスは何があるのか）
### 概要
Amazon S3のイベント通知は、S3バケットで特定のイベントが発生したときに通知を受け取ることができるようにする機能です。
これにより、他のAWSサービスと連携して自動的に処理を行うことができます。

サービス自体は容易に理解ができますが、**イベント通知の送信先**のサービスは何でもかんでも良いわけではありません。

### S3イベント通知の送信先
S3イベント通知の送信先のAWSサービスは以下の通りです。
|  頭文字  |  通知先のサービス  |  サービス概要  |
| ---- | ---- | ---- |
| **S** | Amazon SNS  |メッセージを他のシステムやユーザーにプッシュ通知するために使用 |
| **L** | AWS Lambda | カスタムコードを実行するために使用 |
| **S** | Amazon SQS | メッセージをキューに保存し、後で処理するために使用 |
| **E** | Amazon EventBridge | イベントを他のAWSサービスや外部アプリケーションにルーティングするために使用 |

強引ですが、私は各サービスの頭文字をとって「**SLSE**」と覚えるようにしました。

## S3オブジェクトロック
### 概要
Amazon S3のオブジェクトロックは、S3内のオブジェクトに書き込みや削除が行えないようにロックをかける機能です。
オブジェクトロックには、「ガバナンスモード」と「コンプライアンスモード」の2種類のモードがあり、ユースケースに応じて適切なモードを選択します。
### ガバナンスモードとコンプライアンスモードの使い分け
|  モード  |  内容  |
| ---- | ---- |
| ガバナンスモード | オブジェクトのバージョンを上書きや削除することができない。ただし、**一部の管理者ユーザにはリテンション設定の変更やオブジェクトの削除を許可**することもできます。 |
| コンプライアンスモード | コンプライアンスモードでは、保存期間中にオブジェクトのバージョンを上書きや削除ができない。 |

両者の違いは、**一部ユーザがオブジェクトの削除ができるかできないか**です。
**ガバナンスモード**は、取引データや顧客情報を法的に定められた期間保存する必要がある場合（例えば金融機関）に使用します。
**コンプライアンスモード**は、監査データを一定期間保存し、特定の管理者のみがアクセスできるようにする場合（例えば内部監査）に使用します。

## S3 Object Lambda
### 概要
Amazon S3 Object Lambdaは、**Amazon S3から取得するデータをアプリケーションに返す前に、カスタムコードを使用してデータを動的に処理・変換**できる機能です。
これにより、データの派生コピーを作成する必要がなく、アプリケーションの特定の要件に合わせてデータを柔軟に処理できます。

### ユースケース
S3 Object Lambdaの具体的なユースケースは以下のようなケースです。
* 機密データの編集: 取得したデータから機密情報を削除してからアプリケーションに返す。
* アプリケーションのリクエストに対して、画像の動的なリサイズ処理を施したうえで、データを渡す。

## 静的Webサイトホスティング
### 概要
Amazon S3の静的Webサイトホスティングは、その名の通りAmazon S3を使用して静的ウェブサイトをホストする機能です。
そもそもWebサイトの静的／動的とは何なのかをざっくりおさらいします。（作者自身が、なんとなくふわっとした理解だったので・・・）

#### 静的Webサイト
HTML、CSS、JavaScriptなどで作成され、**誰がアクセスしても同じ内容が表示**されます。
また、サーバからコンテンツを直接提供するため、表示速度が速いです。

企業の紹介ページとか個人ブログ等といったWebサイトは静的Webサイトです。

#### 動的Webサイト
Node.js、PHP、Javaなどで作成され、**ユーザーのリクエストに応じてサーバー側で処理が行われ、データベースから情報を取得してHTMLを生成**します。

商品の在庫状況や価格がリアルタイムで更新されるオンラインショップや、ユーザーの投稿やコメントがリアルタイムで反映されるSNSなどは動的Webサイトです。

### Amazon S3での静的Webサイトの公開方法
Amazon S3のバケット（オブジェクトの保存場所）に、HTML、CSS、JavaScript、画像およびその他のファイルを配置することにより、簡単に公開可能です。
バケットの静的Webサイトホスティングはデフォルトでは無効となっているので、これを有効にすることで公開可能となります。

また、要件に応じてバケットのアクセス許可も設定可能です。

なお、有効に設定するとき、Webサイトのインデックスドキュメント（デフォルトページ）やエラードキュメント（エラーページ）、およびリダイレクトルールを指定することができます。

## まとめ
本記事では、以下のサービスについて概要とユースケース等をまとめました。
* そもそもオブジェクトストレージとは？
* S3イベント通知（通知先のサービスは何があるのか）
* S3オブジェクトロック
* S3 Object Lambda
* 静的Webサイトホスティング

ちなみに・・・
S3はPOSIXには準拠していません。
問題文でPOSIXに準拠しているストレージが必要との記載があった場合は、Amazon EFSを選択しましょう。

次回は[【AWS-SAA勉強記】第3回_Amazon FSx編](https://qiita.com/sknp/items/edc09cfb15af0c468f59)です。