У меня есть веб-приложение Java, в котором я создаю экземпляры виртуальных машин GCP и выполняю с ними операции.
Я использую Java Compute Engine API для выполнения таких задач, как создание, запуск, остановка и т. Д.
Я хотел выполнить:
Compute compute = getComputeObj();
Suspend suspend = compute.instances().suspend(getProjectId(), getOrder().getAvailabilityZone(), getOrder().getMachineName());
Operation response = suspend .execute();
Однако я не могу приостановить компьютер с помощью этого API, поскольку приостановка находится в бета-версии (она не является частью API Compute Engine v1, поэтому не является частью оболочки Java).
На мой взгляд, у меня есть два варианта решения этой проблемы, ни один из которых мне не удалось выполнить:
Создайте Java-класс ComputeBeta, который наследует класс Compute, и реализуйте класс Suspend для выполнения операции. Это проблематично, поскольку поле URL-адреса в исходном классе Compute является последним полем, поэтому я не могу изменить URL-адрес с v1 на URL-адрес бета-версии.
Выполните обычное http-соединение с API бета-версии GCP, чтобы приостановить работу компьютера. Проблема здесь в том, что я не смог найти правильный синтаксис аутентификации для 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();
Мы будем очень благодарны за любую помощь в продвижении вперед!
dependencies
части вашего файла pom.xml, если вы работаете с Maven. Если вы используете Gradle, вам нужно немного его трансформировать, это встроенная модельcom.google.auth:google-auth-library-oauth2-http:0.21.1
30.09.2020