Search code examples
node.jsamazon-web-servicesaws-sdksystemd

aws: missing credentials in config when using systemd


I'm trying to deploy a small Node.js server to a Linux EC2 on AWS. This server uses the AWS JavaScript SDK. The ~/.aws/credentials and ~/.aws/config are properly filled out. Everything works when I run the server by node index.js or npm start, but if I run it using systemd, I get the following response:

{ message: 'Could not load credentials from any providers',
retryable: false,
time: 2018-07-23T20:12:59.057Z,
code: 'CredentialsError' }

Solution

  • For some systems ~ becomes / when run from a service. This means the path is /.aws/credentials. For your system try copying "~/.aws" to "/root/.aws". Then try copying to "/.aws". One of these will work.

    You can also use a json file and specify that when creating your client.

    Create the file "/mysite/aws_config.json" with the following contents:

    {
        "accessKeyId":     "YOUR_ACCESS_KEY_ID",
        "secretAccessKey": "YOUR_SECRET_ACCESS_KEY", 
        "region":          "YOUR_REGION"
    }
    

    Then load the credentials with this statement:

    AWS.config.loadFromPath('/mysite/aws_config.json');
    

    This way you can keep your site's configuration in one directory.

    There are many methods to specify credentials. The AWS documentation for node.js SDK has lots more.