问题
Problem Description:
I am using Sequalize ORM and my Firebase cloud functions giving SequelizeConnectionError: connect ETIMEDOUT error whenever I query my MySql DB. It works fine when functions are running on localhost via Firebase cli. Below is the Sequalize connection method.
Code Snippet
var sequelize = new Sequelize('dbname, 'username', 'password', {
host: "host",
dialect: 'mysql',
define: {
paranoid: true
},
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 1
},
operatorsAliases: false})
The above code is working perfect when functions are running via Firebase CLI Locally on port 5000. When I deploy it on Firebase and run the same functions I get below errors.
2018-06-23T11:31:53.887Z E app: Unhandled rejection
2018-06-23T11:31:55.187Z E app: SequelizeConnectionError: connect ETIMEDOUT
at Utils.Promise.tap.then.catch.err (/user_code/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:149:19)
at tryCatcher (/user_code/node_modules/sequelize/node_modules/bluebird/js/release/util.js:16:23)
at Promise._settlePromiseFromHandler (/user_code/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:512:31)
at Promise._settlePromise (/user_code/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:569:18)
at Promise._settlePromise0 (/user_code/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:614:10)
at Promise._settlePromises (/user_code/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:689:18)
at Async._drainQueue (/user_code/node_modules/sequelize/node_modules/bluebird/js/release/async.js:133:16)
at Async._drainQueues (/user_code/node_modules/sequelize/node_modules/bluebird/js/release/async.js:143:10)
at Immediate.Async.drainQueues (/user_code/node_modules/sequelize/node_modules/bluebird/js/release/async.js:17:14
)
回答1:
This is most likely because your Firebase project is on the free Spark payment plan. With Spark, your Cloud Functions can't make outgoing connections to services that are not fully controlled by Google. To make outgoing connections, you'll have to upgrade your project to one of the payment plans, such as Blaze.
Read more on the Firebase pricing page.
回答2:
You might only be allowed a pool of max size 1.
来源:https://stackoverflow.com/questions/51001037/my-firebase-cloud-functions-giving-sequelizeconnectionerror-connect-etimedout-e