通过 GSUTIL 将文件从 Windows 10 文件夹上传到 Gcloud 存储桶时出现问题
Posted
技术标签:
【中文标题】通过 GSUTIL 将文件从 Windows 10 文件夹上传到 Gcloud 存储桶时出现问题【英文标题】:Issue when uploading file from windows 10 folder to Gcloud bucket via GSUTIL 【发布时间】:2019-05-22 22:48:37 【问题描述】:嗨, 我正在使用通过 GCLOUD SDK 和 gsutil 安装的 GSUTIL 作为其正常工作的命令,我能够创建存储桶并将文件上传到该存储桶。当我尝试通过 Windows 批处理文件(.bat)使用相同的文件时,它失败并出现以下错误,
Caught non-retryable exception while listing gs://sushanth-07081985/: ServiceException: 401 Anonymous caller does not have storage.objects.list access to sushanth-07081985.
CommandException: Caught non-retryable exception - aborting rsync
下面是我的批处理文件
set gsutil="C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\bundledpython\python.exe" "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\gsutil\gsutil"
echo Backing up Test Folder
%gsutil% -m rsync -n -r -d -x ".*node_modules.*^|.*\.git.*" ./TestFolder gs://sushanth-07081985
在阅读了各种 S.O 帖子后尝试了以下事情
执行命令 gcloud config list --all 并看到 pass_credentials_to_gsutil 未设置,因此将其设置为 false
gcloud 配置设置 pass_credentials_to_gsutil false
创建了一个服务帐户并尝试了
gcloud auth activate-service-account --key-file codes-20180829-2c7c4b3e24df.json
gsutil config -e(备份 .boto 文件,因为它说要更改它)。这里给出了服务帐号 JSON 文件的完整路径。
在这之后我根本无法运行,所以试图撤消我所做的一切,它像以前一样工作
-
替换了我之前备份的 .boto 文件。
gcloud init(重新初始化配置)
gcloud 配置设置 pass_credentials_to_gsutil true
我使用的是 Windows 10,基本上我想设置一个 gsutil 以使用服务帐户通过批处理作业(.bat)将文件上传到云存储。了解任何一步一步的方法会很好。
谢谢
更新日期:2018 年 12 月 25 日 下面的方法对吗?
-
使用默认值在 IAM 中创建了一个S服务A帐户并生成了一个 p12 文件
运行 gsutil config -e 命令,它要求提供 p12 文件的完整路径[D:\BigData\16.GCP\GCS\Private\codes-20180829-d05f0ecb939d.p12] & SA 电子邮件 ID(从 IAM 获取本身)
它生成了一个 .boto 文件,其中填充了 gs_service_key_file[p12 文件路径]、gs_service_client_id[SA 电子邮件 id]、gs_service_key_file_password[notasecret] 的值
进入每个存储桶并手动添加 SA,将角色设置为 StorageAdmin
有环境。变量 BOTO_PATH 设置为 C:\Users\Sushanth.boto
现在可以了,想知道上述方法是否正确?
【问题讨论】:
【参考方案1】:您应该为 gsutil 调用 gcloud 包装脚本:
C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\bin\gsutil
此脚本会将您配置的 gcloud 身份验证选项传递到 gsutil 的主入口点(您之前调用的入口点,位于 ...\google-cloud-sdk\platform\gsutil\gsutil
)。
如果您将这两个混淆了,您可以通过对两个路径运行 gsutil 的 version -l
命令来判断哪一个是 Cloud SDK 入口点。此命令将打印有关您的环境的信息,包括您是否通过 Cloud SDK 调用 gsutil 以及正在加载哪些 .boto 配置:
> C:\path\to\google-cloud-sdk\platform\gsutil\gsutil version -l
[...]
using cloud sdk: False
pass cloud sdk credentials to gsutil: False
config path(s): C:\Users\bob\.boto
[...]
【讨论】:
谢谢。关于 gsutil 版本 -l 很有趣。我尝试生成 .boto,但它一直指向我的电子邮件帐户凭据 C:\Users\Sushanth\AppData\Roaming\gcloud\legacy_credentials\gcloud auth activate-service-account
并为其提供您的 SA 密钥文件的路径。在幕后,gcloud 创建了一个引用该密钥文件路径的 boto 文件,当您调用包装脚本时,它将使用您当前设置/激活的 gcloud 凭据覆盖您的 BOTO_CONFIG
环境变量。但是,如果您想使用“独立”gsutil(调用 platform/gsutil
目录中的可执行文件),它将使用您在 BOTO_CONFIG
环境变量中指定的任何 boto 文件。以上是关于通过 GSUTIL 将文件从 Windows 10 文件夹上传到 Gcloud 存储桶时出现问题的主要内容,如果未能解决你的问题,请参考以下文章
gsutil - 在 Windows 上使用正则表达式同步两个存储桶的内容时排除文件