Загрузка больших файлов в Google Storage GCE из модуля Kubernetes - PullRequest
0 голосов
/ 14 октября 2018

Мы получаем эту ошибку при загрузке большого файла (более 10 МБ, но менее 100 МБ):

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

Или эта ошибка, когда файл превышает 5 МБ

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 голосов
/ 23 мая 2019

Я обнаружил, что мои пулы узлов были заданы с

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

, и изменение его на

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

исправило ошибку.Как описано в этой проблеме , проблема заключается в неинформативном сообщении об ошибке.

0 голосов
/ 15 октября 2018

Проблема действительно была в полномочиях.Почему-то сообщение об ошибке было очень ошибочным.Когда мы загрузили учетные данные явно, проблема ушла.

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