AWS Storage GatewayとOCI Storage Gatewayを利用してAWS S3上のデータをOCI Object Storageにファイルコピーで移行してみた

# はじめに

AWS S3内のデータをOCIのObject Storageにファイルコピーで移行する方法として、[こちらの記事](https://qiita.com/500InternalServerError/items/2428e353398844766b43)ではgoofysを利用する方法を紹介しました。

goofysはオープンソースなのでサポートが心配、という方向けに、今回はOracleから提供されているOCI Storage Gateway（Object StorageバケットをNFSで共有できるゲートウェイ）、AWSから提供されているAWS Storage Gateway（S3バケットをNFSで共有できるゲートウェイ）を利用してAWS S3からOCI Object Storageにファイルコピーでデータを移行する方法を試してみました。

# 事前準備
＜OCI側＞
・Object Storageへのアクセスに使用するユーザのAPIキーの登録を済ませておきます。
　- フィンガープリント
　- 秘密鍵
　- パスフレーズ（キーペアの作成時に設定した場合）

＜AWS側＞
・SSHログイン用のキーペアの作成を作成しておきます。

＜Oracle Cloud Infrastructure Storage Gatewayのインストーラのダウンロード＞
[こちら](https://www.oracle.com/downloads/cloud/oci-storage-gateway-downloads.html)からOracle Cloud Infrastructure Storage Gatewayのインストーラを手元のPCにダウンロードしておきます。

# 1. VPCの構成
**・VPCの作成**
　名前：SG-VPC
　IPv4 CIDR ブロック：10.0.0.0/16
　IPv6 CIDR ブロック：「IPv6 CIDR ブロックなし」を選択（デフォルト）
　テナンシー：「デフォルト」を選択
　「VPCを作成」をクリック
![スクリーンショット 2020-11-20 10.47.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/12a26ced-7706-1c44-0b7b-3b0532b8506d.png)
**・サブネットの作成**
　VPC ID：作成したVPCを選択
　サブネット名：SG-Subnet
　アベイラビリティゾーン：任意の選択肢を選択
　IPv4 CIDR ブロック：10.0.1.0/24
　「サブネットの作成」クリック
![スクリーンショット 2020-11-20 10.49.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/f049272e-4d0c-0d17-3f67-496b283de14f.png)
![スクリーンショット 2020-11-20 10.50.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/28fe3f91-5bde-4791-4ea4-bb7909ff5817.png)
**・インターネットゲートウェイの作成**
　名前タグ：SG-IG
　「インターネットゲートウェイの作成」をクリック
![スクリーンショット 2020-11-20 10.54.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/2702a1cf-bf29-f3eb-f58e-214c09f2c1f4.png)
**・インターネットゲートウェイをVPCにアタッチ**
　「アクション」をクリックし、「VPCにアタッチ」をクリック
![スクリーンショット 2020-11-20 10.56.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/c190a462-4f3d-185c-7c43-b7e4b8607879.png)
　使用可能なVPC：先ほど作成した「SG-VPC」を選択
　「インターネットゲートウェイのアタッチ」をクリック
![スクリーンショット 2020-11-20 10.56.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/85b1c8eb-6952-565f-f270-1648dd9103ba.png)
**・ルートテーブルの作成**
　名前タグ：SG-RT
　VPC：作ほど作成した「SG-VPC」を選択
　「作成」をクリック
![スクリーンショット 2020-11-20 10.58.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/5d07007f-8349-0e27-78ce-3e7799247b05.png)
**・ルートテーブルへのルートルールの追加**
「SG-RT」を選択し、「ルート」タブをクリック
「ルートの編集をクリック
![スクリーンショット 2020-11-20 11.01.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/d2234d92-97c3-ce15-dd4d-4bb24359895f.png)
　「ルートの追加」をクリック
![スクリーンショット 2020-11-20 11.02.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/fc14faec-5b45-74cd-d4ca-46f257a0f604.png)
　送信先：0.0.0.0/0
　ターゲット：先ほど作成したインターネットゲートウェイ「SG-IG」を選択
　「ルートの保存」をクリック
![スクリーンショット 2020-11-20 11.02.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/c91dd5de-60f8-1e6f-79d4-eaf075563c26.png)
「閉じる」をクリック
![スクリーンショット 2020-11-20 11.02.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/d991b571-1180-d572-3981-929f34a17196.png)
ルートテーブル「SG-RT」にルートルールが追加されました。
![スクリーンショット 2020-11-20 11.03.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/57e06d8a-f1a5-db8b-bb1b-a4aa61cfe4d7.png)
**・ルートテーブルのサブネットへの関連付け**
　「サブネットの関連付け」タブをクリック
　「サブネットの関連付けの編集」をクリック
![スクリーンショット 2020-11-20 11.03.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/1ef826f0-7d10-65e0-adea-a80c69644610.png)
　先ほど作成したサブネット「SG-Subnet」を選択
　「保存」をクリック
![スクリーンショット 2020-11-20 11.03.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/c64addc3-56a7-926b-3f8d-2263c7df53a1.png)
　ルートテーブル「SG-RT」がサブネット「SG-Subnet」に関連付けられました。
![スクリーンショット 2020-11-20 11.04.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/8d0a175b-eb02-acf3-c73b-091e6644366a.png)

# 2. OCI Storage Gateway用のEC2インスタンスの作成
OCI Storage Gatewayのインストール要件は、[こちら](https://docs.cloud.oracle.com/ja-jp/iaas/Content/StorageGateway/Tasks/installingstoragegateway.htm)に記載があります。
以下、一部抜粋。
＜ハードウェアの推奨事項および要件＞
　2つのデュアルコアCPU以上、4コアCPUを推奨
　メモリーの最小要件:
　　ストレージ・ゲートウェイのどのファイル・システムでも16GBが必須
　　ファイル数が5000万個までのファイル・システムでは32GB
　　ファイル数が1億個までのファイル・システムでは64GB
　推奨されるローカル・ストレージのディスク・サイズは600GB
　　ファイル・システム・キャッシュ　500GB
　　メタデータ・ストレージ　80GB
　　ログ・ストレージ　20GB
＜ソフトウェア要件＞
　Oracle Linux 7およびUEKリリース4以降
　Docker 1.12.6以上
　NFSv4

＊OCI Storage GatewayはDockerコンテナ上で動作します。

今回は検証目的のため、深く考えずにコミュニティAMIからOracle Linux 7.8を選択
![スクリーンショット 2020-11-19 20.37.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/f7b21e55-8c5f-bf0a-2254-b69f3bbf65b2.png)
インスタンスタイプとして、最小要件を満たすm4.xlarge（4vCPU/16GBメモリ）を選択
「次のステップ：インスタンスの詳細の設定」をクリック
![スクリーンショット 2020-11-19 20.39.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/264383be-ef4d-8e03-0538-50576caef938.png)
　ネットワーク：先ほど作成した「SG-VPC」を選択
　サブネット：作ほど作成した「SG-Subnet」を選択
　自動割り当てパブリックIP：「有効」を選択
　その他の項目はデフォルトのまま
　「次のステップ：ストレージの追加」をクリック
![スクリーンショット 2020-11-19 20.39.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/af971ca3-2530-bf7a-8712-c09c3b87c5d5.png)
「新しいボリュームの追加」をクリックしOCI Storage Gateway用のローカルストレージを追加
　ボリュームタイプ：EBS
　サイズ：600
　終了時に削除：チェックをオン
　「次のステップ：タグの追加」をクリック
![スクリーンショット 2020-11-19 20.41.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/dd0384f2-81c6-486e-624b-ae416694f44e.png)
今回は特にタグは追加せず、「次のステップ：セキュリティグループの設定」をクリック
![スクリーンショット 2020-11-19 20.41.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/264d7213-47f1-ff49-71c1-29959f67c28a.png)
　セキュリティグループの割り当て：「新しいセキュリティグループを作成する」を選択
　セキュリティグループ名：Security Group for OCI Storage Gateway
　説明：任意
　デフォルトのルール（ソース 0.0.0.0/0に対してSSHを許可）があることを確認
　「確認と作成」をクリック
![スクリーンショット 2020-11-19 20.42.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/06f8da43-20ba-b5e8-e1c4-f05385a5b5ea.png)
入力内容を確認し、「起動」をクリック
![スクリーンショット 2020-11-19 20.43.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/8421824f-bd6d-fdea-5485-e9743ed8968c.png)
作成済みの既存のキーペアを選択して「インスタンスの作成」をクリック
![スクリーンショット 2020-11-19 20.44.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/eedbe003-0891-1563-7ca6-a65565f98865.png)
インスタンスの作成が開始されました。
![スクリーンショット 2020-11-19 20.44.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/ac17c73b-a2de-f43e-acf3-408be04795e8.png)

# 3. OCI Storage Gatewayの構築
作成したインスタンスにSSHクライアントからec2-userとしてログインします。

マウントポイント/dataを作成します。

```
[ec2-user@ip-10-0-1-92 ~]$ sudo mkdir /data
```
アタッチしたストレージ（/dev/xvdb）をフォーマットして/dataにマウントします。

```
[ec2-user@ip-10-0-1-92 ~]$ lsblk
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   30G  0 disk 
└─xvda1 202:1    0   30G  0 part /
xvdb    202:16   0  600G  0 disk 
[ec2-user@ip-10-0-1-92 ~]$ sudo mkfs -t xfs /dev/xvdb
meta-data=/dev/xvdb              isize=256    agcount=4, agsize=39321600 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0, sparse=0
data     =                       bsize=4096   blocks=157286400, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=76800, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[ec2-user@ip-10-0-1-92 ~]$ sudo mount /dev/xvdb /data
[ec2-user@ip-10-0-1-92 ~]$ df -k
Filesystem     1K-blocks    Used Available Use% Mounted on
devtmpfs         8057896       0   8057896   0% /dev
tmpfs            8074556       0   8074556   0% /dev/shm
tmpfs            8074556   16820   8057736   1% /run
tmpfs            8074556       0   8074556   0% /sys/fs/cgroup
/dev/xvda1      31445996 2278576  29167420   8% /
tmpfs            1614912       0   1614912   0% /run/user/1000
/dev/xvdb      628838400   32976 628805424   1% /data
```
Dockerのインストールのため、リポジトリol7_addonsを有効にします。

```
[ec2-user@ip-10-0-1-92 ocisg-1.3]$ sudo vi /etc/yum.repos.d/oracle-linux-ol7.repo
```
```/etc/yum.repos.d/oracle-linux-ol7.repo
[ol7_addons]
name=Oracle Linux $releasever Add ons ($basearch)
baseurl=https://yum$ociregion.oracle.com/repo/OracleLinux/OL7/addons/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=1 <- ここをenabled=0からenabled=1に変更
```

PCにダウンロードしておいたOCI Storage Gatewayのインストーラ（ocisg-1.3.tar.gz）を、作成したインスタンスの/tmpにSCP等でアップロードします。

ocisg-1.3.tar.gzを解凍し、インストールスクリプトを実行してOCI Storage Gatewayをインストールします。

```
[ec2-user@ip-10-0-1-92 ~]$ cd /tmp
[ec2-user@ip-10-0-1-92 tmp]$ sudo tar xvzf ocisg-1.3.tar.gz
[ec2-user@ip-10-0-1-92 tmp]$ cd ocisg-1.3/
[ec2-user@ip-10-0-1-92 ocisg-1.3]$ sudo ./ocisg-install.sh
＊Dockerをインストールするか聞かれるのでyと入力
Docker does not appear to be installed. Do you want to install docker engine with yum? [y/N] y
＜中略＞
Installed:
  docker-engine.x86_64 0:19.03.11.ol-6.el7                                        

Dependency Installed:
  container-selinux.noarch 2:2.107-3.el7                                          
  containerd.x86_64 0:1.2.14-1.0.1.el7                                            
  criu.x86_64 0:3.12-2.el7                                                        
  docker-cli.x86_64 0:19.03.11.ol-6.el7                                           
  libnet.x86_64 0:1.1.6-7.el7                                                     
  libnl3.x86_64 0:3.2.28-4.el7                                                    
  protobuf-c.x86_64 0:1.0.2-3.el7                                                 
  runc.x86_64 0:1.0.0-19.rc5.git4bb1fe4.0.4.el7                                   

Complete!
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
Setting the devicemapper storage driver ...

＊NFSサーバをインストールするか聞かれるのでyと入力
NFS server does not appear to be installed. Do you want to install NFS with yum? [y/N] y
＜中略＞
Installed:
  nfs-utils.x86_64 1:1.3.0-0.68.0.1.el7                                           

Dependency Installed:
  gssproxy.x86_64 0:0.7.0-29.el7             keyutils.x86_64 0:1.5.8-3.el7        
  libbasicobjects.x86_64 0:0.1.1-32.el7      libcollection.x86_64 0:0.7.0-32.el7  
  libevent.x86_64 0:2.0.21-4.el7             libini_config.x86_64 0:1.3.1-32.el7  
  libnfsidmap.x86_64 0:0.25-19.el7           libpath_utils.x86_64 0:0.2.1-32.el7  
  libref_array.x86_64 0:0.1.5-32.el7         libtirpc.x86_64 0:0.2.4-0.16.el7     
  libverto-libevent.x86_64 0:0.2.5-4.el7     quota.x86_64 1:4.01-19.el7           
  quota-nls.noarch 1:4.01-19.el7             rpcbind.x86_64 0:0.2.0-49.el7        
  systemd-sysv.x86_64 0:219-78.0.1.el7_9.2   tcp_wrappers.x86_64 0:7.6-77.el7     

Dependency Updated:
  libgudev1.x86_64 0:219-78.0.1.el7_9.2      systemd.x86_64 0:219-78.0.1.el7_9.2  
  systemd-libs.x86_64 0:219-78.0.1.el7_9.2  

Complete!
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.

＊devicemapperの警告が出ますが、無視します。
*************************************
Imported temporary env vars from ec2-user to this install session
*************************************
Checking that docker is installed and using the correct version
Found docker version Docker version 19.03.11-ol, build 1f5403e
WARNING: the devicemapper storage-driver is deprecated, and will be removed in a future release.
WARNING: devicemapper: usage of loopback devices is strongly discouraged for production use.
         Use `--storage-opt dm.thinpooldev` to specify a custom block storage device.
WARNING: the devicemapper storage-driver is deprecated, and will be removed in a future release.
WARNING: devicemapper: usage of loopback devices is strongly discouraged for production use.
         Use `--storage-opt dm.thinpooldev` to specify a custom block storage device.

*************************************
Checking host prerequisites
*************************************

Detected linux operating system
Checking kernel version
Found kernel version 4.14.35-1902.300.11.el7uek.x86_64
Checking NFS version
Found NFS version 4

*************************************
All prerequisites have been met
*************************************


*************************************
Begin installation
*************************************
＊インストール先を聞かれるので、何も入力せずにエンター
Enter the install location press enter for default (/opt/ocisg/) : 
Installing to destination /opt/ocisg/
Copied install scripts
Copied OCISG image
Starting configuration script

＊ファイルシステムキャッシュのパスを聞かれるので、/data/cacheと入力してエンター
Enter the path for OCISG file system cache : /data/cache
Warning: path /data/cache does not exist, creating.

＊メタデータの保存先を聞かれるので、/data/metadataと入力してエンター
Enter the path for OCISG metadata storage : /data/metadata
Warning: path /data/metadata does not exist, creating.

================================================================================
WARNING:
Cache and metadata storage are on the SAME volume.
It is recommended to have a SEPARATE volume for metadata storage.
Recommended MINIMUM space for metadata storage is 80 GB.
================================================================================
＊キャッシュとメタデータの保存先が同じ同じボリュームとの警告が出ますが、今回は検証目的で問題ないため、yと入力してエンター
Would you like to proceed anyway ('Y' to proceed, 'N' to stop installation) (y/N) ? y

＊ログの保存先を聞かれるので、/data/logと入力してエンター
Enter the path for OCISG log storage : /data/log
Warning: path /data/log does not exist, creating.

================================================================================
WARNING:
Cache, Metadata, and log storage are on the SAME volume.
It is recommended to have a SEPARATE volume for log storage.
Recommended MINIMUM space for log storage is 20 GB.
================================================================================
＊キャッシュとメタデータ、ログの保存先が同じボリュームとの警告が出ますが、今回は検証目的で問題ないため、yと入力してエンター
Would you like to proceed anyway ('Y' to proceed, 'N' to stop installation) (y/N) ? y
Writing configuration
Importing image
0a8af4fbe73a: Loading layer  1.024kB/1.024kB
fc9b318feb73: Loading layer  235.2MB/235.2MB
＜中略＞
ff3adf1ac705: Loading layer  1.024kB/1.024kB
Creating OCISG Volume with args -v /cloudsync/:/cloudsync/:shared -v /data/cache:/usr/share/oracle/ -v /data/metadata:/usr/share/oracle/system/ -v /data/log:/var/log/gateway 
Applying configuration file to container
Starting OCISG [ocisg:1.3]
Setting up config file port with nfs
Setting up config file port with rest
Management Console: https://ip-10-0-1-92.ap-northeast-1.compute.internal:443
If you have already configured an OCISG FileSystem via the Management Console,
you can access the NFS share using the following port.

NFS Port: 32769

Example: mount -t nfs -o vers=4,port=32769 ip-10-0-1-92.ap-northeast-1.compute.internal:/<OCISG FileSystem name> /local_mount_point
[ec2-user@ip-10-0-1-92 ocisg-1.3]$ 
```
OCI Storage Gatewayのインストールが完了しました。
管理コンソールにアクセスするためのURL、NFSポート、NFSマウントのサンプルコマンドをメモしておきます。

OCI Storage Gatewayの管理コンソールにアクセスするためにセキュリティグループを編集します。
「Security Group for OCI Storage Gateway」にHTTPSアクセスを許可するためのインバウンドルールを追加します。
「インバウンドルールを編集」をクリックします。
![スクリーンショット 2020-11-19 21.15.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/b9d56522-b2a7-b8b7-2e31-46ce7fddcf5d.png)
今回はマイIP（自宅のパブリックIPアドレス）からのすべてのトラフィックを許可しました。
![スクリーンショット 2020-11-19 21.15.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/3aee7fc8-2999-cafc-05e5-97d7e4d7e1df.png)

ブラウザからOCI Storage Gatewayのコンソールにアクセスします。
**https://＜インスタンスのパブリックIPアドレス＞:443**

初回アクセス時はパスワードの設定を求められます。
![スクリーンショット 2020-11-19 21.17.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/c8fabf2f-01b3-70aa-1594-add2960697fe.png)
設定したパスワードでOCI Storage Gatewayのコンソールにログインします。
![スクリーンショット 2020-11-19 21.18.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/fbd366e1-1e16-83ee-e77d-05776d546e68.png)
まだファイルシステムが作成されていないので、以下のような画面が表示されます。
「Create a File System」をクリックして、ファイルシステムを作成します。
![スクリーンショット 2020-11-19 21.18.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/9c6a700a-463e-4fce-ae63-730e9a80abd1.png)
File System Name：dest-oci-bucket
※こちらで指定した名前のバケットが存在しない場合、この名前で新規にバケットが作成されます。
SELECT the Object Storage tier in which you want to store data：「Standard」を選択
Object Storage API Endpoint：[こちら](https://docs.cloud.oracle.com/ja-jp/iaas/Content/API/Concepts/apiref.htm)を参照して利用するリージョンのObject Storageのエンドポイントを入力
Compartment OCID：作成するバケットのコンパートメントのOCID
Tenant OCID：テナントのOCID
User OCID：Object Storageのアクセスに使用するユーザのOCID
Public Key's Finger Print：APIキーに登録した公開鍵のフィンガープリント
Private Key：APIキーに登録した公開鍵に対応した秘密鍵の内容
Passphrase：秘密鍵のパスフレース（鍵の作成時に設定した場合のみ）
「Save」をクリック
![スクリーンショット 2020-11-19 21.30.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/b0c6d99b-a5c2-aff5-1cc4-c6d98c59af9e.png)
ファイルシステムが作成されました。
「Connect」をクリックして、作成したファイルシステムをObject Storageバケットに接続します。
![スクリーンショット 2020-11-19 21.31.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/110b9d80-a79f-a93e-f09c-51948b5c83bc.png)
作成したファイルシステム名「dest-oci-bucket」をクリックすると、ファイルシステムの詳細が表示されます。
![スクリーンショット 2020-11-19 21.32.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/c87702cb-6f9c-af88-8e20-fe6a4b9d2bed.png)

# 4. OCI Storage Gatewayから共有されているObject StorageバケットをNFSでマウント

OCI Storage Gatewayから共有されているNFSをマウントするためのマウントポイント/mnt_oを作成します。

```
[ec2-user@ip-10-0-1-92 ~]$ sudo mkdir /mnt_o
```
/mnt_oにOCI Storage Gatewayから共有されているdest-oci-bucketをNFSでマウントします。

```
[ec2-user@ip-10-0-1-92 ~]$ sudo mount -t nfs -o vers=4,port=32769 localhost:/dest-oci-bucket /mnt_o
```
/mnt_oに移動し、ファイルを作成します。

```
[ec2-user@ip-10-0-1-92 ~]$ cd /mnt_o
[ec2-user@ip-10-0-1-92 mnt_o]$ touch aaa.txt
[ec2-user@ip-10-0-1-92 mnt_o]$ ls
aaa.txt
```
OCIコンソールから、バケットdest_oci_bucketの内容を確認します。
![スクリーンショット 2020-11-19 21.35.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/5ba083d5-5556-4110-b6a7-07de9d2782e3.png)
/mnt_oに作成したファイルが、Object Storageバケット「dest-oci-bucket」内に作成されていることが確認できました。

# 5. AWS Storage Gateway（ファイルゲートウェイ）の構築
AWSのコンソールで「サービス」から「Storage Gateway」に移動します。
「今すぐ始める」をクリックします。
![スクリーンショット 2020-11-19 20.15.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/87b97d4a-ef95-4525-ccf5-adcff1204010.png)
「ファイルゲートウェイ」を選択し、「次へ」をクリック
![スクリーンショット 2020-11-19 20.15.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/15f9f72d-dc19-074f-01e0-9298425984ce.png)
「Amazon EC2」をクリックして、隣にある「インスタンスの起動」をクリックします。
「インスタンスを起動」をクリックすると、インスタンス作成のウィザードが別のタブで開きますが、こちらのタブは閉じずにそのままにしておきます。
![スクリーンショット 2020-11-19 20.16.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/2466df14-08f6-7239-f663-b2ca64573e25.png)
インスタンスタイプを選択します。
今回はm4.xlargeを選択しました。
※あまり小さなインスタンスを選ぶとメモリ不足でStorage Gatewayが正しく動作しませんでした。
インスタンスタイプを選択したら、「次のステップ：インスタンスの詳細の設定」をクリック
![スクリーンショット 2020-11-19 20.16.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/aaf084a9-28a7-f073-4a9b-d0f07b7525bf.png)
ネットワーク：先ほど作成した「SG-VPC」を選択
サブネット：先ほど作成した「SG-Subnet」を選択
その他はデフォルトのまま
「次のステップ：ストレージの追加」をクリック
![スクリーンショット 2020-11-19 20.17.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/c599022c-6930-1ec6-cbd5-a6e416b06126.png)
「新しいボリュームの追加」をクリック
![スクリーンショット 2020-11-19 20.17.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/52dae43b-cc6e-8121-26cf-ecc69e9ffc26.png)
Storage Gatewayで使用するボリュームを追加します。
「次のステップ：タグの追加」をクリック
![スクリーンショット 2020-11-19 20.17.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/830135ee-0bee-7159-6eaf-d58067c148ec.png)
「次のステップ：セキュリティグループの設定」をクリック
![スクリーンショット 2020-11-19 20.17.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/917ef6d7-2da0-a2a4-e8e5-2a55b2020994.png)
「ルールの追加」をクリックして、AWS Storage Gateway用のルールを追加します。
![スクリーンショット 2020-11-19 20.18.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/e180d2f7-175a-cb32-62a6-f05e0491ce1f.png)
タイプ：HTTP ソース：マイIP 備考；For Activation（Storage Gatewayのアクティベーション用）
タイプ：NFS ソース：10.0.1.0/24（SG-SubnetのCIDR） 備考：For NFS（NFS共有用）
「確認と作成」をクリック
![スクリーンショット 2020-11-19 20.20.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/8aa8df55-a785-4174-f23e-162a64997bc4.png)
設定内容を確認し、「起動」をクリック
![スクリーンショット 2020-11-19 20.21.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/b04e62bb-5c6c-f901-dee7-3413e2813adc.png)
キーペアを選択し、「インスタンスの作成」をクリック
![スクリーンショット 2020-11-19 20.21.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/162a79ae-3efd-d492-0a2b-83b1dea483fb.png)
インスタンスの作成が開始されます。
![スクリーンショット 2020-11-19 20.21.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/8c8e76ae-dc70-b2d3-5e57-fe8d66a43714.png)
インスタンスの概要の画面でパブリックIPv4アドレスを確認します。
![スクリーンショット 2020-11-19 20.22.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/cffeb9a5-32ec-af07-d2a5-6713ef4b96a4.png)
Storage Gatewayのウィザードに戻り、「次へ」をクリック
![スクリーンショット 2020-11-19 20.23.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/f5a5042c-e102-6aaa-6de9-a39aba7c3250.png)
エンドポイントタイプ：「パブリック」を選択
「次へ」をクリック
![スクリーンショット 2020-11-19 20.23.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/16883ec9-126e-6a6a-3e06-f173e7cef65a.png)
IPアドレス：先ほど確認したインスタンスのIPv4アドレス
「ゲートウェイに接続」をクリック
![スクリーンショット 2020-11-19 20.23.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/ebd7a022-8b0d-842c-1356-74aa20cb25c7.png)
ゲートウェイのタイムゾーン ：任意のタイムゾーン を選択
ゲートウェイ名：Storage Gateway
「ゲートウェイのアクティブ化」をクリック
![スクリーンショット 2020-11-19 20.24.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/9cd5d3a3-e5ef-ccd8-313d-6e98ba5488eb.png)
「ローカルディスクの準備中」と表示されるので、しばらく待ちます。
![スクリーンショット 2020-11-19 20.24.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/3eef20cc-c170-4f1e-5e9b-a3765adc1a4d.png)
ディスク情報が正しく表示されたら、「ログ記録を設定」をクリック
![スクリーンショット 2020-11-19 20.25.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/07b7e703-f2fe-6280-8650-18626349948c.png)
ゲートウェイのヘルスロググループ：「新しいロググループを作成」を選択
「保存して続行」をクリック
![スクリーンショット 2020-11-19 20.26.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/60aea5bb-5783-8933-8177-b046013457f6.png)
AWS Storage Gatewayが作成されました。
「ファイル共有の作成」をクリックします。
![スクリーンショット 2020-11-19 20.26.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/d9c0e736-fcb9-4302-21ae-0613bb924c6f.png)
　amazon S3バケット名：source-aws-bucket（データの移行元となるバケット名）
　ファイル共有名：source-aws-bucket（作成するファイル共有の名前）
　オブジェクトへのアクセス：ネットワークファイルシステム（NFS）を選択
　ゲートウェイ：先ほど作成した「Service Gateway」を選択
　その他はデフォルトのまま
　「次へ」をクリック
![スクリーンショット 2020-11-19 20.32.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/8ce316a7-a1b8-67ef-e854-92ff3a3f6259.png)

![スクリーンショット 2020-11-19 20.32.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/0ef3d96d-6c0d-b809-a754-7a2a4fa6456a.png)
新しいオブジェクトのストレージクラス：「S3 スタンダード」を選択
その他はデフォルトのまま
「次へ」をクリック

![スクリーンショット 2020-11-19 20.33.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/c442bc0c-a681-91e1-8522-741190880fa0.png)
入力内容を確認して、「ファイル共有の作成」をクリック
![スクリーンショット 2020-11-19 20.34.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/ee60efe7-6bd2-32d1-efd8-8b7741fce339.png)
![スクリーンショット 2020-11-19 20.34.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/53207ed5-45f5-e987-82ce-e1a22debadb5.png)
ファイル共有source-aws-bucketが作成されました。
![スクリーンショット 2020-11-19 20.34.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/aa6b0e1f-5ad5-ec3b-a1eb-ca70dbd0c11d.png)

# 6. AWS Storage Gatewayから共有されているS3バケットをNFSでマウント
OCI Storage GatewayをインストールしたインスタンスにSSHクライアントからec2-userでログインします。

今回はOCI Storage Gatewayをインストールしたインスタンスに、AWS Storage Gateway、OCI Storage Gateway両方のNFS共有をマウントします。

AWS Storage Gatewayから共有されているNFSをマウントするためのマウントポイント/mnt_aを作成します。

```
[ec2-user@ip-10-0-1-92 mnt_o]$ sudo mkdir /mnt_a
```
/mnt_aにAWS Storage Gatewayから共有されているsource-aws-bucketをNFSでマウントします。

```
[ec2-user@ip-10-0-1-92 mnt_o]$ sudo mount -t nfs -o nolock,hard 10.0.1.188:/source-aws-bucket /mnt_a
```
/mnt_aに移動し、ファイルを作成します。

```
[ec2-user@ip-10-0-1-92 mnt_o]$ cd /mnt_a
[ec2-user@ip-10-0-1-92 mnt_a]$ touch aaa.txt
[ec2-user@ip-10-0-1-92 mnt_a]$ ls
aaa.txt
```
AWSのコンソールからバケットsource-aws-bucketの内容を確認します。
![スクリーンショット 2020-11-19 21.44.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/0f499cc5-ae8d-f1db-c8be-64dcd01df850.png)
/mnt_aに作成したファイルが、S3バケット「source-aws-bucket」内に作成されていることが確認できました。

# 7. S3バケットとObject Storageバケット間のファイルコピー
ファイルコピーテスト用のファイルをS3バケットにアップロードします。

「ファイルを追加」をクリックし、適当なファイルを選択してアップロードします。
![スクリーンショット 2020-11-19 21.46.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/a25a1173-80fe-87f7-3144-80da56ef2fc6.png)
今回は30個のPDFファイルをアップロードしました。
![スクリーンショット 2020-11-19 21.48.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/4862d914-3c63-1f4a-be37-cc0174541972.png)
ファイルをアップロードしたら、キャッシュを更新しておきます。
AWSコンソールの「Storage Gateway」→「ファイル共有」を開きます。
![スクリーンショット 2020-11-19 21.54.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/10885db0-e36b-f569-1dac-ed5b347b7264.png)
「アクション」から「キャッシュの更新」をクリックし、キャッシュを更新します。
![スクリーンショット 2020-11-19 21.54.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/ab924a48-ed04-c063-c26e-e128e1045ddb.png)
/mnt_aの内容を確認します。

```
[ec2-user@ip-10-0-1-92 mnt_a]$ ls -l
total 63990
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 10.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 11.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 12.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 13.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 14.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 15.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 16.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 17.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 18.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 19.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 1.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 20.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 21.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 22.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 23.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 24.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 25.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 26.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 27.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 28.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 29.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 2.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 30.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 3.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 4.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 5.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 6.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 7.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 8.pdf
-rw-rw-rw-. 1 nfsnobody nfsnobody 2183884 Nov 19 12:54 50544 9.pdf
[ec2-user@ip-10-0-1-92 mnt_a]$ 
```
S3バケット「source-aws-bucket」の内容が表示されました。

cpコマンドで/mnt_aの内容を/mnt_oにコピーしてみます。

```
[ec2-user@ip-10-0-1-92 mnt_a]$ cp /mnt_a/* /mnt_o
```
/mnt_oの内容を確認します。

```
[ec2-user@ip-10-0-1-92 mnt_a]$ cd /mnt_o
[ec2-user@ip-10-0-1-92 mnt_o]$ ls -l
total 0
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 10.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 11.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 12.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 13.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 14.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 15.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 16.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 17.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 18.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 19.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 1.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 20.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 21.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 22.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 23.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 24.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 25.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 26.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 27.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 28.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 29.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 2.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 30.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 3.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 4.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 5.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 6.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 7.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 8.pdf
-rw-rw-r--. 1 ec2-user ec2-user 2183884 Nov 19 12:56 50544 9.pdf
[ec2-user@ip-10-0-1-92 mnt_o]$ 
```
/mnt_aの内容が/mnt_oにコピーされました。

OCIコンソールからObject Storageバケット「dest-oci-bucket」の内容を確認します。
![スクリーンショット 2020-11-19 21.57.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/de825177-6849-c207-f4b2-59d341abdf00.png)
![スクリーンショット 2020-11-19 21.57.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/7544c4be-64b5-e7bd-1243-7af3cf55dcb9.png)
/mnt_oの内容がdest-oci-bucketに反映されていることが確認できました。

以上で、無事にS3バケット「source-aws-bucket」からObject Storageバケット「dest-oci-bucket」に直接データをコピーしてデータ移行できました。めでたし、めでたし。

# まとめ
OCI Storage Gateway、AWS Storage Gatewayを利用することで、中間ストレージにファイルを一度ダウンロードして再度アップロードすることなく、AWS S3からOCI Object Storageに直接データを移行することができました。

先に紹介したgoofysを利用する方法や、こちらの方法であれば、中間ストレージのコストやデータをダウンロード/アップロードする手間が不要になりますので、AWS S3からOCI Object Storageへのデータ移行もだいぶ楽になりますね。

# 参考情報
・[Oracle Cloud Infrastructure ドキュメント：ストレージ・ゲートウェイ](https://docs.cloud.oracle.com/ja-jp/iaas/Content/StorageGateway/Concepts/storagegatewayoverview.htm)
・[AWS Storage Gatewayユーザーガイド：ファイルゲートウェイの管理](https://docs.aws.amazon.com/ja_jp/storagegateway/latest/userguide/managing-gateway-file.html)