Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Loading credentials JSON with AWS SDK Results in Error

I'm trying to load credentials for AWS with loadFromPath and getting an unexpected error. Hardcoding the same credentials with AWS.config.update works fine. To make sure the path and format of credentials file is correct I loaded the same with fs.readFile and it loads correctly, so there don't seem to be any path / permissions issues. This seems super basic but I've been pulling my hair out trying to resolve. Thanks for your help.

The error / output:

    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)

The code:

'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);
like image 439
Praneeth Wanigasekera Avatar asked Aug 08 '13 23:08

Praneeth Wanigasekera


People also ask

How can I fix the error unable to locate credentials when I try to connect to my Amazon s3 bucket using the AWS CLI?

To resolve this issue, make sure that your AWS credentials are correctly configured in the AWS CLI. Note: If you still receive an error when running an AWS CLI command, make sure that you're using the most recent AWS CLI version.

What format is AWS credentials file?

We recommend downloading these files from the AWS Management Console by following the instructions for Managing access keys in the IAM User Guide. Both the shared config and credentials files are plaintext files that contain only ASCII characters (UTF-8 encoded).


2 Answers

You can skip the credential configuration, if you have the env vars
AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY
The AWS SDK will read those vars by default

If you still want to go with loading credentials from file, check that credentials.json has valid JSON.

Regarding http://aws.amazon.com/sdkfornodejs/ should be something like

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

Seems like you have access_id where it should be "accessKeyId" and private_key where it should be "secretAccessKey"

like image 59
alfonsodev Avatar answered Oct 25 '22 04:10

alfonsodev


Found the answer to this. For some bizarre reason, Amazon uses different field names for credentials in Node vs. other frameworks (e.g. Ruby).

In Ruby, just the two first items are:

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

While in Node.js, these same items are:

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

Changed the names in the credentials JSON to the latter and the error is gone. Why couldn't it be the same?

like image 43
Praneeth Wanigasekera Avatar answered Oct 25 '22 03:10

Praneeth Wanigasekera