Google cloud dataflow google云数据流使用的凭据

Google cloud dataflow google云数据流使用的凭据,google-cloud-dataflow,Google Cloud Dataflow,目前对数据流使用的凭据/配置有一些混淆 从我的实验来看,数据流似乎总是使用默认配置而不是活动配置。对吗?(例如,在我的gcloud config中,如果我的活动配置在项目B上,而我的项目a有一个默认配置,那么我的数据流作业似乎将始终提交给项目a。同样,通过这种方式,数据流作业似乎忽略了在options.setProject()中设置的内容。),所以有点想知道数据流什么时候又在使用options.getProject()了…?) 还想知道是否有任何方法可以提交具有自定义配置的数据流作业,比如说,我

目前对数据流使用的凭据/配置有一些混淆

从我的实验来看,数据流似乎总是使用默认配置而不是活动配置。对吗?(例如,在我的
gcloud config
中,如果我的活动配置在项目B上,而我的项目a有一个默认配置,那么我的数据流作业似乎将始终提交给项目a。同样,通过这种方式,数据流作业似乎忽略了在
options.setProject()中设置的内容。)
,所以有点想知道数据流什么时候又在使用
options.getProject()
了…?)

还想知道是否有任何方法可以提交具有自定义配置的数据流作业,比如说,我希望在同一次运行中向具有不同凭据的不同项目提交多个作业(而无需手动更改我的
gcloud config


顺便说一句,我正在dataflow services云平台上运行dataflow作业,但如果会产生影响,请从非gce Cloudservices帐户提交作业。

如果未指定凭据,Google cloud dataflow默认使用库获取凭据。库当前仅支持使用
gcloud
默认配置获取凭据。同样,对于该项目,谷歌云数据流使用
gcloud
默认配置

为了能够使用不同的项目运行作业,可以在命令行上手动指定(例如
--project=myProject
,如果使用),或者显式设置该选项


为了能够运行具有不同凭据的作业,可以构造一个对象并显式地使用它进行设置,也可以使用库支持的方式自动生成与Google云数据流绑定的凭据对象。一个例子是使用环境变量
GOOGLE\u APPLICATION\u CREDENTIALS

我曾经让数据流用我们想要的服务帐户填充其工作人员的代码(除了上面的Lukas answer):

final List SCOPES=Arrays.asList(
"https://www.googleapis.com/auth/cloud-platform",
"https://www.googleapis.com/auth/devstorage.full_control",
"https://www.googleapis.com/auth/userinfo.email",
"https://www.googleapis.com/auth/datastore",
"https://www.googleapis.com/auth/pubsub");
options.setGcpCredential(ServiceAccountCredentials.fromStream(newfileinputstream(“key.json”)).createScoped(SCOPES));
选项。设置服务帐户(“xxx@yyy.iam.gserviceaccount.com");

你好,卢卡斯,谢谢你的详细回答!不确定我是否正确理解它,所以只想确定:如果我在默认配置和
GcpOptions
中都设置了project,那么我的管道将在哪个项目中运行,在这种情况下,预期的行为又是什么?只有在未设置的情况下,才会推断各种选项类上设置的值。因此,您在GcpOptions上设置的任何值都将被接受,并且项目的默认配置将被忽略。请注意,如果仅设置项目,则仍将从默认配置推断凭据。Hi@LukaszCwik我刚刚尝试使用GcpOptions.setGcpCredential方法从服务帐户设置凭据<代码>选项.setGcpCredential(ServiceAccountCredentials.fromStream(新文件输入流(“key.json”));选项。设置服务帐户(“xxx@yyy.iam.gserviceaccount.com");执行此操作时,要求我指定作用域。我是否可以不使用此服务帐户有权访问的范围?也许我在这里混淆了范围和权限。每当我启动并运行它时,我可以将其添加为答案,或者您可以添加以下代码:)作用域位于IAM帐户之前,并且需要指定,直到所有Google服务都了解IAM为止。您最好的选择是使用Dataflow在这里定义的同一组作用域:真棒,对我@LukaszCwik有用。我将添加我的代码作为将来参考的答案,希望它能帮助人们:)这正是我想要的。花了很长时间才找到这个。我不知道为什么这个文档记录得不够好
final List<String> SCOPES = Arrays.asList(
      "https://www.googleapis.com/auth/cloud-platform",
      "https://www.googleapis.com/auth/devstorage.full_control",
      "https://www.googleapis.com/auth/userinfo.email",
      "https://www.googleapis.com/auth/datastore",
      "https://www.googleapis.com/auth/pubsub");
options.setGcpCredential(ServiceAccountCredentials.fromStream(new FileInputStream("key.json")).createScoped(SCOPES));
options.setServiceAccount("xxx@yyy.iam.gserviceaccount.com");