1

我可以使用 Terraform 启动 VM,如果我从 GCP Web UI 向该 VM 发送 shell,我可以通过以下方式手动进行身份验证:

gcloud auth application-default login
gcloud auth login

然后我可以手动将 GCP 存储桶挂载到虚拟机:

gcsfuse bucket_name ~/mount_point/

但我不能从 Terraform 启动脚本自动执行此操作。当然,身份验证命令本质上是非常手动的,包括跳转到浏览器以获取密钥等。而且 gcsfuse 命令在没有身份验证的情况下显然会失败,因此将其放入启动脚本中是行不通的;正如预期的那样,它会产生权限错误。

我已经在 GCP 中拥有各种服务和应用程序帐户,并且我已经下载了相关的 json 密钥文件,但我不明白如何从 Terraform 自动验证新 VM 以挂载存储桶。我怀疑这与 google_service_account 和 google_service_account_key 有关,但我还没有弄清楚该怎么做。我只是不知道如何将 json 密钥文件硬塞到 Terraform 配置中,以便 VM 上的 root 用户运行启动脚本可以挂载存储桶。

其他人建议这也可能与 fstab 有关。我已经在启动脚本中添加了以下内容:

echo 'bucket_name /mount/bucket_name gcsfuse rw,noauto,user' >> /fstab

而且我可以从 shell 中看到 echo 命令有效(fstab 也相应地改变了),但我仍然无法挂载存储桶。我还尝试使用 mount 而不是 gcsfuse 进行安装:

mount -allow_other -t gcsfuse -o rw,user bucket_name /mnt/bucket_name/

但这也行不通。mount 不会产生错误,但挂载的目录仍然是空的。呸!这里的解决方案是什么?

谢谢。

4

0 回答 0