DataFlow SDK 2.x:PubSubIO 授权错误
Posted
技术标签:
【中文标题】DataFlow SDK 2.x:PubSubIO 授权错误【英文标题】:DataFlow SDK 2.x: PubSubIO authorization error 【发布时间】:2019-02-24 08:54:22 【问题描述】:Reading from Pubsub using Dataflow Java SDK 2
我正在尝试如下:
public class App2
public static void main(String[] args)
Pipeline pipeline = Pipeline.create(PipelineOptionsFactory.fromArgs(args).create());
pipeline
.apply("ReadStrinsFromPubsub",
PubsubIO.readStrings().fromTopic("projects/dev/topics/trading"))
.apply("PrintToStdout", ParDo.of(new DoFn<String, Void>()
@ProcessElement
public void processElement(ProcessContext c)
System.out.printf("Received at %s : %s\n", Instant.now(), c.element()); // debug log
));
pipeline.run().waitUntilFinish();
由于以下原因发生错误:
com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
"code" : 403,
"errors" : [
"domain" : "global",
"message" : "The request is missing a valid API key.",
"reason" : "forbidden"
],
"message" : "The request is missing a valid API key.",
"status" : "PERMISSION_DENIED"
我该如何解决?
【问题讨论】:
你是在本地机器上运行的吗? 是的。我在本地机器上运行此代码。如何在本地机器上运行此代码? 【参考方案1】:gcloud auth application-default login
将使您能够使用登录机器上的默认服务帐户。
【讨论】:
【参考方案2】:您可能缺少为本地计算机设置的用于访问 GCP 的服务帐户。
请参考Getting Started with Authentication 设置您的服务帐户和 GOOGLE_APPLICATION_CREDENTIALS 变量。
1) 在 GCP 控制台中创建服务帐号;
2) 将json密钥文件下载到本地;
3) 将 GOOGLE_APPLICATION_CREDENTIALS 变量设置为 json 密钥文件的路径。
【讨论】:
以上是关于DataFlow SDK 2.x:PubSubIO 授权错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 DataflowRunner 和 Dataflow 服务运行时,PubsubIO 不会将自定义时间戳属性输出为 context.timestamp
PubsubIO , msg 超过最大大小,如何执行错误处理
如何在 BigQuery 插入错误时崩溃/停止 DataFlow Pub/Sub 摄取
如何从 Python SDK 中的 Dataflow 作业连接到 CloudSQL?