目前对数据流使用的凭证/配置存在一些混淆......
从我的实验来看,似乎数据流始终使用默认配置而不是活动配置。那是对的吗? (例如,在我的gcloud config
中,如果我的项目A的默认配置为活动配置在项目B上,那么我的数据流作业似乎总是会提交给项目A.同样以这种方式,似乎数据流job忽略了options.setProject()
中设置的内容,所以想知道数据流何时再次使用options.getProject()
......?)
还想知道有没有办法用自定义配置提交数据流作业,比方说我想在同一次运行中向不同的项目提交多个作业,而不是手动更改我的gcloud config
? p>
btw我正在数据流服务云平台上运行数据流作业,但是如果它会产生影响,则从非gce Cloudservices帐户提交作业。
答案 0 :(得分:4)
默认情况下,Google Cloud Dataflow使用application default credentials库来获取凭据(如果未指定)。该库目前仅支持使用gcloud
默认配置获取凭据。同样,对于项目,Google Cloud Dataflow使用gcloud
默认配置。
为了能够使用不同的项目运行作业,可以在命令行上手动指定(例如--project=myProject
,如果使用PipelineOptionsFactory.fromArgs)或明确使用{{3}设置选项}。
为了能够运行具有不同凭据的作业,可以构建GcpOptions.setProject对象,并可以使用credentials显式设置它,或者可以依赖于使用GcpOptions.setGcpCredential库的方式支持自动生成与Google Cloud Dataflow绑定的凭据对象。一个例子是使用环境变量GOOGLE_APPLICATION_CREDENTIALS
,如application default credentials所述。
答案 1 :(得分:1)
我以前的代码让Dataflow使用我们想要的服务帐户填充其工作人员(除了上面的Lukas答案):
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");