LoginSignup
3
5

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-10-19

なんと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

3
5
0

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
  3. You can use dark theme
What you can do with signing up
3
5