javascriptamazon-web-servicesamazon-sesaws-sdk-jsaws-sdk-nodejs

How to hard code credentials AWS SES JS SDK V3


AWS forced me to upgrade do SDK V3, and now I'm having such a hard time setting up my credentials. They used to be hard-coded like:

AWS.config.update({
  apiVersion: "2010-12-01",
  accessKeyId: "MYKEY",
  secretAccessKey: "MYOTHERKEY",
  region: "us-east-1",
});

But now the AWS package is deprecated in favor of the modularized @aws-sdk/client-ses.

How to hard code my credentials as I used to do in this new version of the SDK?

What I have so far:

import {
  SESClient,
  CloneReceiptRuleSetCommand,
} from "@aws-sdk/client-ses";

const client = new SESClient({
  accessKeyId: "MYKEY",
  secretAccessKey: "MYOTHERKEY",
  region: "us-east-1",
});

const command = new CloneReceiptRuleSetCommand(params);

client.send(command)

But it returns me the error "CredentialsProviderError: Could not load credentials from any providers"

P.S.: I know the disadvantages of hard-coding credentials, but this is not a issue for this application in particular. It's a backend Node.js service, and only I need to have access to it.


Solution

  • The key and the secret need to be in the credentials object of the configuration object.

    Also, for CloneReceiptRuleSetCommand, you need to provide OriginalRuleSetName and RuleSetName.

    So, it should be like this:

    import {
      SESClient,
      CloneReceiptRuleSetCommand,
    } from "@aws-sdk/client-ses";
    
    const client = new SESClient({
      credentials: {
        accessKeyId: "MYKEY",
        secretAccessKey: "MYOTHERKEY"
      },
      region: "us-east-1",
    });
    
    const params = {
      OriginalRuleSetName: 'RULESET_TO_CLONE', 
      RuleSetName: 'TARGET_RULESET'
    }
    
    const command = new CloneReceiptRuleSetCommand(params);
    
    client.send(command)
    

    References: