【发布时间】:2020-10-05 09:26:02
【问题描述】:
大纲:我正在尝试将 express 应用程序移植到 lambda,使用 AWS Serverless Express,我需要访问 Secrets Manager 存储 MongoDB Atlas 的凭据。
问题:我已经成功找回了我的秘密,但是我不能 为 AWS Serverless Express 的其余部分“导出”密钥 要使用的应用程序。
我尝试过的:解析和更新环境变量 modules.export.variableName(尝试仅导出变量 秘密)modules.export.functionName(试图导出整个 函数)返回一个数组(将函数的结果返回到 一个数组并从数组中调用)
应用程序结构:lambda.js server.js /db/db.js 控制器: 总共有6个控制器
lambda.js
'use strict'
const awsServerlessExpress = require('aws-serverless-express');
const app = require('./server');
const AWS = require('aws-sdk');
require('dotenv').config();
const secretsManager = new AWS.SecretsManager({
region: 'us-east-1' });
const AWS_SECRET = process.env.AWS_SECRET;
let server;
let uri
var password
module.exports.uri3;
let uri2;
const createServer = async (callback) => {
const secret = await secretsManager.getSecretValue({SecretId: AWS_SECRET}).promise();
const secretBackup = JSON.parse(secret.SecretString)
Object.assign(process.env, JSON.parse(secret.SecretString));
module.exports.exporteduserName = secretBackup.username;
console.log('undernasdnfkasdf ' + this.exporteduserName) //This returns the correct value
password = secretBackup.password;
//console.log('this is what is stored in userName ' + userName)
console.log('this is what is stored in password ' + password) //This returns the correct value
uri2 = `mongodb+srv://${process.env.username}:${process.env.password}@cluster0.3jrug.mongodb.net/lamb?retryWrites=true&w=majority`; //This returns the correct value
module.exports.uri3 = uri2
console.log(uri2)
server = awsServerlessExpress.createServer(app, null, binaryMimeTypes)
return server
}
console.log('this is uri3 ' + this.uri3) //undefined
console.log('outside function ' + this.exporteduserName) //undefined
const binaryMimeTypes = [
'application/javascript',
'application/json',
'application/octet-stream',
'application/xml',
'font/eot',
'font/opentype',
'font/otf',
'image/jpeg',
'image/png',
'image/svg+xml',
'text/comma-separated-values',
'text/css',
'text/html',
'text/javascript',
'text/plain',
'text/text',
'text/xml'
]
我怀疑我的问题在这里(下)- 但是我不完全知道这是什么 代码可以。似乎解决了promise函数然后设置 server 到带有 SecretId 的 createServer 函数。为什么会这样 使用这个变量我不确定。
exports.handler = (event, context) => {
Promise.resolve(server || createServer({SecretId: AWS_SECRET}, )).then((server) => {
awsServerlessExpress.proxy(server, event, context);
//console.log('this is what i have stored ' + process.env.AWS_SECRET);
});
};
【问题讨论】:
标签: amazon-web-services express aws-lambda aws-secrets-manager