【AWS】S3の使い方をおさらい

![S3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/72a13aab-9a12-0dc6-899a-7852692566c1.png)

# はじめに
どーも、のぶこふです。

寒いですね。
最近、一段と寒さのレベルが上がった気がします。
そんなこんなで、今回はS3を取り上げます。

Samui／Saikin／SonnaKonnaDe　と、S3を意識してみました。
・・・はい、どうでも良いですね。

この記事は[GFAMアドベントカレンダー2021](https://qiita.com/advent-calendar/2021/gfam)の6日目の記事です。

# 今回のサービス一覧

|Service名とか|概要|
|--|--|
|S3 [^s3]|拡張性と耐久性を兼ね備えたクラウドストレージ|

# S3
* アイキャッチ画像のところでも、記載してますが、「Amazon Simple Storage Service」を略して「S3」です。
    * 読み方としては「えす すりー」が主流（「えす さん」と呼ぶ人も稀にいますが、数字は英語読みがベターです
* AWSが提供しているストレージサービスの中では、最も認知度が高いです（のぶこふ調べ）
    * 他には、EBSやEFS、FSxが軒を連ねます。
    * ストレージサービス関連というと、BackupやStorage Gatewayなども含まれるみたいですね。
* データを安全に、容量制限無く、データ保存可能な、オブジェクトストレージ[^s3-bb]

### オブジェクトストレージ？
* オブジェクトやそれに付随するメタデータ、そのオブジェクトにアクセスするためのユニークなIDで構成されるデータの倉庫

### 特徴
* 容量無制限
    * 5TB/1ファイル
* 高い耐久性
    * 99.999999999%（9が11個→`11 9s`）
    * 少なくとも３つのAZにデータを格納する
        * １つのAZは最大８つのデータセンタで構成されている
            * １つデータセンタのダウン、１つのAZダウンでは、可用性に影響しない！！
* 安価
* スケーラブル
    * データ容量に依存しない性能

### 用語
|名称|概要|
|--|--|
|バケット|オブジェクトの保存場所。名前はグローバルでユニーク。バケット内オブジェクト数は無制限。|
|オブジェクト|データ本体。URLが付与される。|
|キー|オブジェクト格納URLパス。「バケット＋キー＋バージョン」が必ず一意になる|
|メタデータ|システム定義メタデータ、ユーザ定義メタデータ|
|リージョン|バケットを配置するAWSのロケーション。|

* オブジェクト補足
    * オブジェクトサイズ：0～5TB/1ファイル
    * アップロード可能サイズ：5GB/1PUT

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/0c3e0d5b-e542-643c-93c5-ab70b7e82242.png)

### オブジェクトのネーミングスキーマ
* オブジェクトは、バケット内にフラットに格納される
* キーのパス指定で、フォルダ階層のように表示も可能
    * 「/」を区切り記号として、マネジメントコンソールではフォルダ構造を表現している

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/89c9167f-6d76-ff59-cd62-08b5739c5d6f.png)

### ストレージクラス
* 各ユースケース向けに幅広いストレージクラスが提供されている。[^storageclass]

|ストレージクラス|和名|概要|
|--|--|--|
|STANDARD|標準|複数AZにデータ配置。デフォルト|
|STANDARD_IA（Infrequent Access）|標準 低頻度アクセスストレージ|スタンダードに比べて格納コストが安価。データの読み出し容量に対して課金|
|Intelligent-Tiering|未知・変化のアクセスパターン|アクセス頻度によって自動的に最適化するストレージクラス|
|OneZone_IA|１ゾーン 低頻度アクセスストレージ|１AZにデータ配置。|
|Glacier※|アーカイブ|低コスト。データ取り出しにコストと時間がかかる。|
|Glacier Deep Archive|アーカイブ|最も低コストなコールドストレージ。取り出しには半日～３日。|

※「re:Invent 2021」にて、「Glacier」の名称が「Glacier Flexible Retrieval」となり、新たに「Glacier Instant Retrieval」も登場しています

### Amazon S3 Transfer Acceleration
[FAQ](https://aws.amazon.com/jp/s3/faqs/#Amazon_S3_Transfer_Acceleration)より
※FAQが充実しすぎていて、これを眺めるだけでも、試験対策になりそう・・・

> Q: S3 Transfer Acceleration とは何ですか?
>
> Amazon S3 Transfer Acceleration によって、クライアントと Amazon S3 バケットの長距離間でファイルを高速、簡単、安全に転送できます。S3 Transfer Acceleration では、世界中に散らばる Amazon CloudFront の AWS エッジロケーションが活用されます。データが AWS エッジロケーションに到着すると、最適化されたネットワークパスで Amazon S3 バケットに向かうようルーティングされます。

エッジロケーションを使って、高速化しているようですね。


> Q: S3 Transfer Acceleration の使用を開始するにはどうすればよいですか?
>
> S3 Transfer Acceleration を使い始めるには、Amazon S3 コンソール、Amazon S3 API、または AWS CLI を用いて S3 バケットで S3 Transfer Acceleration を有効化してください。S3 Transfer Acceleration が有効にされた後、Amazon S3 の PUT および GET リクエストで、s3-accelerate エンドポイントのドメイン名を指定できます。データ転送を加速するには、データ転送アプリケーションで、次の 2 つのタイプのエンドポイントのいずれかを使用してバケットにアクセスする必要があります。"デュアルスタック" エンドポイントの場合は .s3-accelerate.amazonaws.com または .s3-accelerate.dualstack.amazonaws.com です。標準のデータ転送を利用する場合、通常のエンドポイントの使用を継続できます。

お手軽に使えるのも、ポイント。

### マルチパートアップロード
[ユーザガイド](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/mpuoverview.html)より
オブジェクトサイズが大きい場合は、使用を検討。

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

# 使い方
簡単に、オブジェクトの配置～削除までやってみましょう。
### バケットの作成
1. S3を検索して、コンソールに移動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/e27c5eac-219f-a2f0-2259-291af7f489ad.png)

1. 「バケットの作成」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/e43aa028-ad3c-687e-690d-149b61904aec.png)


1. 情報を入力して、「バケットを作成」を選択

|項目名|設定値|
|---|---|
|バケット名|s3-test-nobkov|
|AWSリージョン|アジアパシフィック（東京）ap-northeast-1|
|オブジェクト所有者|ACL無効（デフォルト）|
|パブリック・アクセス設定|パブリックアクセスをすべて ブロック（デフォルト）|
|バージョニング|無効にする（デフォルト）|
|タグ|Key:Name, Value:S3test |
|暗号化|無効にする（デフォルト）|
|オブジェクトロック|無効にする（デフォルト）|

### アップロード
1. 対象のバケットを選択
1. オブジェクト ＞ アップロード を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/e6b268af-5236-440b-16c5-2c55fcdc3b2e.png)

1. 対象を選択する（下記のどちらか）
    1. 「ドラッグ・アンド・ドロップ」する
    1. 「ファイルを追加」、「フォルダの追加」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/a7a78994-46a2-1129-18a1-28ea7bb07839.png)

1. （オプション）ストレージクラスを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/a85ea51a-d59f-6660-6d54-7c0258abd805.png)


1. 「アップロード」を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/43cafe7a-07e4-ef3b-37be-4653af805f72.png)

### アクセス
1. 対象のオブジェクトを選択する
1. 「開く」を選択する。おっ、開きました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/7c9de36b-8d43-0152-4fc4-b7e689fbc2a5.png)


### 削除
* オブジェクト削除の場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/a66d19ce-237e-77b1-7ba6-388d8653bd69.png)

* バケット削除の場合
    * ※バケットが空である必要があります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/18662466-9aef-5586-3df4-cf22c554b82c.png)



# おわりに
すごい簡単ではありますが、S3の概要と、マネコンからの使い方をまとめてみました。
静的ファイル（HTMLとか）を配置して、公開等もできるので、近々やってみようと思います。

今回はここまでです。
ありがとうございました。

[^s3]: [S3概要](https://aws.amazon.com/jp/s3/)

[^s3-bb]: [S3 BlackBelte](https://d1.awsstatic.com/webinars/jp/pdf/services/20190220_AWS-BlackBelt_S3_Glacier.pdf)

[^storageclass]: [ストレージクラス概要](https://aws.amazon.com/jp/s3/storage-classes/)