search
LoginSignup
5

More than 3 years have passed since last update.

posted at

updated at

Organization

Google Cloud StorageとAWS S3との間でファイルをコピーするには

なんとgsutilコマンドはS3を直接サポートしている!

gsutil cpコマンド

gsutil cpでGoogle Cloud StorageからS3へのコピーができます。

$ gsutil cp gs://xxxx/foo.tar.gz s3://yyyy/foo.tar.gz
Copying gs://xxxx/foo.tar.gz [Content-Type=application/x-tar]...
- [1 files][  4.3 MiB/  4.3 MiB]
Operation completed over 1 objects/4.3 MiB.

ただし、大きなファイルは対応していないようです。

$ gsutil cp gs://xxxx/foo.tar.gz s3://yyyy/foo.tar.gz
CommandException: "gs://xxxx/foo.tar.gz" exceeds the maximum gsutil-supported size for an S3 upload. S3 objects greater than 5 GiB in size require multipart uploads, which gsutil does not support.

5GiBを超えるファイルはコピーできないとのこと。

逆向きのS3からGoogle Cloud Storageへのコピーもできます。

$ gsutil cp gs://xxxx/foo.tar.gz s3://yyyy/foo.tar.gz

念のため、さすがにawsコマンドはGoogleへの対応はしてないよなって思いながら試してみたら、

なんとawsコマンドもGoogle Cloud Storageを直接サポートしている!

aws s3 cpコマンド

aws s3 cpでコピーできます。

$ aws s3 cp s3://yyyy/foo.tar.gz gs://xxxx/foo.tar.gz
download: s3://yyyy/foo.tar.gz to gs:/xxxx/foo.tar.gz

/が1つ足りない気がするが。。。

逆向きもコピーできます。

$ aws s3 cp gs://xxxx/foo.tar.gz s3://yyyy/foo.tar.gz
upload: gs:/xxxx/foo.tar.gz to s3://yyyy/foo.tar.gz

やっぱり/が1つ足りない。。。

aws cliでの巨大ファイルのgsからs3へのコピーはなぜか以下のようなエラーになりました。なんでだろう。

$ aws s3 cp gs://xxxx/foo.tar.gz s3://yyyy/foo.tar.gz
The user-provided path gs://xxxx/foo.tar.gz does not exist

gsutil lsコマンド

なんとgsutil lsもS3を直接サポートしている!

$ gsutil ls -l s3://yyyy/
...

しかしaws s3 lsはGoogle Cloud Storageには対応していませんでした。

$ aws s3 ls gs://xxxx/
Parameter validation failed:
Invalid bucket name "gs:": Bucket name must match the regex "^[a-zA-Z0-9.\-_]{1,255}$"

大きなファイルのコピー

パイプで2つのコマンドをつなげばよいです。以下のようにします。gsutil cpaws s3 cpともにパラメータに-を渡すと標準入力または標準出力になります。

$ gsutil cp gs://xxxx/foo.tar.gz - | aws s3 cp - s3://yyyy/foo.tar.gz

これだと進捗表示がなくて不安になるのですが、その場合はpvコマンドを挟みます。

$ gsutil cp gs://xxxx/foo.tar.gz - | pv | aws s3 cp - s3://yyyy/foo.tar.gz
457MiB 0:00:33 [13.6MiB/s] [        <=>                                         ]

参考
pvコマンド(Linuxのパイプの流れの進捗を見守るには)

まとめ

整理すると、以下のとおり。

cp

gs -> s3 s3 -> gs
gsutil cp
aws s3 cp

大きなファイルの直接のcp (パイプでつながない方法)

gs -> s3 s3 -> gs
gsutil cp 不可
aws s3 cp 不可

ls

gs s3
gsutil ls
aws s3 ls 不可

バージョン情報

$ aws --version
aws-cli/1.16.222 Python/3.7.4 Linux/4.15.0-65-generic botocore/1.12.212
$ gsutil --version
gsutil version: 4.38

参考

gsutil、aws s3での基本的なファイル操作(Google Cloud Storage、S3) - Qiita

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
5