【備忘】Amazon S3の概要_前編

# はじめに
##### ～AWS学習アウトプット第2弾～
AWS未経験者の私が学習したことをアウトプットし、将来的にはSAA合格を目指します。
今後も各サービスの学びを備忘として残していこうと思います！

今回は、 **Amazon S3** の基本的な内容をまとめます。
内容が多いため、前編後編に分けて整理していきますので、よろしければ次回もご覧ください！

# 目次
・Amazon S3とは
・Amazon S3の特徴
　拡張性(extensibility)
　耐久性(Durability)・可用性(Availability)
・データ保存方法
・S3の機能
　バージョニング
　MFA Delete
　ライフサイクルポリシー
　オブジェクトロック
　クロスリージョンレプリケーション
　マルチパートアップロード
　S3 Transfer Acceleration
　S3のデータ整合性モデル
　Webサイトホスティング
　署名付きURL
・おわりに
・参考


# Amazon S3とは
 **Amazon Simple Storage Service (Amazon S3) は、拡張性・耐久性・可用性に優れたオブジェクトストレージサービス** です。
 
オブジェクトストレージとは、データを「オブジェクト」と呼ばれる単位で保存するストレージ形式です。メタデータや識別子も含まれ、効率的かつ柔軟にデータを管理することが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074902/8a5d3ac8-a3dd-cd33-0905-c06a73f12a3d.png)

オブジェクトストレージとファイルストレージの違いについて、わかりやすい記載がありましたので、よろしければご覧ください。

https://www.fujitsu.com/jp/products/computing/storage/lib-f/tech/beginner/object-storage/

## Amazon S3の特徴
### 拡張性(extensibility)
・データ容量が無制限
　ストレージが自動的に拡張・縮小するため
 
:::note info
拡張性とは
システムやサービスが負荷や需要の増加に対してどれだけ効果的に対応できるかを示す性質
:::

### 耐久性(Durability)・可用性(Availability)
・99.999999999%の耐久性（データを消失しない確率）
・デフォルトで同一リージョン内の3か所のAZに自動的に複製される
　＝障害発生時も稼働を継続できる

:::note info
耐久性とは
データを消失しない確率
:::

:::note info
可用性とは
稼働率（システムやサービスが利用できる時間の割合）
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074902/7e268925-5d99-b219-5d9d-6fa6204851f7.png)

## データ保存方法
Amazon S3はオブジェクトストレージという説明をしましたが、そのオブジェクトは「バケット」というものに保存されます。
#### バケットとは
・Amazon S3 に保存されるオブジェクトのコンテナのこと
・バケットにはオブジェクトをいくつでも保存可能
・バケットはリージョン単位で作成
・デフォルトでは1アカウントにつき100バケットまで作成が可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074902/f2fffd86-efad-3e8d-b5c2-16a75f9edc1d.png)

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

:::note warn
・バケットにはオブジェクトを**いくつでも保存可能**
・バケット名は**グローバルで一意**にする必要がある
:::



## S3の機能
### バージョニング
>Amazon S3 のバージョニングとは、同じバケット内でオブジェクトの複数のバリアントを保持する手段のことです。S3 のバージョニング機能を使用すると、バケットに保存されたすべてのオブジェクトのすべてのバージョンを、保存、取得、復元することができます。
：AWS公式サイトからの引用

**・オブジェクトをバージョン管理することが出来る**機能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074902/fa13a084-7017-6ffb-e072-384b84ee0408.png)

:::note warn
・バージョニングは**デフォルトでは無効**
・有効にした場合、ストレージ使用量に応じた料金がかかる
:::


### MFA Delete
>Amazon S3 バケットで S3 バージョニングを行うときに、MFA (多要素認証) Delete が有効になるようにバケットを設定すれば、セキュリティをさらに強化できます。この設定を行うと、バケット所有者は、特定のバージョンを削除したりバケットのバージョニング状態を変更したりするリクエストに、2 つの認証形式を含めることが必要になります。
：AWS公式サイトからの引用

**・バケットのバージョニング状態を変更する・オブジェクトバージョンを完全に削除する際にMFA認証 (多要素認証)を求める**機能

:::note warn
・**バージョニング機能を使用していることが前提**の機能
・誤操作や不正アクセスによる**データの損失を防ぐ**ことが出来る
:::


### ライフサイクルポリシー
>オブジェクトがライフサイクルを通じてコスト効率の高い方法で保存されるように管理するには、Amazon S3 ライフサイクルを設定します。S3 ライフサイクル設定は、Amazon S3 がオブジェクトのグループに適用するアクションを定義するルールのセットです。
：AWS公式サイトからの引用

**・ストレージクラスの移行・オブジェクトの削除を設定した期間によって実行することが出来る**機能

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074902/08a531f2-d608-b686-28c4-988b014ca3c2.png)



:::note warn
・ライフサイクルポリシーは**デフォルトでは無効**
・有効にすることで、**ストレージコストを抑える**ことが出来る
:::

### オブジェクトロック
>S3 オブジェクトロックは、Amazon S3 オブジェクトが一定期間または無期限に削除または上書きされるのを防ぐのに役立ちます。オブジェクトロックは、write-once-read-many (WORM) モデルを使用してオブジェクトを保存します。オブジェクトロックを使用して、WORM ストレージを必要とする規制要件を満たしたり、オブジェクトの変更や削除に対する保護レイヤーを追加したりできます。
：AWS公式サイトからの引用

**・オブジェクトが意図的に改ざん・削除されることを防止する**機能

#### ①リーガルホールド（法定保留）
・保持期間の有効期限なし（明示的に削除するまで、維持される）
・権限（s3:PutObjectLegalHold）を持つユーザーのみ、オブジェクトの更新・削除、リーガルホールドの解除が可能

#### ②リテンションモード（保持期間設定）
・保持期間を明示的に指定する
・リテンションモードには「ガバナンスモード」と「コンプライアンスモード」があり、どちらかを選択する

##### ガバナンスモード
・権限を持たないユーザーは、指定した保持期間中オブジェクトが読み取り専用になる
・権限を持つユーザーのみオブジェクトの更新・削除、ガバナンスモードの解除ができる

##### コンプライアンスモード
・ルートユーザーを含む全てのユーザーが、指定した保持期間中オブジェクトが読み取り専用になる
・モードの変更・保持期間の短縮はどのユーザーであっても行えない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074902/1827bef2-e9ed-4bff-e5ae-0e12931f5780.png)

:::note warn
・オブジェクトロックは、**バージョニングされたバケットでのみ利用可能**
・リーガルホールド・リテンションモードを**並列して設定することも可能**
・制御の強さは、**コンプライアンスモード＞ガバナンスモード**
:::


### クロスリージョンレプリケーション
#### レプリケーション
>レプリケーションを使用すると、Amazon S3 バケット間でオブジェクトを自動で非同期的にコピーできます。オブジェクトのレプリケーション用に設定されたバケットは、同じ AWS アカウント が所有することも、異なるアカウントが所有することもできます。オブジェクトは、単一または複数の送信先バケットにレプリケートできます。送信先バケットは、異なる AWS リージョン でも、ソースバケットと同じリージョン内でも配置することができます。
：AWS公式サイトからの引用

**バケットのデータを異なるバケットへ自動的にコピーしたい場合に使用する**機能

#### クロスリージョンレプリケーション
>異なる AWS リージョン 内の Amazon S3 バケット間でオブジェクトをコピーするには、S3 クロスリージョンレプリケーション (CRR) を使用します。
：AWS公式サイトからの引用

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074902/6c77c266-215f-33aa-5a89-f398defd149a.png)

:::note warn
・レプリケーション使用時は、**バージョニングを有効にする必要がある**
・異なるAWSアカウントが所有するバケットでも指定できる
:::

### マルチパートアップロード
>マルチパートアップロードを使用すると、単一のオブジェクトをパートのセットとしてアップロードすることができます。各パートは、オブジェクトのデータの連続する部分です。これらのオブジェクトパートは、任意の順序で個別にアップロードできます。いずれかのパートの送信が失敗すると、他のパートに影響を与えることなくそのパートを再送することができます。オブジェクトのすべてのパートがアップロードされたら、Amazon S3 はこれらのパートを組み立ててオブジェクトを作成します。通常、オブジェクトサイズが 100 MB 以上の場合は、単一のオペレーションでオブジェクトをアップロードする代わりに、マルチパートアップロードを使用することを考慮してください。
：AWS公式サイトからの引用

**単一のオブジェクトをパートといわれる複数のデータに分割して、アップロードする**機能

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074902/ff28e0ee-07cb-2c24-c7d6-e85da9e086a9.png)



:::note warn
・各パートはそれぞれ並列にアップロードされるため、**アップロード時間を大幅に短縮できる**
・オブジェクトサイズが 100 MB 以上の場合に使用することがされている
・**バケットに一度にアップロードできる最大サイズは5GB**
:::


### S3 Transfer Acceleration
>Amazon S3 Transfer Acceleration は、クライアントと S3 バケットの間で長距離にわたるファイル転送を高速、簡単、安全に行えるようにするバケットレベルの機能です。Transfer Acceleration は、世界各地から S3 バケットへの転送速度を最適化するように設計されています。Transfer Acceleration は、Amazon CloudFront の世界中に点在するエッジロケーションを利用します。エッジロケーションに到着したデータは、最適化されたネットワークパスで Amazon S3 にルーティングされます。
：AWS公式サイトからの引用

**クライアントとS3間の通信を高速化させることができる**機能

:::note warn
・**エッジロケーションとAWSネットワークを経由する**
・遅延やデータ損失のリスクを減らすことができる
:::

※エッジロケーション ... AZとは異なるAWSデータセンター、AZを上回る数の拠点がある


### S3のデータ整合性モデル：Strong Consistency（強い一貫性）
>新しいオブジェクトの書き込みが成功するか、既存のオブジェクトが上書きまたは削除されると、後続の読み取り要求は、オブジェクトの最新バージョンをすぐに受け取ります。また、S3 はリストオペレーションに強力な一貫性を提供するため、書き込み後、変更を反映したバケット内のオブジェクトのリストをすぐに実行できます。
：AWS公式サイトからの引用

**データの追加・更新が行われた際は、直後から必ず追加後や更新後の状態が取得できる**機能
※以前は結果整合性モデルだったため、データの更新・削除などの際にデータの一貫性が保証されていなかった。


### Webサイトホスティング（静的Webサイトホスティング）
>Amazon S3 を使用して、静的ウェブサイトをホストできます。静的ウェブサイトでは、個々のウェブページの内容は静的コンテンツです。ほかに、クライアント側スクリプトが含まれていることもあります。
：AWS公式サイトからの引用

**バケットに保存している静的コンテンツ（HTMLやJPGなど）をサーバーを構築することなくWebサイトとして公開できる**機能


### 署名付きURL
>バケットポリシーを更新せずに、Amazon S3 内のオブジェクトへの時間制限付きのアクセス権を付与するには、署名付き URL を使用できます。署名付き URL をブラウザに入力するか、プログラムで使用してオブジェクトをダウンロードできます。署名付き URL で使用される認証情報は、URL を生成した AWS ユーザーのものです。
また、署名付き URL を使用して、Amazon S3 バケットに対する特定のオブジェクトのアップロードを他のユーザーに許可することもできます。これにより、他のユーザーは AWS のセキュリティ認証情報やアクセス許可を持たなくてもアップロードできます。署名付き URL で指定したのと同じキーを持つオブジェクトがバケット内に既に存在する場合、Amazon S3 は既存のオブジェクトをアップロードしたオブジェクトで置き換えます。
：AWS公式サイトからの引用

**AWSアカウントを持っていないユーザーでも非公開設定されたオブジェクトに一時的にアクセスすることが可能になる**機能

:::note warn
・作成したURLは有効期限日時まで複数回使用可能
・**ユーザー認証機能はないため、URLの漏洩には注意が必要**（誰でもアクセスできてしまう）
:::


# おわりに
今回はAmazon S3の基本的な内容を整理しました。
機能が多いですが、S3の問題はSAAでも多く出てくるので、注意が必要です。
次回は今回整理できなかったストレージクラスやアクセス制御等についてまとめようと思いますので、よろしければご確認ください。

　

＊後編はこちら

https://qiita.com/rm_zeal/items/586f82d5c4a4b893a8da

# 参考
https://aws.amazon.com/jp/s3/

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

https://dev.classmethod.jp/articles/3minutes-s3-versioning-lifecycle/#toc-16

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

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

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

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

https://aws.amazon.com/jp/blogs/news/amazon-s3-update-strong-read-after-write-consistency/

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

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


---------------------------------------------------

株式会社ジールでは、「ITリテラシーがない」「初期費用がかけられない」「親切・丁寧な支援がほしい」「ノーコード・ローコードがよい」「運用・保守の手間をかけられない」などのお客様の声を受けて、オールインワン型データ活用プラットフォーム「ZEUSCloud」を月額利用料にてご提供しております。
ご興味がある方は是非下記のリンクをご覧ください：
https://www.zdh.co.jp/products-services/cloud-data/zeuscloud/?utm_source=qiita&utm_medium=referral&utm_campaign=qiita_zeuscloud_content-area