как получить ошибку, если запуск вычислительного движка не удался - PullRequest
0 голосов
/ 29 января 2019

Я запускаю экземпляр, используя PHP, используя этот код:

function startInstance($g_project,$g_instance, $g_zone){

    $client = new Google_Client();
    $client->setApplicationName('Google-ComputeSample/0.1');
    $client->useApplicationDefaultCredentials();
    $client->addScope('https://www.googleapis.com/auth/cloud-platform');

    $service = new Google_Service_Compute($client);
    $response = $service->instances->start($g_project, $g_zone, $g_instance);
    echo json_encode($response);

}

Сегодня мне посчастливилось понять, что по неизвестной причине экземпляр, который я хотел запустить, не смог этого сделать.Я попытался запустить его с помощью графического интерфейса и получил ошибку через графический интерфейс: Zone "some-zone" does not have enough resources available to fulfill the request. Try a different zone, or try again later.

Я повторил ответ PHP и сравнил его с ответом, полученным при успешном запуске экземпляра.Мои выводы шокируют.Ответы были точно такими же (не считая меток времени и идентификаторов).Как же я могу различить между неудачным запуском экземпляра и успешным, если ответ тот же?

https://cloud.google.com/compute/docs/reference/rest/v1/instances/start предполагает, что в случае ошибки будет присутствовать объект error.Я могу подтвердить, что его нет.

Ответ обоих не удался:

{
    "clientOperationId": null,
    "creationTimestamp": null,
    "description": null,
    "endTime": null,
    "httpErrorMessage": null,
    "httpErrorStatusCode": null,
    "id": "id",
    "insertTime": "2019-01-28T14:22:36.664-08:00",
    "kind": "compute#operation",
    "name": "operation-name",
    "operationType": "start",
    "progress": 0,
    "region": null,
    "selfLink": "link/operation-name",
    "startTime": null,
    "status": "PENDING",
    "statusMessage": null,
    "targetId": "targetIdHere",
    "targetLink": "linkhere",
    "user": "user",
    "zone": "zone-in-question"
}

Что вы предлагаете мне сделать?Переключение на другую зону, вероятно, является лучшим решением.Но есть одна проблема, я даже не знаю, что экземпляр не запустился успешно, поэтому я не могу на это отреагировать.Это ожидаемое поведение?Что вы сделали, чтобы смягчить эту проблему?

1 Ответ

0 голосов
/ 08 апреля 2019

На самом деле я еще не наблюдал ошибку, которую вы описали с помощью GCE, но чтобы получить «состояние ошибки» экземпляра GCE, вы можете запросить API Compute с методом Method: instances.get и оценить ответ на «status»и «statusMessage»

HTTP request
GET https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/instances/{resourceId}

Возвращаемые значения для состояния могут быть следующими: ПРЕДОСТАВЛЕНИЕ, ПУСК, ВЫПОЛНЕНИЕ, ОСТАНОВКА, ОСТАНОВКА, ПРИОСТАНОВЛЕНИЕ, ПРИОСТАНОВЛЕНИЕ и ПРЕКРАЩЕНИЕ.

См. такжесправочное руководство по этому вызову API: https://cloud.google.com/compute/docs/reference/rest/v1/instances/get

Так что если вы запрашиваете состояние вашего вновь созданного экземпляра GCE в течение некоторого времени, и возвращаетесь с «успехом», только если статус экземпляра переключен с «ПРЕДОСТАВЛЕНИЕ»"или" STAGING "в" RUNNING ", вы должны быть в безопасности.Я никогда не замечал, что были какие-либо ошибки во время создания экземпляра, если состояние экземпляра было установлено на «РАБОТА».

...