从Kubernetes窗格将大文件上传到Google Storage GCE

时间:2018-10-14 11:22:43

标签: python python-3.x kubernetes google-cloud-storage google-compute-engine

我们在上传大文件(大于10Mb但小于100Mb)时收到此错误:

403 POST https://www.googleapis.com/upload/storage/v1/b/dm-scrapes/o?uploadType=resumable: ('Response headers must contain header', 'location')

或者文件大于5Mb时出现此错误

403 POST https://www.googleapis.com/upload/storage/v1/b/dm-scrapes/o?uploadType=multipart: ('Request failed with status code', 403, 'Expected one of', <HTTPStatus.OK: 200>)

该API似乎正在查看文件大小,并尝试通过多部分或可恢复的方法将其上传。我无法想象这是我应该关注的API调用者。问题是否与权限相关?存储桶是否需要特殊许可,它可以接受分段上传或可恢复上传。

from google.cloud import storage

try:
    client = storage.Client()
    bucket = client.get_bucket('my-bucket')
    blob = bucket.blob('blob-name')
    blob.upload_from_filename(zip_path, content_type='application/gzip')

except Exception as e:
    print(f'Error in uploading {zip_path}')
    print(e)

我们在Kubernetes窗格中运行此命令,以便由storage.Client()自动调用权限。

我们已经尝试过这些:

预先感谢

2 个答案:

答案 0 :(得分:3)

问题确实是凭证。不知何故,错误消息非常容易导致误导。当我们显式加载凭据时,问题就消失了。

 # Explicitly use service account credentials by specifying the private key file.
 storage_client = storage.Client.from_service_account_json(
        'service_account.json')

答案 1 :(得分:0)

我发现我的节点池已使用

指定
    oauthScopes:
    - https://www.googleapis.com/auth/devstorage.read_only

并将其更改为

    oauthScopes:
    - https://www.googleapis.com/auth/devstorage.full_control

修复了该错误。如this issue中所述,问题是无关紧要的错误消息。