【发布时间】:2021-06-02 08:05:59
【问题描述】:
这很可能是我的误解,但它就是这样。我有一个 lambda 函数。它目前唯一要做的就是从秘密管理器那里检索一个秘密。如果我在调试器(在本例中为 cloud9)中的异步函数中运行它,它可以工作。一旦我将它放入处理程序并将函数上传到 lambda 然后对其进行测试,它就会超时。目前该功能的超时设置为 1 分 30 秒。这应该远远超过它所需要的,因为它在 Cloud9 中几乎立即返回。我在 CloudWatch 中看不到任何有用的东西。我觉得要么我的方法不正确,要么我遗漏了一些明显的东西,或者只是误解了一些基本的东西。
示例函数
async function GetSecrets(secretName) {
// Load the AWS SDK
var AWS = require('aws-sdk'),
region = "Region Secret is in",
secretName = secretName,
secret,
decodedBinarySecret;
// Create a Secrets Manager client
var client = new AWS.SecretsManager({
region: region
});
return new Promise((resolve,reject)=>{
client.getSecretValue({SecretId: secretName}, function(err, data) {
// In this sample we only handle the specific exceptions for the 'GetSecretValue' API.
// See https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html
// We rethrow the exception by default.
if (err) {
reject(err);
}
else {
// Decrypts secret using the associated KMS CMK.
// Depending on whether the secret is a string or binary, one of these fields will be populated.
if ('SecretString' in data) {
console.log("I got here and here is the data: " + data)
resolve(data.SecretString);
} else {
let buff = new Buffer(data.SecretBinary, 'base64');
resolve(buff.toString('ascii'));
}
}
});
});
}
// This Works in Cloud9
/*(async myFunc =>{
var value = await GetSecrets('SecretName')
console.log(value)
})();
*/
// inside handler - this times out in lambda
exports.handler = async function(event, context) {
var value = await GetSecrets('SecretName')
const response = {
statusCode: 200,
body: JSON.stringify({ message: 'hello world' })
}
return response
}
【问题讨论】:
-
您找到解决方案了吗?我也有同样的问题。如果没有挂起,我无法通过 sdk 调用任何其他 AWS 服务。我已经让我的 Lambda 完全访问它需要的一切。我什至用等效的 SDK 调用和相同的执行角色测试了一个 python 脚本,它可以工作!我已经在 .net core 3 和 2 上进行了测试,两者都挂起。
标签: node.js aws-lambda aws-secrets-manager aws-cloud9