gpt4 book ai didi

node.js - 解密多个环境。 AWS Lambda 中的变量

转载 作者:搜寻专家 更新时间:2023-10-31 22:22:28 25 4
gpt4 key购买 nike

我有一些加密的环境变量需要在 AWS Lambda 函数中解密。他们给出了一些示例代码,但我不想为我需要解密的每个值运行大量代码:

const AWS = require('aws-sdk');

const encrypted = process.env['my_password'];
let decrypted;


function processEvent(event, context, callback) {
// TODO handle the event here
}

exports.handler = (event, context, callback) => {
if (decrypted) {
processEvent(event, context, callback);
} else {
// Decrypt code should run once and variables stored outside of the function
// handler so that these are decrypted once per container
const kms = new AWS.KMS();
kms.decrypt({ CiphertextBlob: new Buffer(encrypted, 'base64') }, (err, data) => {
if (err) {
console.log('Decrypt error:', err);
return callback(err);
}
decrypted = data.Plaintext.toString('ascii');
processEvent(event, context, callback);
});
}
};

我想知道 AWS SDK 是否包含允许我一次解密多个值的函数。如果做不到这一点,是否有一种方法可以优雅地将这些调用链接在一起,这样它们就不会占用我原本简单的函数的大约 75 行代码?

最佳答案

您可以使用 promise 来实现这一点。请参阅下面的示例,了解如何通过 KMS 解密用户名和密码。您可以根据需要向 decryptPromises 数组添加任意数量的额外解密 promise :

    const AWS = require('aws-sdk');    const encrypted = {        username: process.env.username,        password: process.env.password    };    let decrypted = {};    function processEvent(event, context, callback) {        //do work    }    exports.handler = (event, context, callback) => {        if ( decrypted.username && decrypted.password ) {            processEvent(event, context, callback);        } else {            const kms = new AWS.KMS();            const decryptPromises = [                kms.decrypt( { CiphertextBlob: new Buffer(encrypted.username, 'base64') } ).promise(),                kms.decrypt( { CiphertextBlob: new Buffer(encrypted.password, 'base64') } ).promise()            ];            Promise.all( decryptPromises ).then( data => {                decrypted.username = data[0].Plaintext.toString('ascii');                decrypted.password = data[1].Plaintext.toString('ascii');                processEvent(event, context, callback);            }).catch( err => {                console.log('Decrypt error:', err);                return callback(err);            });        }    };

您可以在 Support for Promises in the SDK 中找到有关如何为 AWS SDK 实现 promise 的更多信息。文档。

关于node.js - 解密多个环境。 AWS Lambda 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44788860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com