[OCI]goofysを利用してAWS S3からOCIのオブジェクト・ストレージに直接ファイルをコピーしてデータ移行してみた


はじめに

オブジェクト・ストレージをファイルシステムとしてマウントできるgoofysを利用して、AWSのS3バケットからOCIオブジェクト・ストレージに直接データを移行してみました。

この方法であれば、S3バケット内のファイルを一度どこかにダウンロードしてからアップロードする必要がないため、中間ストレージが不要になります。

安定した環境が必要な場合は、S3側にAWS Storage Gateway、OCIオブジェクト・ストレージ側にOracle Cloud Infrastructure Storage Gatewayを使用することをお勧めします。

事前準備

AWS側(データ移行元)
・S3バケット(ここではfrom-aws-bucketという名前です)
・S3バケットにアクセスできるユーザのアクセスキーとシークレットキー
OCI(データ移行先)
・オブジェクト・ストレージ・バケット(ここではociという名前です)
・オブジェクト・ストレージ・バケットにアクセスできるユーザの顧客秘密キー(アクセス・キーと秘密キー)
・インターネットアクセスが可能なコンピュート・インスタンス(今回はOSとしてOracle Linux 7.9を使用)

1. goofysのインストールと設定

SSHクライアントからコンピュート・インスタンスにopcユーザでログインします。

goofysはGo、fuseを使用するので、事前にインストールします。

sudo yum install -y golang fuse

goofysのバイナリをダウンロードします。

wget https://github.com/kahing/goofys/releases/latest/download/goofys

goofysをパスが通っているディレクトリに移動します。

sudo cp goofys /usr/local/bin

オーナーをrootに変更し、パーミッションを変更します。

sudo chown root:root /usr/local/bin/goofys
sudo chmod 775 /usr/local/bin/goofys

goofysが使用する認証情報の設定ファイルを作成します。

sudo mkdir -p /root/.aws
sudo vi /root/.aws/credentials
/root/.aws/credentials
[oci]
aws_access_key_id = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA <- OCIユーザのアクセスキー
aws_secret_access_key = BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB <- OCIユーザの秘密キー

[aws]
aws_access_key_id = CCCCCCCCCCCCCCCCCCCC <- AWSユーザのアクセスキー
aws_secret_access_key = DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD <= AWSユーザのシークレットキー

以上でgoofysを使用する準備が整いました。

2. goofysによるS3バケットとオブジェクト・ストレージ・バケットのマウント

マウントポイントを作成します。
/mnt_o:OCI オブジェクト・ストレージ・バケット(oci)用のマウントポイント
/mnt_a:AWS S3バケット(from_aws_bucket)用のマウントポイント

sudo mkdir -p /mnt_o
sudo chmod -R 777 /mnt_o
sudo mkdir -p /mnt_a
sudo chmod -R 777 /mnt_a

/etc/fstabを編集します。

sudo vi /etc/fstab

以下の2行をファイルの末尾に追加します。

goofys#oci /mnt_o fuse _netdev,allow_other,--dir-mode=0755,--file-mode=0666,--uid=1000,--gid=1000,--endpoint=https://<ネームスペース>.compat.objectstorage.<OCIリージョン識別子>.oraclecloud.com,--region=<OCIリージョン識別子>,--profile=oci 0 0
goofys#from-aws-bucket /mnt_a fuse _netdev,allow_other,--region=<AWSリージョン識別子>,--profile=aws 0 0

mount -aでfstabの内容を反映し、OCIのオブジェクト・ストレージ・バケット oci を**/mnt_oに、AWSのS3バケット from_aws_bucket/mnt_a**にマウントします。

sudo mount -a

3. S3バケットからオブジェクト・ストレージ・バケットへのデータコピー

AWSのコンソールから、S3バケット from_aws_bucket の内容を確認します。

テスト用のPDFファイルが30個入っています。

S3バケット from_aws_bucket をマウントした /mnt_a の内容を確認します。

[opc@iptest /]$ cd /mnt_a
[opc@iptest mnt_a]$ ls -l
total 63990
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 10.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 11.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 12.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 13.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 14.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 15.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 16.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 17.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 18.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 19.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 1.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 20.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 21.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 22.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 23.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 24.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 25.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 26.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 27.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 28.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 29.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 2.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 30.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 3.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 4.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 5.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 6.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 7.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 8.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:36 50544 9.pdf

S3バケット from_aws_bucket の内容が表示されることを確認できました。

では、cpコマンドで /mnt_a 内のファイルを /mnt_o にコピーしてみます。

cp /mnt_a/* /mnt_o

コピーが完了したら、オブジェクト・ストレージ・バケット oci をマウントした /mnt_o の内容を確認します。

[opc@iptest mnt_a]$ cd /mnt_o
[opc@iptest mnt_o]$ ls -l
total 63990
-rw-r--r--. 1 root root 2183884 Nov 17 14:39 50544 10.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:39 50544 11.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:39 50544 12.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:39 50544 13.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:39 50544 14.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:39 50544 15.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:39 50544 16.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:39 50544 17.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:39 50544 18.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:39 50544 19.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:39 50544 1.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:39 50544 20.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:39 50544 21.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:39 50544 22.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:40 50544 23.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:40 50544 24.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:40 50544 25.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:40 50544 26.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:40 50544 27.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:40 50544 28.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:40 50544 29.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:40 50544 2.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:40 50544 30.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:40 50544 3.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:40 50544 4.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:40 50544 5.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:40 50544 6.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:40 50544 7.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:40 50544 8.pdf
-rw-r--r--. 1 root root 2183884 Nov 17 14:40 50544 9.pdf

/mnt_a(=S3バケット from_aws_bucket )の内容が /mnt_o にコピーされました。

OCIのコンソールから、オブジェクト・ストレージ・バケット oci の内容を確認します。

S3バケット from_aws_bucket の内容がオブジェクト・ストレージ・バケット ociにコピーされていることが確認できました。

まとめ

goofysを使用することで、AWSのS3バケットの内容を一度ダウンロードすることなく、OCIのオブジェクト・ストレージ・バケットに直接コピーしてデータを移行することができました。めでたし、めでたし。

ファイル数やファイルサイズによるパフォーマンスの変化についても、後日確認してみたいと思います。

参考情報

goofys
Amazon S3互換API(OCIオブジェクト・ストレージ)