0
votes

I am trying to access a table in DynamoDB which is hosted in Europe (Ireland) eu-west-1, from a lambda endpoint which is hosted in US East (N. Virginia) us-east-1 - however, I am always getting the error:

{
    "message": "Requested resource not found",
    "code": "ResourceNotFoundException",
    "time": "2020-07-05T22:13:17.145Z",
    "requestId": "6SGPGDFVN6AE4QMC5A8LG2RJ0JVV4KQNSO5AEMVJF66Q9ASUAAJG",
    "statusCode": 400,
    "retryable": false,
    "retryDelay": 27.110475966612935
}

this is my code my code to call the DB:

class DynamoDB {
    constructor() {
        this.region = 'eu-west-1';
        this.endpoint = 'https://dynamodb.eu-west-1.amazonaws.com';
        this.tableName = 'MyTableName';
        this.docClient = new AWS.DynamoDB.DocumentClient();
        
    }

    getUser(userId) {
        return new Promise((resolve, reject) => {
            const params = {
                TableName: this.tableName,
                Key: {
                    "id": userId,
                }
            }  
            this.docClient.get(params, function(err, data) {
                if (err || !data.Item) {
                    console.error("Unable to read item. Error JSON:", JSON.stringify(err, null, 2));
                    return reject(JSON.stringify(err, null, 2))
                } else {
                    console.log("GetItem data succeeded:", JSON.stringify(data, null, 2));
                    resolve(data.Item);
                }
            });
        });
    }
}



    const DynamoDB = require("../Libraries/DynamoDB");
    const $ = new DynamoDB;

const Interceptor = {
  async process(session) {

      return $.getUser(session.id).then(data => {
        console.log(`User gotten! ${JSON.stringify(data, null, 2)}`);
      }).catch(err => {
        console.log(`Failure getting user... ${err}`);
        };
      }).finally(async () => {
        await InitGameSettings();
      });
      
    }

When I attempt this using an endpoint that is hosted in the same region as the DynamoDB table - it works fine! Only when I try this using different regions does it break. Why is this?

1

1 Answers

1
votes

Looks like the SDK is not using the DDB region and endpoint that you configured. Could you try replacing the constructor() with the following code snippet?

constructor() {
    this.region = 'eu-west-1';
    this.endpoint = 'https://dynamodb.eu-west-1.amazonaws.com';
    this.tableName = 'MyTableName';
    this.ddbService = new AWS.DynamoDB({
        apiVersion: '2012-08-10',
        endpoint: this.endpoint,
        region: this.region
    });
    this.docClient = new AWS.DynamoDB.DocumentClient({
        service: this.ddbService
    });
}