将withTimestampAttribute应用于PubsubIO后,创建水印跟踪pubsub订阅失败



在Google数据流流中,我希望使用Pub/Sub消息属性中提供的记录时间戳,而不是发布的时间戳。

PubsubIO.Read<T> pubsubIO = PubsubIO.readProtos(type).fromSubscription(options.getPubSubSubscription())
pubsubIO.withTimestampAttribute("eventTimestamp");

当我将withTimestampAttribute添加到代码中时,它与本地直接运行程序配合得很好,但在使用Google Cloud Dataflow runner时失败了。

Workflow failed. Causes: Step setup_resource_/subscriptions/xxxxxx: Set up of resource /subscriptions/xxxxxx failed, Creating watermark tracking pubsub subscription projects/xxxxxx to topic projects/xxxxxx failed with error: User not authorized to perform this action.

运行数据流的服务帐户在数据流、pubsub等上具有管理员角色,因此我认为我们可以排除IAM问题。

不确定我是否错过了任何必要的配置,例如创建发布/子主题和订阅时的额外设置?

在我将Pub/Sub Subscriber角色添加到服务帐户后,问题已经解决。所以这是IAM的问题。。。

看起来Dataflow在运行时正在动态创建订阅,这就是为什么只有资源级别的管理员角色(主题/订阅(是不够的,它需要添加服务帐户IAM。

最新更新