Google Cloud Shell HttpAccessTokenRefreshError:如果创建的VM没有服务帐户或范围,则会发生这种情况

时间:2017-06-08 08:23:18

标签: python google-cloud-platform google-cloud-dataflow

我正在尝试运行一个简单的脚本 https://github.com/GoogleCloudPlatform/training-data-analyst/blob/master/courses/data_analysis/lab2/python/grepc.py (此代码是连接到Google存储的数据流管道)

上周工作了。但是当我现在运行它时,我总是得到同样的错误:

> Traceback (most recent call last):
  File "grepc.py", line 50, in <module>
    run()
  File "grepc.py", line 44, in run
    | 'write' >> beam.io.WriteToText(output_prefix)
  File "/usr/local/lib/python2.7/dist-packages/apache_beam/io/textio.py", line 391, in __init__
    skip_header_lines=skip_header_lines)
  File "/usr/local/lib/python2.7/dist-packages/apache_beam/io/textio.py", line 89, in __init__
    validate=validate)
  File "/usr/local/lib/python2.7/dist-packages/apache_beam/io/filebasedsource.py", line 105, in __init__
    self._validate()
  File "/usr/local/lib/python2.7/dist-packages/apache_beam/options/value_provider.py", line 109, in _f
    return fnc(self, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/apache_beam/io/filebasedsource.py", line 165, in _validate
    match_result = FileSystems.match([pattern], limits=[1])[0]
  File "/usr/local/lib/python2.7/dist-packages/apache_beam/io/filesystems.py", line 131, in match
    return filesystem.match(patterns, limits)
  File "/usr/local/lib/python2.7/dist-packages/apache_beam/io/gcp/gcsfilesystem.py", line 138, in match
    raise BeamIOError("Match operation failed", exceptions)
apache_beam.io.filesystem.BeamIOError: Match operation failed with exceptions {'gs://{MY_BUCKET}/javahelp/*.java': HttpAccessTokenRefreshError(u' This can occur if a VM was created with no service account or scopes.',)}

我不知道如何解决这个问题。很多谷歌搜索都没有帮助。

2 个答案:

答案 0 :(得分:1)

获取新的用户凭据以用于应用程序默认凭据解决了我的问题。

这就是我用的

  

gcloud auth应用程序-默认登录名

这里https://cloud.google.com/sdk/gcloud/reference/auth/application-default/login

有据可查

,您可以在此处找到说明:当您开发通常使用服务帐户但需要在本地开发环境中运行代码的代码时,此命令很有用,因为在本地开发环境中可以更轻松地提供用户凭据。该凭据将应用于使用“应用程序默认凭据”客户端库的所有API调用

我发现的另一个解决方案是:下载计算引擎服务帐户的密钥文件并导出GOOGLE_APPLICATION_CREDENTIALS以指向该密钥文件

答案 1 :(得分:0)

我假设错误消息中的{MYBUCKET}不是文字的,而是被您的存储桶名称替换。

如果您是从GCE VM实例运行此命令,可以运行此命令并将输出粘贴到此处吗?

gcloud compute instances描述{instance-name} --zone {instance-zone}

以上内容将告诉您VM实例具有哪些服务帐户和范围。还有:

gcloud项目get-iam-policy {project-name}

这会告诉您项目有哪些服务帐户。请清除项目编号或您认为敏感的任何信息。