6

Il mio obiettivo è testare l'orchestratore di google e l'API del motore di calcolo recuperando innanzitutto un elenco di istanze attive. file di servlet viene memorizzato in un barattolo.L'errore "progetti/<my project>" non trovato "durante il tentativo di ottenere l'elenco delle istanze in esecuzione

sto cercando di testare il client API del motore di calcolo Java google. ho un lavoro cron, che invita la servlet orchestratore. l'obiettivo per il cron è un backend. da quale cerco di ottenere l'elenco di istanze:

... 
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()); 
     } 
    } 
... 

ci risposta di errore ottengo è (ho omesso il mio progetto nome f ROM la risposta, ho confermato che sto usando l'id corretto progetto nel mio codice):

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" 
} 

Ho anche tentato questa recuperando un token di accesso e di effettuare una chiamata RESTful per ottenere l'elenco delle istanze e ho ricevuto la stessa identica risposta. Ho confermato che l'Url costruito era corretto confrontandolo con una query di successo delle istanze usando l'API explorer.

EDIT: ho determinato la soluzione al problema con l'aiuto di un altro post: sono stato finalmente in grado di trovare la soluzione nel post Compute Engine API call fails with http 404

avevo bisogno di aggiungere il mio account di servizio del motore app come un membro del team con modificare le funzionalità, che non ha per impostazione predefinita. Una volta fatto questo, il codice ha funzionato come previsto. Ho dovuto farlo attraverso cloud.google.com/console, come se fosse stato fatto tramite appengine.google.com, uno stato in sospeso verrà assegnato all'account del servizio e non avrà accesso.

risposta

2

Avete accesso alla console degli sviluppatori https://console.developers.google.com? Sembra che l'account utente @ appspot.gserviceaccount.com non abbia accesso al motore di calcolo. Nel mio caso vedo @ developer.gserviceaccount.com.

Se non ne avete uno, visitare https://developers.google.com/console/help/new/#generatingoauth2 per creare un nuovo ID client

+0

Sono finalmente riuscito a trovare la soluzione nel post http://stackoverflow.com/questions/21062286/compute-engine-api-call-fails-with-http-404. Avevo bisogno di aggiungere l'account del servizio motore dell'app come membro del team con funzionalità di modifica, che non ha per impostazione predefinita. Una volta fatto questo, il codice ha funzionato come previsto. Dovevo farlo tramite http://cloud.google.com/console, come se fosse stato fatto tramite appengine.google.com, uno stato in sospeso verrà assegnato all'account del servizio e non avrà accesso. – jKimo

1

Assicurati di essere nel giusto progetto, è possibile eseguire questo comando sul vostro VM per vedere se siete nel giusto progetto: gcloud lista config

Date un'occhiata a questo post in Google Groups

+0

Il codice è in esecuzione in un contenitore all'interno dell'applicazione del motore dell'app. Ho verificato chiamando getServiceAccountName(). Il risultato è stato @ appspot.gserviceaccount.com – jKimo

+0

Recupero correttamente il token utilizzando AppIdentityCredential. Tuttavia, quando effettuo una chiamata per calcolare usando questa credenziale, restituisce che la risorsa non è stata trovata. – jKimo

4

Per me ho dovuto assicurarsi che ho avuto l'autorizzazione. Prova questo nel terminale gcloud auth login

Problemi correlati