[AWS]ストレージ(S3)の作成

インフラ構築忘れていけないのは、データの保存場所を作成することです。サービスによっては、文字や数値だけでなく画像や動画といった、大きなデータを保存する必要があります。そためにもAWSにはS3と呼ばれるストレージサービスがあるため、S3の作成をしていきます。

# ストレージとは?
データの長期保存することを目的として用意されたデータ格納場所です。主なストレージの例としては、ハードディスクやDVD、CDなどがあげられます。近年では、インターネット上でディスクスペースをユーザーに貸し出すオンラインストレージと呼ばれるサービスが普及し、無料のストレージや有料のストレージなど様々なサービスが提供されています。

# ストレージサービスの種類(EBSとS3)

### EBS
Amazon EBS(Elastic Block Store)は、SSDやハードディスクなどに該当するブロックストレージです。データをブロックと呼ばれる単位で管理します。ブロックストレージを管理するシステムは、データを保存する際にはブロック単位に切り分け、データを読み出す際には切り分けたブロックから元のデータを復元します。

### S3
Amazon S3(Simple Storage Service)は、インターネット経由でどのようなデータでも保存やアクセスを実行できるように設計されたオブジェクトストレージサービスです。オブジェクトストレージとは、データをファイル単位やブロック単位ではなく、「オブジェクト」という単位で管理するストレージです。

#### オブジェクトで管理するとは?
オブジェクトストレージは、データを任意のまとまり(オブジェクト)と扱い、それぞれを識別するための独自のIDを持つことオブジェクトを管理します。オブジェクトIDを用いて、欲しい直接データを指定し、読み書きを行います。また、データ同士は常にフラットでお互いに依存関係を持たないため、データの読み書き・取り出し・移動・複製を容易にしています。

# EBSとS3の違い
オブジェクトはデータを任意の大きさに分割したものであるのに対し、ブロックは記憶装置の領域を一定のルールにしたがって分割したものです。つまり、オブジェクトストレージはデータが主体となって最小単位が決められ、ブロックストレージでは記憶装置が主体となっている点で、考え方の違いがあります。

### S3の優位性
S3にはマネージドサービスであることから、OSの管理やシステムの監視といった作業を全てAWSが管理しているため、利用者はそれらを意識しなくとも良いのがメリットです。また、EBSと比べると耐障害性やコスト面優れています。EBSは、EC２インスタンスとセットで利用するため別途EC2料金もかかり、容量やリージョンによって料金にばらつきがあるものの、EBSの方が元々の料金が高い傾向があります。

# S3バケットを作成する
S3はVPC外に作成するものなので、S3にアクセスする方法としてはまずはVPCからの接続、インターネットからの接続の２つのケースが存在します。特に、VPCからS3にアクセスを行う場合はS3バケットに対して、アクセス権限が必要になります。この権限はS3バケットに対してロールを設定することで解決できるため、ロールも作成していきます。

| バケット名 |　リージョン　| パブリックアクセス |
| :---: | :---: | :---: |
| 任意のバケット名 | 東京リージョン(1a)| 全てをブロック |

バケット名は、S3を作成するリージョン内にある全てのバケットを通じて、重複しない名前をつける必要があります。
パブリックアクセスをブロックすることによって、外部からのアクセスを全てできないようにしていきます。

![S3バケット名前.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790379/e6402fe4-57ed-62c8-c301-7069d1a10f31.png)

![S3アクセスブロック.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790379/d9ea910b-5d0d-78d2-fa12-a57ac8b1b07e.png)
パブリックアクセスを全てブロックにチェックされているため、そのままで次に進みます。

![スクリーンショット 2023-02-24 21.04.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790379/daeca997-6153-e446-8e5c-1aec0377b845.png)

以上でバケット作成は完了です。次に、ロールを作成してEC2に適用していきます。

|ロールの対象|ポリシー|ロール名|ロールの説明|
|:---:|:---:|:---:|:---:|
|EC2|AmazonS3FullAccess|sample-role-web(任意の名前)|任意の説明|

許可ポリシーのAmazonS3FullAccessをしてしますが、これはこのS3だけでなく今後作成されるS3に対しても、このロールを持つことになるため、注意する必要があります。特定のS3に対して行いたいは、別途設定が必要になります。

ロール作成手順としては、IAM=>ロール=>ロールの作成 をコンソール画面から選択します。

![ロールの作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790379/077c1d6b-86b2-5a7c-a096-c3a731dec3f6.png)

![スクリーンショット 2023-02-24 21.19.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790379/9ed4912f-e97a-c715-d927-aa6ba488d338.png)


![スクリーンショット 2023-02-24 21.23.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790379/106d0a2d-0df2-8b4f-a35f-379e45f77c82.png)

上記の手順で、ロールの作成が完了します。次は実際に作成したロールをEC2に適用していきましょう.

# ロールをEC2に割り当てる
手順としては、EC2=>インスタンス=>アクション=>セキュリティ=>IAMロール変更をコンソール画面から選択していきます。作成した、EC2インスタンス(sample-web01, sample-web02)にロール適用していきます。

![スクリーンショット 2023-02-24 21.25.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790379/0dbc6321-c945-6027-f813-3371f012481d.png)
先ほど作成した、ロールを選択して"IAMロールの更新"で完了です。

# 動作確認
ターミナルを開いて、それぞれのサーバーにSSH接続します。そこに、vimコマンドでファイル(test01.txt, test02.txt)を２つ作成します

```
$ ssh web01

$ vim test01.txt
```
```
$ ssh web02

$ vim test02.txt
```

テストファイルの中身は以下にします。
```
This is a test file.
```
その後、ターミナルにて先ほど作成したファイルをS3にアップロードします。

```
$ aws s3 cp test01.txt(test02.txt) s3://(バケット名)
```
次に、コンソール画面でS3=>バケット=>作成したS3　をクリックして、test01とtest02ファイルがアップロードされているのが確認できれば、アップロード完了です。

# 参考
AWSではじめるインフラ構築入門 翔泳社出版

https://www.ntt.com/business/sdpf/knowledge/archive_24.html