Troubles connecting a MySQL Database on AWS with an Alexa-Hosted-Skill in Node.js

0

I'm having troubles trying to connect both of the services, because i can connect with the DB with MySQL Workbench in local and i can configurate the database, but using the same credentials in the skill don't work. I already tryed to create a special Rol inside the IAM and give to the skill permissions to fully operate with MySQL, use the same credentials of the database and set all the IPs allowed to access the Database in the Security Group, but it still don't work and i can't find where is the issue. If anyone knows where may i've been failed coding, i'd be thankful.

Also including what i used in the lambda main code:

var mysql = require('mysql');
var connection = mysql.createConnection({
              host: "host",
              user: "user",
              password: "pass",
              port: 3306
            });
connection.connect(function(err) {
  if (err) throw err;
  speakOutput = 'Connected';
});

and inside the package.json:

{
  "dependencies": {
    "ask-sdk-core": "^2.7.0",
    "ask-sdk-model": "^1.19.0",
    "aws-sdk": "^2.326.0",
    "mysql": "^2.5.4"
  }
}

The error i recieve in CloudWatch is :

ERROR	Error requesting syllable: TypeError: connection.promise is not a function
    at requestSyllable (/var/task/index.js:558:41)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async Object.handle (/var/task/index.js:224:31)
    at async GenericRequestDispatcher.dispatchRequest (/var/task/node_modules/ask-sdk-runtime/dist/dispatcher/GenericRequestDispatcher.js:95:24)
    at async GenericRequestDispatcher.dispatch (/var/task/node_modules/ask-sdk-runtime/dist/dispatcher/GenericRequestDispatcher.js:45:22)
    at async CustomSkill.invoke (/var/task/node_modules/ask-sdk-core/dist/skill/CustomSkill.js:68:26)
2023-09-25T12:09:38.280Z 93ae5531-f80d-4d14-bf0d-f6528bedd6fd ERROR Error requesting syllable: TypeError: connection.promise is not a function at requestSyllable (/var/task/index.js:558:41) at processTicksAndRejections (node:internal/process/task_queues:96:5) at async Object.handle (/var/task/index.js:224:31) at async GenericRequestDispatcher.dispatchRequest (/var/task/node_modules/ask-sdk-runtime/dist/dispatcher/GenericRequestDispatcher.js:95:24) at async GenericRequestDispatcher.dispatch (/var/task/node_modules/ask-sdk-runtime/dist/dispatcher/GenericRequestDispatcher.js:45:22) at async CustomSkill.invoke (/var/task/node_modules/ask-sdk-core/dist/skill/CustomSkill.js:68:26)

And requestSyllable function code is:

async function requestSyllable(level,idWord){
let WordSyllable;
try {
      connection.connect();
      const query = `SELECT Word FROM Syllable WHERE Lvl=${level} AND id=${idWord}`;
      await connection.query(query, (error, results) => {
        if (error) {
            throw error;
        }
       else{
            WordSyllable= results;
        }     
      });
    } catch (error) {
      console.error('Error executing SQL query:', error);
    } finally {
        connection.end();
        return WordSyllable;
    }
}
  • Please provide the error messages of your Lambda execution. It is very difficult for others to figure out the problems without detailed error messages.

Racs_99
asked 7 months ago273 views
1 Answer
0

The problem seems to be located at L558:41 in your Lambda function. I don't know which part of code are around line 558, but I spotted that the await before connection.query is redundant. connection.query is a callback-based function, and it will not return a Promise object.

profile picture
HS
answered 7 months ago

You are not logged in. Log in to post an answer.

A good answer clearly answers the question and provides constructive feedback and encourages professional growth in the question asker.

Guidelines for Answering Questions