Oracle Cloud File Storage Serviceを使ってみた

# はじめに

Oracle Cloud Infrastructure では、フルマネージドなファイルストレージサービスが提供されています。
Oracle Cloud側で管理されているファイルシステムを、運用をあまり意識せずに利用できるため、つかいやすいサービスとなっていると思います。
主なユースケースは以下のものがあります。

- 汎用的なファイルストレージ : 汎用的なファイルシステムとして利用
- ビッグデータと分析 
- 既存システムのLift : 既存システムでは、NFSを使用してファイル共有を行う場合は多いと思います。既存システムからの移行に柔軟に対応可能です
- データベースのトランザクションアプリケーション
- バックアップ、DR



今回の記事では、File Storage を利用するまでの手順を確認していきます。



# File Storageの構成要素

FIle Storage サービスの構成要素は、若干複雑です。まず初めに、簡単な概要図を見て関係性を理解しましょう。

![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/5a2d44ea-c51b-514a-f0c8-dafa431dec5b.png)





## Filesystem

OCI側で管理されている、フルマネージドなファイルシステムです。利用側から運用を意識することはありません。
自動的に、エクサバイト級の容量までスケールアップするため、ほぼ容量を気にせず使うことが出来ます。
注意点は、Availability Domain 内に作成するため、AD・Regionの障害ために定期的なバックアップなどを検討する必要があります。(2019年4月現在)



## Mount Target

Filesystemをエクスポートするための、NFSエンドポイント。VCNのSubnet上に作成する形となり、Subnet上のインスタンスから、IPアドレスやDNS名を指定することで、NFSマウントを行うことが出来ます。
1つのMount Targetに、複数のExportを作成することで、複数のFilesystemをエクスポートすることが出来ます。
Mount Targetの作成上限(Service Limit)が存在しており、初期状態ではAvailability Domain単位で2個までとなっています。上限の緩和は申請可能。

Mount Targetに紐づけたいFilesystemは、それぞれ同一のAvailability Domain で作成する必要があります。

下記のmountコマンドを例にすると、`10.0.0.3` の部分を作成することができます。

```
mount -v -t nfs -o vers=3 10.0.0.3:/scrachfs1 /mnt/fs01
```



## Export

Mount Target 上で管理されており、Filesystemに紐づく NFSのPathを指定することが出来ます。
下記のmountコマンドを例にすると、`/scrachfs1` の部分を任意のPathでExportすることができます。

```
mount -v -t nfs -o vers=3 10.0.0.3:/scrachfs1 /mnt/fs01
```





# VCN上のインスタンスからマウント

VCN上のインスタンスからマウントするまでの手順を確認してみましょう。



## Mount Target

Mount Target を作成します。subnetid などのパラメータは、環境に合わせて変更してください

```
oci fs mount-target create --availability-domain TGjA:PHX-AD-3 --subnet-id ocid1.subnet.oc1.phx.secret --display-name scrachmounttarget
```



Mount Target作成時に、自動的に作成される Export Set の OCID を取得して、`esid`変数へ格納します。

```
set esid (oci fs export-set list --availability-domain TGjA:PHX-AD-3 --display-name "scrachmounttarget - export set" | jq -r ".data[0].id")
```



## Filesystem

Filesystemを作成します。

```
oci fs file-system create --availability-domain TGjA:PHX-AD-3 --display-name scrachfs
```



FilesystemのOCIDを取得して、`fsid`変数へ格納します。

```
set fsid (oci fs file-system list --availability-domain TGjA:PHX-AD-3 --display-name scrachfs | jq -r ".data[0].id")
```



## Export

```
oci fs export create --export-set-id $esid --file-system-id $fsid --path "/scrachfs"
```



## Security List で Portを開放

Security List で以下のルールを開放します。NFSプロトコルとして、以下のポートを開ける必要があります。

- Ingress Rules
  - TCP Destination Port 111
  - TCP Destination Port 2048-2050
  - UDP Destination Port 111
  - UDP Destination Port 2048
- Egress
  - TCP Source Port 2048-2050
  - TCP Source Port 111
  - UDP Source Port 111

対象PortのDocument
<https://docs.cloud.oracle.com/iaas/Content/File/Tasks/securitylistsfilestorage.htm>





## NFS Client からマウント


OCIのCompute Instaceを適当に作成し、showmountで、File Storage が公開されているか確認します。

```
> showmount -e 10.0.0.3
Export list for 10.0.0.3:
/scrachfs1 (everyone)  <============= このような表示で見えていればOK
>
```



InstanceへNFSマウントを行います。

```
sudo mkdir /mnt/fs01
sudo mount -v -t nfs -o vers=3 10.0.0.3:/scrachfs1 /mnt/fs01
```



容量を確認します。Mount元のOSからは8.0エクサバイトで認識されています。おそらく、実際に8.0エクサバイトは確保されてはおらず、実際の使用容量とともに確保容量が増えていくのだと思います。

```
# df -hT
Filesystem          Type      Size  Used Avail Use% Mounted on
udev                devtmpfs  7.4G     0  7.4G   0% /dev
tmpfs               tmpfs     1.5G  960K  1.5G   1% /run
/dev/sda1           ext4       45G  1.3G   44G   3% /
tmpfs               tmpfs     7.4G     0  7.4G   0% /dev/shm
tmpfs               tmpfs     5.0M     0  5.0M   0% /run/lock
tmpfs               tmpfs     7.4G     0  7.4G   0% /sys/fs/cgroup
/dev/sda15          vfat      105M  3.6M  101M   4% /boot/efi
/dev/loop0          squashfs   90M   90M     0 100% /snap/core/6673
/dev/loop1          squashfs   15M   15M     0 100% /snap/oracle-cloud-agent/3
tmpfs               tmpfs     1.5G     0  1.5G   0% /run/user/1001
10.0.0.3:/scrachfs1 nfs       8.0E     0  8.0E   0% /mnt/fs01　　　<========= ここの部分
```



適当にファイルを作成してみます

```
echo "mieru-?" > /mnt/fs01/test.txt
```



中身を確認します

```
> cat /mnt/fs01/test.txt
mieru-?
```





# tips

- Filestorageのパフォーマンスをよくしたい場合は、FilesystemとMount元のインスタンスを同一ADで作成すると良い。