AWS入門 S3〜マネジメントコンソールとCLIと〜[2015年10月版]


思い出のマーニを流しつつ、書いています。
明日はAWSのソリューションアーキテクトプロフェッショナルを受けてきます。

お財布的に何としても受かりたいものです。

---

###20151011 静的ウェブサイトホスティングに関して追記しました。
###CLIでのバケット作成、オブジェクトアップロードに関して追記しました。

---


###0.ゴール
AWSの基本的に使うサービスの使い方集みたいなものを作っていこうと考えています。
今回はS3の使い方について見ていきます！（次回のEC2で使いたいので・・・）
####S3にバケットを用意して、オブジェクトを格納することが今回の目標です。

###1.マネジメントコンソールからバケットを作成する
![S3-001.jpg](https://qiita-image-store.s3.amazonaws.com/0/52141/988a3e0b-eb95-a260-344b-38629b796d13.jpeg "S3-001.jpg")
_マネジメントコンソールからS3を選択します_

![S3−002.jpg](https://qiita-image-store.s3.amazonaws.com/0/52141/cf068ea1-3f99-45fe-47c6-aa57fea3e96e.jpeg "S3−002.jpg")
環境によって差異はありますが、何かを ***「作る」*** 的なボタンを押してください。

![S3−003.jpg](https://qiita-image-store.s3.amazonaws.com/0/52141/6aea7623-73a0-b7d9-b6d4-8e03213236ac.jpeg "S3−003.jpg")
バケットを作成します。
リージョンは東京を選択します（特別な理由が無い限り日本にいるなら基本は東京リージョンを使うべきです）。

####1.バケット名
バケット名は世界で一意でなければいけないため簡単なのをつけようとすると結構怒られます。
以下にバケット名作成時の命名規則を示します。

>　
1. バケット名は、3～63 文字以内にする必要があります。
2. バケット名は、1 つのラベルまたは一連の複数のラベルとして指定します。隣り合うラベルは単一のピリオドで区切ります。バケット名には、小文字の英文字、数字、およびハイフン（-）を含めることができます。各ラベルの先頭および末尾は、小文字の英文字または数字にする必要があります。
3. バケット名は、IP アドレスの形式（192.168.5.4 など）にはできません。
4. SSL と共に仮想ホスティング形式のバケットを使用した場合、SSL ワイルドカード証明書は、ピリオドを含まないバケットのみと一致します。この問題を回避するには、HTTP を使用するか、または独自の証明書検証ロジックを記述します。

ピリオドに関して
バケット名の先頭と末尾にはピリオドを指定できません。
また、連続して２つ以上のピリオドを使うこともできません。

---
![S3−004.jpg](https://qiita-image-store.s3.amazonaws.com/0/52141/73af44f9-55bc-2983-8c81-a4f7c655ebd6.jpeg "S3−004.jpg")

バケット名を入力するだけでバケットが作成できました！
これで99.99999999999%（イレブンナイン）の堅牢性を誇るクラウドストレージ、S3を使用することができます！

S3もいろいろとできますが、有名どころを何点か抑えていきましょう。

---

###2.バージョニング
![S3-005.jpg](https://qiita-image-store.s3.amazonaws.com/0/52141/1a295141-3bb5-d854-8dc3-a07694e74862.jpeg "S3-005.jpg")

S3にはバージョニングと呼ばれる機能があります。
わかりやすく言うと版番管理です。
有効にするためには右側のバージョニングから「バージョニングの有効化」を選択します。

####S3のバージョニングの状態
> バケットは、バージョニング無効（デフォルト）、バージョニング有効、バージョニング停止の 3 つの状態のいずれかに設定できます。
一度バケットのバージョニングを有効にすると、バージョニング無効の状態に戻すことはできません。ただし、そのバケットのバージョニングを停止することは可能です。

- バージョニング無効（デフォルト）
- バージョニング有効
- バージョニング停止
以上、３つの状態があることを覚えておきましょう。

バージョニングを有効にしておく利点は「誤った削除からオブジェクトを保護する」ことです。
> バージョニングが有効なバケットでは、オブジェクトを誤って削除または上書きしても復元できます。

ね？いいでしょ？

![S3−006.jpg](https://qiita-image-store.s3.amazonaws.com/0/52141/0b0bcead-50aa-d977-d94e-91960ec9b0c8.jpeg "S3−006.jpg")

####実際に同じファイルを複数回アップロードするとバージョン管理されていることがわかる
####バージョニングを停止するときはバケットプロパティから停止すれば良い
---
###3.ストレージクラスと暗号化
![S3−007.jpg](https://qiita-image-store.s3.amazonaws.com/0/52141/bd0b4f4c-f6ba-252c-3d3d-f2e26df6c911.jpeg "S3−007.jpg")

ストレージクラスは３つある
- スタンダード
- 標準程頻度アクセス
- 低冗長化（RRS）

低冗長化（RRS)は通常より安くなります。
まあ、低冗長化っていってもちゃんと冗長化されてるんでまず消えないと思いますけどね・・・

---
###4.ライフサイクル
![S3−009.jpg](https://qiita-image-store.s3.amazonaws.com/0/52141/366dcf11-2e0a-9f03-ffaa-b2bb3600da92.jpeg "S3−009.jpg")

![S3-009.jpg](https://qiita-image-store.s3.amazonaws.com/0/52141/eca1be0e-e46a-6e70-b7da-8a00dcb67941.jpeg "S3-009.jpg")

この画面でオブジェクトに対するライフサイクルを設定します。

![S3−010.jpg](https://qiita-image-store.s3.amazonaws.com/0/52141/18e99c86-c30c-2422-415e-5c8900b6fb42.jpeg "S3−010.jpg")

ライフサイクルの名前を入力して完了

###追記.静的ウェブサイトホスティング
![004.jpg](https://qiita-image-store.s3.amazonaws.com/0/52141/13e605f6-c1f4-976d-4d0d-e5fc7c0506f0.jpeg "004.jpg")

作成したバケットにて、ウェブサイトホステングを有効にします。
![005.jpg](https://qiita-image-store.s3.amazonaws.com/0/52141/e5571260-6a68-7b1d-4ef1-4afeae7fe86e.jpeg "005.jpg")


インデックスドキュメント（トップページ）とエラードキュメント（ソーリーページ）を設定します。
---

以上でS3を使う上で良く聞く操作（マネジメントコンソール編）の説明を終わります。

###5.CLI編
####5.1バケット作成とオブジェクトアップロード
バケットの作成をCLIベースでやってみます。

```aws:mb
aws s3 mb s3://20151011-********* --region ap-northeast-1
```
(返り値)
make_bucket: s3://20151011-********/

--region　コマンドでリージョンを指定します

次にオブジェクトを追加します

```aws:cp
aws s3 cp /Users/***/S3-001.jpg  s3://20151011-********/jpg/
```
(返り値)
upload: ***/S3-001.jpg to s3://20151011-********/jpg/S3-001.jpg

バケットに中間ディレクトリを挟むとディレクトリを作成してくれます。


####5.2オブジェクトの削除
S３をcliベースで操作します。
先ほどアップロードしたオブジェクトを削除してみたいと思います。

```aws-cli:ls
aws s3 ls s3://20151009-********/root/

```
(返り値)
2015-10-09 21:47:14          0 
2015-10-09 21:47:52     300222 S3-001.jpg

```aws:rm
aws s3 rm s3://20151009-********/root/ --recursive
```
(返り値)
delete: s3://20151009-********/root/S3-001.jpg

ディレクトリ以下の一括削除処理を行う場合 
--recursive オプションを指定します。

削除確認

```aws:ls
aws s3 ls s3://20151009-********/root/
```
(返り値)
なし

以上でオブジェクトの削除ができました。
ディレクトリを削除してバケットを削除します。

```aws:rb
 aws s3 rb s3://20151009-s3-********/
```
(返り値)
なし

rbコマンドはバケットを削除します。

---

###追加.番外編アップロードしたオブジェクトの公開に関して
![001.jpg](https://qiita-image-store.s3.amazonaws.com/0/52141/2b80eff9-5d1c-e729-0d4d-6bce28c5824d.jpeg "001.jpg")
アップロードしたオブジェクトはリンクのURLからダウンロードすることができます。
しかし、デフォルトでリンクを踏むと・・・

![002.jpg](https://qiita-image-store.s3.amazonaws.com/0/52141/3d7b9420-b343-425e-ec9e-bfb089149fd6.jpeg "002.jpg")
このようなページに飛び、ダウンロードができません。
![003.jpg](https://qiita-image-store.s3.amazonaws.com/0/52141/ef301f28-9e47-1cd6-2070-df68d29b965a.jpeg "003.jpg")
オブジェクトを公開することでURL経由でダウンロードさせることができます。

---
###6.おわり
以上でS3バケットの使い方を終了します。
cliはリファレンスを引きながらやっていけばなんとかなると思います。

次回はEC2についてやっていきまーす