【发布时间】:2021-01-15 20:19:49
【问题描述】:
我有一个 Java Web 应用程序,我在其中创建 GCP VM 实例并对其执行操作。
我使用 Java Compute Engine API 来执行创建、启动、停止等任务。
我想表演:
Compute compute = getComputeObj();
Suspend suspend = compute.instances().suspend(getProjectId(), getOrder().getAvailabilityZone(), getOrder().getMachineName());
Operation response = suspend .execute();
但是,我无法使用此 API“暂停”机器,因为“暂停”处于 beta 版本(它不是 Compute Engine v1 API 的一部分,因此它不是 Java 包装器的一部分)。
在我看来,我有两个选择来解决这个问题,但我都无法完成:
-
创建一个继承Compute类的Java类“ComputeBeta”,并实现一个Suspend类来执行操作。这是有问题的,因为原始 Compute 类中的 URL 字段是 final 字段,因此我无法将 URL 从“v1”更改为“beta”url。
-
执行到 GCP beta API 的“常规”httpconnection 以暂停机器。这里的问题是我无法找到 API 身份验证的正确语法,并且得到了 401 响应。到目前为止我尝试过的:
String serviceAccountKey = getServiceAccountKey();
String baseUrl = "https://compute.googleapis.com";
String endpoint = "/compute/beta/projects/" + getOrder().getProject()
+ "/zones/" + getOrder().getAvailabilityZone() + "/instances/"
+ getOrder().getMachineName() + "/suspend";
URL serverUrl = new URL(baseUrl + endpoint);
httpConnection = (HttpsURLConnection)serverUrl.openConnection();
httpConnection.setRequestMethod(HttpMethods.POST);
httpConnection.setDoOutput(true);
httpConnection.setDoInput(true);
httpConnection.setFixedLengthStreamingMode(length);
httpConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
httpConnection.setRequestProperty("Authorization", "Bearer " + serviceAccountKey);
httpConnection.connect();
int responseCode = httpConnection.getResponseCode();
String responseMessage = httpConnection.getResponseMessage();
任何有关如何前进的帮助将不胜感激!
【问题讨论】:
标签: java google-cloud-platform virtual-machine google-compute-engine google-compute-api