从云函数访问谷歌云存储桶抛出 500 错误

甘尼

我正在尝试从云函数 (python) 实例访问谷歌云存储桶,但它抛出了 mystic 500 错误。

  • 我也赋予了服务帐户编辑器角色。它没有做任何改变。
  • 我还检查了是否有任何配额超出限制。限制甚至没有接近。

拜托,谁能帮我找出这个错误的原因?

这是代码


    from google.cloud import storage
    import os
    import base64

    storage_client = storage.Client()


    def init_analysis(event, context):
        print("event", event)
        pubsub_message = base64.b64decode(event['data']).decode('utf-8')

        print(pubsub_message)
        bucket_name = 'my-bucket'
        bucket = storage_client.get_bucket(bucket_name)
        blobs = bucket.list_blobs()
        for blob in blobs:
            print(blob.name)

错误:

    Traceback (most recent call last): File "/env/local/lib/python3.7/site-packages/google/auth/compute_engine/credentials.py", line 99, in refresh service_account=self._service_account_email) File "/env/local/lib/python3.7/site-packages/google/auth/compute_engine/_metadata.py", line 208, in get_service_account_token 'instance/service-accounts/{0}/token'.format(service_account)) File "/env/local/lib/python3.7/site-packages/google/auth/compute_engine/_metadata.py", line 140, in get url, response.status, response.data), response) google.auth.exceptions.TransportError: ("Failed to retrieve http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/[email protected]/token from the Google Compute Enginemetadata service. Status: 500 Response:\nb'Could not fetch URI /computeMetadata/v1/instance/service-accounts/[email protected]/token\\n'", <google.auth.transport.requests._Response object at 0x2b0ef9edf438>) The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py", line 383, in run_background_function _function_handler.invoke_user_function(event_object) File "/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py", line 217, in invoke_user_function return call_user_function(request_or_event) File "/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py", line 214, in call_user_function event_context.Context(**request_or_event.context)) File "/user_code/main.py", line 21, in init_analysis bucket = storage_client.get_bucket(bucket_name) File "/env/local/lib/python3.7/site-packages/google/cloud/storage/client.py", line 227, in get_bucket bucket.reload(client=self) File "/env/local/lib/python3.7/site-packages/google/cloud/storage/_helpers.py", line 130, in reload _target_object=self, File "/env/local/lib/python3.7/site-packages/google/cloud/_http.py", line 315, in api_request target_object=_target_object, File "/env/local/lib/python3.7/site-packages/google/cloud/_http.py", line 192, in _make_request return self._do_request(method, url, headers, data, target_object) File "/env/local/lib/python3.7/site-packages/google/cloud/_http.py", line 221, in _do_request return self.http.request(url=url, method=method, headers=headers, data=data) File "/env/local/lib/python3.7/site-packages/google/auth/transport/requests.py", line 205, in request self._auth_request, method, url, request_headers) File "/env/local/lib/python3.7/site-packages/google/auth/credentials.py", line 122, in before_request self.refresh(request) File "/env/local/lib/python3.7/site-packages/google/auth/compute_engine/credentials.py", line 102, in refresh six.raise_from(new_exc, caught_exc) File "<string>", line 3, in raise_from google.auth.exceptions.RefreshError: ("Failed to retrieve http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/[email protected]/token from the Google Compute Enginemetadata service. Status: 500 Response:\nb'Could not fetch URI /computeMetadata/v1/instance/service-accounts/[email protected]/token\\n'", <google.auth.transport.requests._Response object at 0x2b0ef9edf438>)
google.auth.exceptions.TransportError: ("Failed to retrieve http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/[email protected]/token from the Google Compute Enginemetadata service. Status: 500 Response:\nb'Could not fetch URI /computeMetadata/v1/instance/service-accounts/[email protected]/token\\n'"
索蒂斯

您收到的错误是因为您的 Cloud Functions 服务帐户没有该cloudfunctions.serviceAgent角色。正如您在文档中看到

如果您更改 Cloud Functions 服务帐户的权限,则从您的函数内部以运行时服务帐户身份进行身份验证可能会失败。

但是,我发现有时您无法添加此角色,因为它没有显示为选项。我已将此问题报告给 Google Cloud Functions 工程团队,他们正在努力解决。

不过,您可以使用以下 gcloud命令再次添加角色

gcloud projects add-iam-policy-binding <project_name> --role=roles/cloudfunctions.serviceAgent --member=serviceAccount:service-<project_number>@gcf-admin-robot.iam.gserviceaccount.com

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

谷歌云函数 - SendGrid - 400 错误请求

来自分类Dev

云运行:500服务器错误,无日志输出

来自分类Dev

尝试访问我的Google云存储桶时,为什么会出现403错误?

来自分类Dev

尝试访问ibm云对象存储桶中的文件并获得CORS错误

来自分类Dev

谷歌应用引擎 500 未知错误

来自分类Dev

Spring MVC返回视图抛出500错误

来自分类Dev

Java Servlet故意抛出HTTP 500错误

来自分类Dev

定义简单函数时谷歌云函数错误

来自分类Dev

函数查看日志中的谷歌云函数导入错误

来自分类Dev

Laravel Restful API错误500(存储并销毁)

来自分类Dev

无法通过Ajax访问文件(错误500)

来自分类Dev

尝试访问后台时出现错误 500

来自分类Dev

错误500与布尔调用成员函数

来自分类Dev

Laravel dd 辅助函数返回错误 500

来自分类Dev

备份抛出 500 错误但未记录任何错误

来自分类Dev

通过google-kubernetes-engine部署:内部服务器错误[500](Google云平台)

来自分类Dev

谷歌表 api 500 内部错误节点 Js

来自分类Dev

角UI路由器抛出500错误

来自分类Dev

HTTP状态500的未知Servlet异常抛出错误

来自分类Dev

从一个存储桶转移到另一个存储桶后,访问Google云存储桶上的图像时出现403禁止错误

来自分类Dev

Docker 500错误

来自分类Dev

内部错误500 jbuilder

来自分类Dev

Solr WebAdmin错误500

来自分类Dev

条纹Webhook错误500

来自分类Dev

Solr错误#500 IOE

来自分类Dev

错误500与PHP curl

来自分类Dev

WordPress给出500错误

来自分类Dev

PHP创建500错误

来自分类Dev

响应::下载->错误500