mongodb - 导出 Mongo 集合的 AWS Lambda 函数
问题描述
我想编写一个 AWS Lambda 函数:
- 从我的 MongoDB 数据库中导出某些集合(我使用的是 Mongo Atlas)
- 从 json 文件中删除
$oid
and 。$date
对于数字 2,我编写了一个 Python 函数来执行此操作。对于数字 1,我写道:
'use strict';
const AWS = require('aws-sdk');
const fs = require('fs');
const url = require('url');
const dayjs = require('dayjs');
const ZipFolder = require('zip-a-folder');
const exec = require('child_process').exec;
// ENVIRONMENT VARIABLES
// Mongo
const dbName = process.env.MONGO_DB_NAME;
const username = process.env.MONGO_USER;
const password = process.env.MONGO_PW;
const authDB = process.env.MONGO_AUTH_DB || 'admin';
//const port = process.env.MONGO_PORT || '27017';
const replicaSet = process.env.MONGO_REPLICA_SET;
const clusterShard = process.env.MONGO_CLUSTER_SHARD;
// S3
const bucketName = process.env.S3_BUCKET;
const storageClass = process.env.S3_STORAGE_CLASS || "STANDARD";
const s3bucket = new AWS.S3({ params: { Bucket: bucketName, StorageClass: storageClass } });
const dateFormat = process.env.DATE_FORMAT || 'YYYYMMDD_HHmmss';
module.exports.handler = function(event, context, cb) {
console.log(`Backup of database '${dbName}' to S3 bucket '${bucketName}' is starting`);
process.env['PATH'] = process.env['PATH'] + ':' + process.env['LAMBDA_TASK_ROOT'];
let fileName = dbName + '_' + dayjs().format(dateFormat);
let folderName = `/tmp/${fileName}/`;
let filePath = `/tmp/${fileName}.zip`;
exec(`mongodump -d ${dbName} -u ${username} -p ${password} -o ${folderName} --authenticationDatabase ${authDB} --ssl --host "${replicaSet}/${clusterShard}"`, (error, stdout, stderr) => {
if (error) {
console.log('Mongodump failed: ' + error);
process.exit(1)
}
ZipFolder.zipFolder(folderName, filePath, function(err) {
if (err) {
console.log('ZIP failed: ', err);
process.exit(1)
} else {
fs.readFile(filePath, function(err, data) {
s3bucket.upload({ Key: fileName + '.zip', Body: data, ContentType: 'application/zip' }, function(err, data) {
fs.unlink(filePath, function(err) {
if (err) {
console.log('Could not delete temp file: ' + err);
process.exit(1)
}
});
if (err) {
console.log('Upload to S3 failed: ' + err);
process.exit(1)
} else {
console.log('Backup completed successfully');
}
});
});
}
});
});
};
但它在里面mongodump
,我需要使用mongoexport
它(因为我稍后将需要它用于 BigQuery),并且我还需要添加我上面提到的 Python 函数。我怎么能这样做?
解决方案
推荐阅读
- python - 如何对熊猫数据框中的每一行进行排序并获取索引?
- java - 从生成的 EditText Android Kotlin 获取输入
- javascript - 使用 FormSpy 时如何禁用 React Final Form 中的提交按钮?
- php - Mpdf 未更新到最新版本
- ads - Google adwords 客户 API 没有回头客列表?
- python - 哪种平台/语言用于繁重的计算/ML 任务?
- kotlin - Kotlin 中 DynamicArray 的自定义 print() 打印出意外结果
- mongodb - Mongoose 在填充的数组中填充并选择一个字段
- angular - 使用 Angular SPA 的 PKCE 的 OKTA 授权代码流
- javascript - 尝试通过 chrome 扩展在我的网页上创建叠加层。但是html覆盖没有显示