2013-08-08 14 views
6

Sto provando a caricare le credenziali per AWS con loadFromPath e ottenere un errore imprevisto. Hardcoding le stesse credenziali con AWS.config.update funziona bene. Per essere sicuro che il percorso e il formato del file delle credenziali siano corretti, ho caricato lo stesso file con fs.readFile e si carica correttamente, quindi non sembrano esserci problemi di percorso/permessi. Questo sembra super-base ma mi sono tirato fuori i capelli cercando di risolvere. Grazie per l'aiuto.Caricamento credenziali JSON con AWS SDK Risultati in errore

L'errore/uscita:

Here: /home/ec2-user/.ec2/credentials.json 
    Got this through readFile: { access_id: 'XXXXXXX', 
    private_key: 'XXXXXXX', 
    keypair: 'praneethkey', 
    'key-pair-file': '/home/ec2-user/.ec2/praneethkey.pem', 
    region: 'us-west-2' } 

    /home/ec2-user/node_modules/aws-sdk/lib/config.js:221 
    if (err) throw err; 
       ^
    SyntaxError: Unexpected token < 
    at Object.parse (native) 
    at /home/ec2-user/node_modules/aws-sdk/lib/metadata_service.js:100:38 
    at IncomingMessage.<anonymous> (/home/ec2-user/node_modules/aws-sdk/lib/metadata_service.js:75:43) 
    at IncomingMessage.EventEmitter.emit (events.js:117:20) 
    at _stream_readable.js:910:16 
    at process._tickCallback (node.js:415:13) 

Il codice:

'use strict'; 

var AWS = require('aws-sdk'); 
var fs = require('fs'); 

var pathv = process.env.HOME + '/.ec2/credentials.json'; 

AWS.config.loadFromPath(pathv); 

console.log('Here: ' + pathv); 


fs.readFile(pathv, 'utf8', function (err, data) { 
    if (err) { 
    console.log('Error: ' + err); 
    return; 
    } 
    data = JSON.parse(data); 

console.log("Got this through readFile:",data); 
+0

Che aspetto ha il file JSON? –

risposta

9

Si può saltare la configurazione delle credenziali, se avete l'env vars
AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY
L'SDK di AWS leggerà quei vars per default

Se si desidera continuare a caricare le credenziali dal file, controllare che credentials.json abbia JSON valido.

Per quanto riguarda http://aws.amazon.com/sdkfornodejs/ dovrebbe essere qualcosa di simile

{ "accessKeyId": "akid", "secretAccessKey": "secret", "region": "us-west-2" } 

Sembra che avete access_id dove dovrebbe essere "accessKeyId" e private_key dove dovrebbe essere "secretAccessKey"

+0

Grazie! Questo è esattamente quello che stava succedendo. Stavo usando un esempio JSON di credenziali per AWS con Ruby e non mi ero reso conto che era leggermente diverso per Node. –

+0

Nessun problema :), ricorda di contrassegnare la risposta come corretta. – alfonsodev

+0

Ho AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY impostato in .bash_profile ma AWS SDK non sembra riconoscerli. Forse qualche idea? – trainoasis

0

trovato la risposta a questa. Per qualche strana ragione, Amazon utilizza nomi di campo diversi per le credenziali in Nodo rispetto ad altri framework (ad es. Ruby).

In Ruby, solo i primi due elementi sono:

"access_id": "[Your AWS Access Key ID]", 
"private_key": "[Your AWS Secret Access Key]", 

Mentre in Node.js, questi stessi elementi sono:

"accessKeyId": "[Your AWS Access Key ID]", 
"secretAccessKey": "[Your AWS Secret Access Key]", 

cambiato i nomi nelle credenziali JSON a quest'ultimo e l'errore è andato. Perché non potrebbe essere lo stesso?

+1

> Perché non potrebbe essere lo stesso? Non lo so per certo, ma molto probabilmente la differenza è dovuta al fatto che le pratiche di denominazione JS standard prevedono l'utilizzo di minuscoloCamelCase per le variabili semplici e CapitalCamelCase per i nomi delle classi. Probabilmente se dovessi indovinare. –

Problemi correlati