AWS Storage Gatewayのファイルゲートウェイを使ってローカルPCからS3へファイル転送する

AWS Storage Gatewayはオンプレ環境とクラウドストレージを接続して、オンプレ環境からクラウドストレージへアクセスできるようにするサービスです。

今回、オンプレ環境に保存していたバックアップファイルをクラウド移行したいという相談があったため、ローカルPCからS3へファイル転送する手順を検証してみました。

※本検証によりAWS利用料が発生する可能性がありますのでご注意ください

## 接続先のS3バケットを作成する

S3へアクセスし、「バケットを作成する」をクリックします

![S3_Management_Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/b146aeaf-a3f6-f8ca-f011-278f4ce94094.png)

「バケット名」を入力して「次へ」をクリックします。

![S3_Management_Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/a2566105-444e-25a2-f960-000ae1c9c7aa.png)

そのまま「次へ」をクリックします。

![S3_Management_Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/3f126122-0268-0fcd-ba05-d561581ef713.png)

バケットをパブリックに公開する必要は無いのでそのまま「次へ」をクリックします。

![S3_Management_Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/14919b6b-69b9-5dc3-c84e-2938f77feb11.png)

「バケットを作成」をクリックします。

![S3_Management_Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/cd81fa3e-02c6-bb81-d5fe-9879b823df15.png)

## Storage Gatewayの設定

はじめてStorage Gatewayを利用する場合はこちらをクリックします

![AWS_Storage_Gateway.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/ca98f4ab-98f3-1039-22b1-644c4dc2820c.png)

### ゲートウェイの作成

#### ゲートウェイの種類を選択

今回は「ファイルゲートウェイ」を利用します。

![AWS_Storage_Gateway.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/dbde2ca1-c65e-aaf0-429f-4088d6f5de7c.png)

#### EC2インスタンスの起動

Storage Gatewayをホストするプラットフォームを選択します。
今回はEC2インスタンスを利用するので、「インスタンスの起動」をクリックしてください。

![AWS_Storage_Gateway.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/d8c1c66d-3dbf-927c-e5e8-795056b2e669.png)

Storage Gatewayのホストには「m4.xlarge以上」のスペックが推奨とされているため、「m4.xlarge」を選択します。

![インスタンスウィザードを起動___EC2_Management_Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/18fe3051-c566-9ad6-043b-99b854cdfcc7.png)

インスタンスの詳細を設定します。
VPCは今回使うものを選択、自動割り当てパブリックIPは今回ローカルPCから接続するので有効にしておきます。

![インスタンスウィザードを起動___EC2_Management_Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/355c257a-e5d2-03b1-ae39-e28747269bf6.png)

ストレージを追加します。Storage Gatewayのホストはファイルをキャッシュする際にルートボリューム以外のボリュームが必要です。
推奨は150GB以上ですが、今回は検証なので8GBとしました。

![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f36303939362f33353762326230612d333432632d333236342d663738382d3331633831393239386136332e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/a95764d2-dec0-b9db-3f4a-8de4b946c73c.png)

タグの追加では一応Nameタグを追加しておきます。

![インスタンスウィザードを起動___EC2_Management_Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/474d7514-96e8-a4c9-b8e4-c8b2ea92f6d0.png)

セキュリティグループを設定します。以下画面のようにインバウンドを許可する必要があります。
ソースはマイIPを設定して、他ネットワークからアクセスできないようにしておきました。

![インスタンスウィザードを起動___EC2_Management_Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/6f33b312-e4f2-8519-0e33-71fa22c960ca.png)

以上で起動設定は完了なので、「起動」をクリックします。

![インスタンスウィザードを起動___EC2_Management_Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/4454d69a-57c0-0a6f-2cdf-d16f19f6a602.png)

インスタンスが起動したらStorage Gatewayの「ホストプラットフォームの選択」画面に戻って、「次へ」をクリックしましょう。

#### ゲートウェイに接続

先ほど起動したEC2インスタンスのパブリックIPアドレスを入力して、「ゲートウェイに接続」をクリックします。
※EC2インスタンスが起動していない場合、起動まで待たされることがあります。

![AWS_Storage_Gateway.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/c0b74e65-cff6-8d1e-039e-c5b45bf5c59c.png)

#### ゲートウェイのアクティブ化

ゲートウェイのタイムゾーンを選択、ゲートウェイ名を入力し、「ゲートウェイのアクティブ化」をクリックします。

![AWS_Storage_Gateway.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/e1fc3d43-0a45-b537-281f-f069075d98a8.png)

#### ローカルディスクの構成

EC2インスタンスのディスクが表示されるので、「割り当て済み」を「キャッシュ」として、「ログ記録を設定」をクリックします。

#### ログ記録を設定

何も変更せず、「保存して続行」をクリックします。

![AWS_Storage_Gateway.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/8a606475-a5a0-d2e0-9f71-6d070295877c.png)

以上でゲートウェイの作成は完了です。

### ファイル共有の作成

Storage Gatewayのゲートウェイ一覧画面にて、先ほど作成したゲートウェイを選択し、「ファイル共有の作成」をクリックします。

<img width="1929" alt="AWS_Storage_Gateway_と_zsh.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/b89a04a7-a564-82cc-0123-587fe36ae5ad.png">

格納先とするS3バケット名を入力、アクセス方法は「NFS」を選択して「次へ」をクリックします。

![AWS_Storage_Gateway.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/3d62c97f-06b1-d324-58fa-468a86e9a297.png)

そのまま、「次へ」をクリックします。

![AWS_Storage_Gateway.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/d2b45f90-4064-704e-f1b7-032ff3c9d583.png)

そのまま、「次へ」をクリックします。

![AWS_Storage_Gateway.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/d16f2d79-8c30-49ac-1e8f-b7f6a2d56fdd.png)

一覧画面に戻ると、nfsマウントするためのコマンドが記載されているのでコピーしましょう。
ただし、IPアドレスはEC2インスタンスのパブリックIPに置き換える必要があります。

![AWS_Storage_Gateway.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/1b4686ae-d1f2-e810-c67a-44a352467605.png)

## 動作確認

### ローカルPCからNFSマウント

今回はローカルPCのOSがmacOSだったので以下のようなコマンドを入力しました。

```
$ mkdir storage
$ mount_nfs -o vers=3,nolock,hard -v (EC2パブリックIP):/(S3バケット名) storage
```

### テストファイルを格納

試しにファイルを作成してみます。

```
$ touch storage/test.txt
```

少し(1分ほど)待ってから、S3バケットの中身を確認すると、ファイルが生成されていました。

<img width="1919" alt="S3_Management_Console_と_zsh.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/fc14ed09-d6fb-c7b9-02d3-57b7afd3d31f.png">

## 参考
以下記事を参考とさせていただきました。

[[Storage Gateway] EC2からS3バケットをNFSマウントしてみた〜2018年冬〜](https://dev.classmethod.jp/etc/storage-gateway-20181122/)
[ファイルゲートウェイで簡単ファイルサーバ](http://blog.serverworks.co.jp/tech/2017/03/01/filegateway/)