クラウドウォッチイベントルールを使用してラムダを暖かく保つためにmongodbに接続する際に問題が発生しました。また、serverless-plugin-warmup 。なぜこれが起こっているのかについて誰でも知っていますか?また、自分のデータベースにIPをホワイトリストに登録し、ラムダ機能にElastic IPを使用します。クラウドがイベントルールによってラムダが別のIPを使用するのを監視できますか?DB接続が利用できないクラウドウォッチイベントルールを使用したラムダ
{"error":{"name":"MongoError","message":"no connection available"}}
私は、データベースがコード
const mongoose = require('mongoose');
mongoose.Promise = global.Promise;
let cachedDB = null;
module.exports = fn => (...args) => {
const [, context] = args;
context.callbackWaitsForEmptyEventLoop = false;
if (cachedDB && cachedDB.readyState != 0 && cachedDB.readyState != 3) {
fn(...args);
} else {
mongoose.connect(process.env.MONGO_URI);
mongoose.connection.on('error', err => {
console.log('Connection Error');
console.log(err);
});
mongoose.connection.once('open',() => {
cachedDB = mongoose.connection;
fn(...args);
});
}
};
この部分は意味がありません。「ラムダ関数には弾性IPを使用します」では、弾性IPをラムダ関数に割り当てることはできません。 MongoDBサーバーに弾力的なIPを割り当てているということですか?あなたがしなければならないことは、MongoDBサーバーと同じVPCにLambda関数を置き、パブリックまたは弾力的なIPではなくプライベートIPを使用してサーバーにアドレスすることです。 –
@マークB私はElastic IP経由で作成したIPをホワイトリストに登録しているMongo Atlas(データベースとしてサービス)を使用しています。私のlamba機能はVPN内にあります。インターネットゲートウェイ、サブネット、NATゲートウェイ、および弾性IPを設定して、ラムダがmongoアトラスに接続するときに、使用している静的IPが1つあるようにします。 –
これは元の質問にあったはずの情報です。したがって、ラムダ機能はVPC内にあり、NATゲートウェイへのルートを持つプライベートサブネット内にあり、弾性IPはNATゲートウェイに割り当てられていますか?最初に、同じプライベートサブネットのEC2インスタンスからMongoDBに接続し、VPC - > NAT - > Mongoからの接続が機能していることを確認します。 –