Google compute engine cloud/gsutil将文件从实例复制到bucket

Google compute engine cloud/gsutil将文件从实例复制到bucket,google-compute-engine,gcloud,scp,gsutil,Google Compute Engine,Gcloud,Scp,Gsutil,我在实例内部尝试了gsutil rsync/cp,它可以工作。 我正在寻找使用gcloud/gsutil cli从本地计算机运行同步的方法。 有没有像gcloudcomputescp这样的命令可以从实例同步到bucket? [编辑] 我查看了官方文档,但找不到这样的示例。如果我了解到您希望在云外部的机器上运行命令,在云虚拟机和存储桶之间重新同步文件,那么不,没有这样的命令,这是设计上不可能的。想想看:虚拟机可以运行Linux、Windows,甚至可以运行您自己开发的操作系统。(还记得莱纳斯·托瓦

我在实例内部尝试了gsutil rsync/cp,它可以工作。 我正在寻找使用gcloud/gsutil cli从本地计算机运行同步的方法。 有没有像gcloudcomputescp这样的命令可以从实例同步到bucket? [编辑]
我查看了官方文档,但找不到这样的示例。

如果我了解到您希望在云外部的机器上运行命令,在云虚拟机和存储桶之间重新同步文件,那么不,没有这样的命令,这是设计上不可能的。想想看:虚拟机可以运行Linux、Windows,甚至可以运行您自己开发的操作系统。(还记得莱纳斯·托瓦尔兹(Linus Torvalds)吗?他曾经这样做只是为了好玩?这。)这是GCE本身无法支持的。这将是不可能的,即使从另一个虚拟机,而不仅仅是从您的本地计算机,出于同样的原因

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

ssh instance-1 'gsutil rsync ...'
只是不要错过或弄乱引用。如果您正在使用
gcloud compute ssh
登录实例,而不仅仅是
ssh
,那么这将被替换(请注意
--
告诉
gcloud
其余参数应传递给
ssh

gsutil
在两个bucket之间高效地复制和rsyncs数据,无论您在何处调用该命令;数据永远不会离开云端。这是可能的,因为bucket是谷歌自己的发明,它们完全控制自己的API。但是进入运行随机操作系统的工作虚拟机并读取/写入文件是不可能的


这种技术甚至适用于整个内联shell脚本。例如,下面是我用来设置新实例的脚本的一部分(我生成了很多临时VM,所以我想要一个解决方案,例如缺少bash完成包等):

请注意一个单独的引号,它结束了惟一的
ssh
参数



切线:阅读IAP隧道,它允许您使用ssh连接到实例中,而无需将侦听ssh端口暴露给整个internet(hic sunt dracones:)。他们是自由的,非常安全。在一个简单的例子中,只需将
--tunnel through iap
开关添加到
gcloud compute ssh
命令即可。指针位于此开关的文档中。

请不要标记[Edit]等。只需格式化问题,以便对有类似问题的人有所帮助。他们需要知道你后来添加了一些你最初忘记的东西吗?不,他们不会在乎的。此外,“编辑”链接显示了完整的编辑历史记录。是的,我想我是在寻找一种不使用实例CPU和ram进行同步的方法,这就是我的问题所在。@SnakeFoot,rsync的CPU和ram使用量非常小。也许你应该更好地描述你的问题。一种方法是安排磁盘快照,每隔N分钟或N小时或多长时间一次,使用磁盘的快照拷贝剥离一个临时VM。但是,如果您的限制非常严格,rsync是一个问题,那么增加CPU和RAM可能会更好。当然,实时磁盘的快照可能并不完全一致。
gcloud compute ssh instance-1 -- 'gsutil rsync ...'
ssh "$target" '
  set -eu
  cd ~
  if [[ -f .kkm-config-done ]]; then
    echo "### STOP: .kkm-config-done exists, not overwriting files"
    exit 1
 . . . .
 '