JPCYBERの設定Import/Export機能を確認する

# はじめに
S3をマウントするツールであるJPCYBERには、設定のインポート/エクスポート機能があります。
普段あまり使う機会はないですが、近々触る可能性が出てきましたので設定内容について確認してみます。

尚、機能自体は今年の7月6日にリリースされており、settings.xmlというファイルで出力されるようです。

>設定ファイルのインポート／エクスポート機能を追加したアップデート版をリリースしました。
>＜V5.2 アップデート内容＞
>■ 設定ファイルのインポート／エクスポート機能を追加
>設定ファイル（settings.xml）のインポート／エクスポート機能を追加しました。この機能により、マウント情報やオプションの設定を含む設定内容をバックアップしたり、設定内容を簡単に切り替えたりすることができるようになりました。また、同じ設定を複数の PC に設定したい場合、他の PC で設定をインポートすることができるようになりました。
>※ 他の PC で設定をインポートした場合は、シークレット キーの再入力が必要になります。

https://www.jpcyber.com/release/20210706-version-5.2

# 環境
- Windows Server 2019
- JPCYBER 7.1.1175.0

# 準備
JPCYBERは試用版をEC2にインストール済みでしたので、こちらを利用します。

検証のため、1つだけS3バケットをマウントしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/eb8bffd0-ebd5-f28b-861f-6f61b5464feb.png)

# 設定エクスポート
では実際にエクスポートを行っていきます。
ファイルの「設定のエクスポート」からエクスポートを実施します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/4b429174-2178-e991-7233-793df5a708c7.png)

エクスポートを押下すると出力する場所を聞かれるので、適当にデスクトップを指定して保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/9d575980-50e5-dfea-1b73-5adf26e34903.png)

エクスポートが完了しました。
出力されたメッセージを見る限り、どうやら他のPCでインポートしたい場合はシークレットキーなるものの入力が必要になるようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/b8d911e3-ff6e-7814-e245-15cc96e8f8d9.png)

問題なくxmlファイルが出力されているようでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/d786202c-0916-f909-8076-50d267801c99.png)

# xmlファイル確認
出力されたxmlファイルの全文がこちらになります。
もしかしたら設定がされていないことで出力されていない設定もあるかもしれませんが、今回はこちらを元に見ていきます。

```
<?xml version="1.0" encoding="utf-8"?>
<Settings>
  <InheritACL>false</InheritACL>
  <PreserveACL>false</PreserveACL>
  <MultipartUploadSize>16</MultipartUploadSize>
  <UseProxy>false</UseProxy>
  <ProxyHost />
  <ProxyPort />
  <UseCredential>false</UseCredential>
  <ProxyUser />
  <ProxyPassword />
  <EnableReadCache>true</EnableReadCache>
  <FileCacheFolder>C:\ProgramData\JPCYBER S3 Drive</FileCacheFolder>
  <FileCacheSize>25</FileCacheSize>
  <StreamingSize>16</StreamingSize>
  <MaxWorkerThreadCount>8</MaxWorkerThreadCount>
  <MetadataCacheSeconds>120</MetadataCacheSeconds>
  <PrefetchMetadataCache>true</PrefetchMetadataCache>
  <Timeout>120</Timeout>
  <LogLevel>2</LogLevel>
  <LogRotate>30</LogRotate>
  <EnableSecurityLog>true</EnableSecurityLog>
  <EnableShellEx>true</EnableShellEx>
  <Drives>
    <Drive>
      <DriveName>Z:</DriveName>
      <VolumeLabel />
      <BucketName>test-tmp-2021</BucketName>
      <Storage>Amazon_S3</Storage>
      <EndpointURL>ap-northeast-1</EndpointURL>
      <AccessKey />
      <SecretKey />
      <SignatureVersion>4</SignatureVersion>
      <UseTLS>true</UseTLS>
      <ForcePathStyle>false</ForcePathStyle>
      <ListObjectsV2>true</ListObjectsV2>
      <Disk>Network</Disk>
      <ReadOnly>false</ReadOnly>
      <StorageClass>STANDARD</StorageClass>
      <EncryptionMethod>None</EncryptionMethod>
      <CannedACL>NoACL</CannedACL>
      <TransferAcceleration>false</TransferAcceleration>
      <ContentMD5>false</ContentMD5>
    </Drive>
  </Drives>
</Settings>
```

ファイル内容を見る限り、大きく分けて2種類の設定があるようでした。

- 共通設定が21項目
- ドライブ固有設定が18項目

## 共通項目
### Amazon S3オプション
設定の上から順番に実際の設定項目と紐づけながら見ていきたいと思います。

パッと見て思ったのは、xmlの表示順と設定項目の順番は一致してそうな配置になってました。
どちらもACL周りの設定が最初にありました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/21d63985-895e-9861-7548-5215bbde25de.png)

```
  <InheritACL>false</InheritACL>
  <PreserveACL>false</PreserveACL>
  <MultipartUploadSize>16</MultipartUploadSize>
```

### プロキシサーバ
プロキシサーバの設定も実際の設定と一致していました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/6226b730-a924-7fdb-dfd1-9584568fdf17.png)

```
  <UseProxy>false</UseProxy>
  <ProxyHost />
  <ProxyPort />
  <UseCredential>false</UseCredential>
  <ProxyUser />
  <ProxyPassword />
```

### 高速化キャッシュ
高速化キャッシュで初めて実際の設定項目と違う設定項目がxmlファイルのほうに出てきました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/0e7bcfe9-d2d2-e86a-933f-f70b55b92dd0.png)

キャッシュの有効化有無、保存先フォルダ、キャッシュサイズの上限は設定画面の通りになっています。

```
  <EnableReadCache>true</EnableReadCache>
  <FileCacheFolder>C:\ProgramData\JPCYBER S3 Drive</FileCacheFolder>
  <FileCacheSize>25</FileCacheSize>
```

追加の設定は以下の4つでした。
項目名を見る限りキャッシュを処理するときにスレッド数やメタデータキャッシュの保持時間、メタデータキャッシュのプリフェッチ(事前読み込み)有無が設定されているようです。
StreamingSizeとFileCacheSizeは何が違うのでしょうか。。
Timeoutとあるのはどこのタイムアウト時間が設定されているのか気になります。

```
  <StreamingSize>16</StreamingSize>
  <MaxWorkerThreadCount>8</MaxWorkerThreadCount>
  <MetadataCacheSeconds>120</MetadataCacheSeconds>
  <PrefetchMetadataCache>true</PrefetchMetadataCache>
  <Timeout>120</Timeout>
```

### ログ
ログについても設定画面にない項目がいくつかありました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/61d69c4a-4c1c-7ed9-fce3-7aeb0ea2c6b5.png)

またログのレベルは、ログなし、エラーのみ、警告とエラー、詳細情報の4つがありますが、設定上は警告とエラーが2で設定されるみたいです。
恐らくですが、1:詳細情報、2:警告とエラー、3:エラーのみ、4:ログなし、という感じじゃないかと思いました。

```
  <LogLevel>2</LogLevel>
```

設定画面にないのは以下の3つの設定で、LogRotateはログのローテート設定というのはすぐにわかりました。30とあるので恐らく30daysでしょう。
EnableSecurityLogとEnableShellExは[JPCYBERの公式HP](https://www.jpcyber.com/support/s3-drive-advanced-settings)に書いてました。EnableSecurityLogは共有リンク作成時のセキュリティログ機能の有効無効を設定するパラメータで、EnableShellExはエクスプローラーでJPCYBERメニューを表示しないように設定することができるようです。

```
  <LogRotate>30</LogRotate>
  <EnableSecurityLog>true</EnableSecurityLog>
  <EnableShellEx>true</EnableShellEx>
```

共通項目はこんなところなので、次は個別項目を見ていきます。

## 個別項目
### ドライブ設定
ドライブの設定も実際の設定画面と同じように表示順と記載順がほぼ一致していました。
ドライブ名やラベル名分が若干違うぐらいみたいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/9de4d01c-8517-5222-0c3b-a6ccac71ffe8.png)

以下の設定だとSignatureVersionは実際の設定画面にはないですが、[こちら](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/UsingAWSSDK.html)を見る限りAmazonS3は「 AWS Signature Version 4 のみをサポート」しているようなので、それに対応した設定のようです。
昔はVersion2をサポートしていたようなので、その変化に対応できるように設定項目が準備された感じでしょうね。
```
      <DriveName>Z:</DriveName>
      <VolumeLabel />
      <BucketName>test-tmp-2021</BucketName>
      <Storage>Amazon_S3</Storage>
      <EndpointURL>ap-northeast-1</EndpointURL>
      <AccessKey />
      <SecretKey />
      <SignatureVersion>4</SignatureVersion>
      <UseTLS>true</UseTLS>
```

設定画面外のパラメータは以下の2つがありFarcePathStyleは[S3のパス形式](https://qiita.com/c-yan/items/32e7fade98cc95cf17cc)に関連するもので、ListObjectV2は[S3のAPIバージョンの指定](https://dev.classmethod.jp/articles/s3-new-api-list-object-v2/)なので、特に変更せずにこのままで良さそうです。
```
      <ForcePathStyle>false</ForcePathStyle>
      <ListObjectsV2>true</ListObjectsV2>
```

### ドライブのオプション
ドライブオプションはパラメータが2つだけです。特筆するほどでもないでしょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/11f29367-713b-ff02-05cf-562e94e36ad6.png)

```
      <Disk>Network</Disk>
      <ReadOnly>false</ReadOnly>
```

### Amazon S3 オプション
S3オプションのパラメータも設定画面のものと一致しているようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/91e8d5c0-837f-fc78-e312-ef94ba0df28e.png)

```
      <StorageClass>STANDARD</StorageClass>
      <EncryptionMethod>None</EncryptionMethod>
      <CannedACL>NoACL</CannedACL>
      <TransferAcceleration>false</TransferAcceleration>
      <ContentMD5>false</ContentMD5>
```

ストレージクラスやACLはリストから選択する形になるので、それぞれ関連する設定項目がパラメータとして設定されるようになっていると思われます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/f3fcfcb1-fc16-5b1a-aae2-7905e220084f.png)

# 設定インポート
最後にどのように設定がインポートされるのかを試してみます。
マウントしていたS3を削除して、オプション設定も色々変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/2020f41f-adaf-f57c-3c75-c825515faecc.png)

ファイル→設定のインポートから最初にエクスポートしたxmlファイルを指定して開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/ba7f06d2-1cba-9736-1a44-05607a7234c7.png)

同じサーバ上でのインポートなので、シークレットキーは聞かれずにインポートが完了しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/85f25951-7a4b-dd6d-2dde-954773b2b26e.png)

先ほど変更した内容は全部上書きされ、xmlのパラメータで更新されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/9da81742-3a7c-4570-05f7-6630b31a5463.png)

# おわりに
というわけで、JPCYBERの設定インポート/エクスポート機能を使って、設定項目を一通り確認してみました。
若干S3のアップデートの歴史が見え隠れして個人的には少し面白かったです。
複数のマウントをしている環境で移行やバージョンのダウングレードをしたい場合は使える機能だと思いました。