我的目标是通过首先检索活动实例列表来测试 google 的协调器和计算引擎 API。包含 servlet 文件的 Orchestrator 项目存储在 jar 中。
我正在尝试测试 java google 计算引擎客户端 api。我有一个 cron 作业,它调用协调器 servlet。 cron 的目标是后端。我尝试从中获取实例列表:
...
AppIdentityCredential credential = getCredential(computeScope);
String appName = ConfigProperties.getInstance().getGceConfigProperties().get("projectId");
try {
httpTransport = GoogleNetHttpTransport.newTrustedTransport();
final Compute compute = new Compute.Builder(
httpTransport, JSON_FACTORY, credential).setApplicationName(appName)
.build();
logger.info("================== Listing Compute Engine Instances ==================");
Compute.Instances.List instances = compute.instances().list(projectId, zone);
InstanceList list = instances.execute();
if (list.getItems() == null) {
logger.info("No instances found. Sign in to the Google APIs Console and create "
+ "an instance at: code.google.com/apis/console");
} else {
for (Instance instance : list.getItems()) {
logger.info(instance.toPrettyString());
}
}
...
我得到的错误响应是(我从响应中省略了我的项目名称,我确认我在代码中使用了正确的项目 ID):
com.google.cloud.solutions.sampleapps.orchestration.orchestrator.server.GceClientApiUtils
getInstances: com.google.api.client.googleapis.json.GoogleJsonResponseException: 404 OK
{
"code" : 404,
"errors" : [ {
"domain" : "global",
"message" : "The resource 'projects/<project-name-here>' was not found",
"reason" : "notFound"
} ],
"message" : "The resource 'projects/<project-name_here>' was not found"
}
我还尝试通过检索访问令牌并进行 RESTful 调用来获取实例列表,并且收到了完全相同的响应。通过将构造的 Url 与使用 api 资源管理器成功查询实例进行比较,我确认构造的 Url 是正确的。
编辑:我在另一篇文章的帮助下确定了问题的解决方案: 我终于能够在帖子 Compute Engine API call failed with http 404
中找到解决方案我需要将我的应用程序引擎服务帐户添加为具有编辑功能的团队成员,但默认情况下它不具备该功能。一旦我这样做了,代码就按预期工作了。我必须通过 cloud.google.com/console 执行此操作,就像通过 appengine.google.com 执行此操作一样,服务帐户将处于待处理状态,并且无法访问。
对我来说,我必须确保我获得了授权。在终端中尝试一下
gcloud auth login
确保您位于正确的项目中,您可以在虚拟机上运行以下命令来查看您是否位于正确的项目中: gcloud 配置列表
查看 Google 网上论坛
中的这篇文章您是否有权访问开发者控制台https://console.developers.google.com? 用户帐户 @appspot.gserviceaccount.com 似乎无法访问计算引擎。就我而言,我看到@developer.gserviceaccount.com。
如果您没有,请访问 https://developers.google.com/console/help/new/#generateoauth2 创建一个新的客户端 ID
验证 gcloud 安装后。
gcloud compute ssh example user@instance-name
确保输入虚拟机实例用户和实例名称。