なんと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 cp
、aws 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