Problemi di connessione con IOSDK

Riporto qui la discussione per un supporto che sto dando per lasciare le informazioni pubbliche.

Problema:

Abbiamo fatto un prova di integrazione attraverso una pagina web che espone l’elenco dei messaggi in formato json.

Però quando inseriamo l’url (ip o nome) e clicchiamo sul bottone importa messaggi la pagina resta in attesa senza rispondere.

Mia Risposta:

Sembra che l’sdk non riesca a richiamare l’url.
Riuscite a fare “curl” dal server a quella pagina?
Provate dalla riga di comando a fare "curl "

Penso che possa esserci qualche problema con qualche firewall o proxy che blocca l’ accesso.

Risposta: ho corretto il ws ma non abbiamo risolto.
Abbiamo provato a chiamare l’url del ws dal container iosdk-openwhisk e lo risolve correttamente, questa è la risposta:
C:\Program Files\Docker\Docker>docker exec iosdk-openwhisk
curl http://xxx/yyy
[{…}]

(dati omessi ma corretti)

Innanzitutto il “curl” viene fatto da una azione (un altro container) e non direttamente da iosdk-openwhisk quindi dovreste provare dall’azione.

Fate così:

docker ps e prendete l’id di una azione di tipo openwhisk/action-nodejs-v10

per esempio a8a93e0e2f0e

e provate con

docker unpause <image-id>
docker exec -ti <image-id> curl <il-vostro-url>

Poi sarebbe interessante vedere il log della azione

iosdk debug wskprops
wsk activation list

Dovrebbe ritornare una lista di “id”, serve il primo della lista, per esempio fd013e6a9a23415a813e6a9a23315adc

Postatemi il risultato di

wsk activation result <activation-id>
wsk activation logs <activation-id>

abbiamo probabilmente capito il problema:
C:\Program Files\Docker\Docker>wsk activation result b9eaf536198e4c4caaf536198ebc4ce5
{
“error”: {
“code”: “ERR_INVALID_PROTOCOL”,
“message”: “Protocol “http:” not supported. Expected “https:””,
“name”: “TypeError [ERR_INVALID_PROTOCOL]”,
"stack": "TypeError [ERR_INVALID_PROTOCOL]: Protocol “http:” not supported. Expected “https:”\n at new ClientRequest (_http_client.js:120:11)\n at request (https.js:289:10)\n at Object.get (https.js:293:15)\n at eval (eval at initializeActionHandler (/nodejsAction/runner.js:56:23), :10:30)\n at new Promise ()\n at NodeActionRunner.main [as userScriptMain] (eval at initializeActionHandler (/nodejsAction/runner.js:56:23), :4:16)\n at Promise (/nodejsAction/runner.js:82:35)\n at new Promise ()\n at NodeActionRunner.run (/nodejsAction/runner.js:80:16)\n at doRun (/nodejsAction/src/service.js:196:14)"

Adesso dobbiamo capire come passare a https. Ci aggiorniamo

Ops! SI in effetti internamente usa il protocollo https.
Per la verità usa proprio il modulo “https” di nodejs che è l’unico disponibile.
Potrei anche modificarlo per fargli accettare https ma non so se è una buona idea.
Un modo facile per avere https è usare caddy. https://caddyserver.com/

Ho fatto una semplicissima modifica all’importatore proxy, cambiando require('https') in require('http') e sembra funzionare. Siccome il server e’ modulare potete installarvela da voi con:

iosdk debug wskprops
curl https://gist.githubusercontent.com/sciabarracom/6dc03fa5e352575a054b3bb4805ce85b/raw/abe9436bb58d135b181d25adbe0f57af5003413a/importerhttp.js >import.js
wsk action update util/import import.js

Cliccate home e poi di nuovo import, dovreste vedere il messaggio “Importer using http only”
Provate nuovamente ora dovrebbe accettare http.

Ok adesso riusciamo ad importare i messaggi da un ws esposto in http
Grazie

That is the power of the community! Sapere il problema è il 90% di quello che serve a risolverlo.

1 Mi Piace