cloud / gsutil将文件从实例复制到存储桶

问题描述

我从实例内部尝试了gsutil rsync / cp,并且可以正常工作。 我正在寻找一种使用gcloud / gsutil cli从本地计算机运行同步的方法。 是否存在像gcloudcompute scp这样的命令,它可以从实例同步到存储桶? [编辑] 我查看了官方文档,但无法找到这样的示例。

解决方法

如果我知道您想在云外部的计算机上运行命令 ,该命令将在云VM 和存储桶之间同步文件,那么不会,没有这样的命令,这在设计上是不可能的。想一想:VM可以运行Linux,Windows甚至是您自己开发的操作系统。 (还记得那家伙Linus Torvalds曾经只是为了娱乐吗?这样做。)这是GCE本身无法支持的。出于相同的原因,即使是从另一个VM(不仅是本地计算机),也无法实现这一点。

但是,只要您可以从本地计算机SSH到实例,相同的gsutil rsync ...就可以通过SSH连接正常工作>

ssh instance-1 'gsutil rsync ...'

只是不要错过或弄乱引号。如果您使用gcloud compute ssh而不是ssh登录到实例,则将改为(请注意--告诉gcloud应该传递其余参数到ssh)。

gcloud compute ssh instance-1 -- 'gsutil rsync ...'

gsutil可以有效地在两个存储桶之间复制和同步数据,无论您在何处调用该命令;数据永远不会离开云。这是可能的,因为存储桶是Google自己的设备,并且它们可以完全控制其API。但是进入运行随机操作系统并读取/写入文件的工作VM根本不可能。


该技术甚至适用于整个嵌入式Shell脚本。例如,这是我用来设置新实例的脚本的一部分(我产生了许多临时VM,因此我想要一个解决方案,例如缺少bash完成包等):

ssh "$target" '
  set -eu
  cd ~
  if [[ -f .kkm-config-done ]]; then
    echo "### STOP: .kkm-config-done exists,not overwriting files"
    exit 1
 . . . .
 '

请注意单引号,以唯一的ssh参数结尾。


Tangential:在IAP隧道上阅读,它使您可以SSH进入实例,而不会将侦听SSH端口暴露给整个Internet(请参见dracones :))。它们是免费的,而且非常安全。在平凡的情况下,就像将--tunnel-through-iap开关添加到gcloud compute ssh命令一样简单。指针在此开关的文档中。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...