在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。