google cloud dataflow跨项目访问大表

时间:2016-10-13 17:51:30

标签: google-bigquery google-cloud-platform google-cloud-datastore google-cloud-dataflow google-cloud-bigtable

我想运行数据流作业,将数据从google-project-1-table迁移到google-project-2-table。 (从一个读取并写入另一个)。这样做我得到了许可问题。我已设置" GOOGLE_APPLICATION_CREDENTIALS"指向我的项目-1的凭证文件。在下面的项目-2中是project-1的权限/角色。 1)service-account(角色 - 编辑)2)-compute@developer.gserviceaccount.com(角色 - 编辑)3)@ cloudservices.gserviceaccount.com(角色 - 编辑)。

我还有什么需要做的才能完成这项工作吗?

  

引起:com.google.bigtable.repackaged.com.google.cloud.grpc.io.IOExceptionWithStatus:响应流中出错           在com.google.bigtable.repackaged.com.google.cloud.grpc.scanner.ResultQueueEntry $ ExceptionResultQueueEntry.getResponseOrThrow(ResultQueueEntry.java:66)           在com.google.bigtable.repackaged.com.google.cloud.grpc.scanner.ResponseQueueReader.getNextMergedRow(ResponseQueueReader.java:55)           在com.google.bigtable.repackaged.com.google.cloud.grpc.scanner.StreamingBigtableResultScanner.next(StreamingBigtableResultScanner.java:42)           在com.google.bigtable.repackaged.com.google.cloud.grpc.scanner.StreamingBigtableResultScanner.next(StreamingBigtableResultScanner.java:27)           在com.google.bigtable.repackaged.com.google.cloud.grpc.scanner.ResumingStreamingResultScanner.next(ResumingStreamingResultScanner.java:89)           在com.google.bigtable.repackaged.com.google.cloud.grpc.scanner.ResumingStreamingResultScanner.next(ResumingStreamingResultScanner.java:45)           在com.google.cloud.bigtable.dataflow.CloudBigtableIO $ 1.next(CloudBigtableIO.java:221)           在com.google.cloud.bigtable.dataflow.CloudBigtableIO $ 1.next(CloudBigtableIO.java:216)           在com.google.cloud.bigtable.dataflow.CloudBigtableIO $ Reader.advance(CloudBigtableIO.java:775)           在com.google.cloud.bigtable.dataflow.CloudBigtableIO $ Reader.start(CloudBigtableIO.java:799)           在com.google.cloud.dataflow.sdk.io.Read $ Bounded $ 1.evaluateReadHelper(Read.java:178)           ......还有18个   引起:com.google.bigtable.repackaged.io.grpc.StatusRuntimeException:PERMISSION_DENIED:用户无法访问项目:project-2           在com.google.bigtable.repackaged.io.grpc.Status.asRuntimeException(Status.java:431)           在com.google.bigtable.repackaged.com.google.cloud.grpc.scanner.StreamObserverAdapter.onClose(StreamObserverAdapter.java:48)           在com.google.bigtable.repackaged.io.grpc.internal.ClientCallImpl $ ClientStreamListenerImpl $ 3.runInContext(ClientCallImpl.java:462)           在com.google.bigtable.repackaged.io.grpc.internal.ContextRunnable.run(ContextRunnable.java:54)           在com.google.bigtable.repackaged.io.grpc.internal.SerializingExecutor $ TaskRunner.run(SerializingExecutor.java:154)           在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)           at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)           ......还有1个

1 个答案:

答案 0 :(得分:2)

“数据流安全和权限”指南的“Accessing Cloud Platform Resources Across Multiple Cloud Platform Projects”部分中有一些说明。

由于该指南没有明确说明Cloud BigTable,我将尝试根据您的问题清楚地写出要求。

使用假的项目ID号,似乎你有:

  • 项目project-1,ID 12345
  • 项目project-2,ID 9876
  • google-project-1-table
  • 中的Bigtable project-1
  • google-project-2-table
  • 中的Bigtable project-2
  • 将在project-1中运行的数据流管道,您希望:
    • google-project-1-table
    • 读取
    • 写信给google-project-2-table

这是准确的吗?

写入Bigtable的Dataflow工作程序作为计算引擎服务帐户运行。那是12345-compute@developer.gserviceaccount.com。此帐户需要能够访问project-2并写信至google-project-2-table

您的错误消息表示权限失败发生在最粗糙的粒度 - 帐户根本无法访问project-2