我正在使用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用来确定要使用的项目的优先顺序是什么?
答案 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)
为了同时获得两个答案,我在这里指的是Scott的answer:
问题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。