如何使用Google Cloud SDK以编程方式更改活动项目

时间:2018-07-25 22:29:25

标签: java google-cloud-platform google-cloud-storage google-cloud-sdk

我正在使用Google Java SDK访问Google Cloud Storage。我已经为我的一个项目创建了一个服务帐户,并下载了JSON密钥文件。我决定按照here所示手动加载JSON密钥,或者依赖于环境变量:

TypeError

此外,我有多个用户,每个用户有多个项目:

@classmethod

创建运行代码时,它将尝试使用Project A的服务帐户密钥,它会尝试访问ProjectX。在gcloud util中,Project X是我的活动项目__class__。我的环境变量中没有任何地方可以设置活动项目。我可以使它起作用的唯一方法是在gcloud GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream(jsonPath)) .createScoped(Lists.newArrayList("https://www.googleapis.com/auth/cloud-platform")); Storage storage = StorageOptions.newBuilder().setCredentials(credentials).build().getService();

中切换活动项目

1)Java SDK中是否有一种方法可以以编程方式覆盖由gcloud util神奇设置的当前项目?

2)如果不是从JSON密钥文件中列出的内容中提取当前项目的代码在哪里? SDK用来确定要使用的项目的优先顺序是什么?

2 个答案:

答案 0 :(得分:0)

问题1的答案可以在以下答案中看到:https://stackoverflow.com/a/44122119/311525

可以使用setProjectId(PROJECT_ID)覆盖项目

Storage storage = StorageOptions.newBuilder().setProjectId("your-project-id").setCredentials(credentials).build().getService();

答案 1 :(得分:0)

为了同时获得两个答案,我在这里指的是Scottanswer

  

问题1的答案可以在以下答案中看到:   https://stackoverflow.com/a/44122119/311525

     

可以使用setProjectId(PROJECT_ID)覆盖项目

Storage storage = StorageOptions.newBuilder().setProjectId("your-project-id").setCredentials(credentials).build().getService();

问题2的答案是,代码将从JSON文件中提取项目,但是您必须将gcloud中的项目设置为生成服务帐户的项目。在此示例中,如果要访问项目A,则需要将gcloud设置为项目A。