该任务是一个作为计时器触发器运行的 Azure 函数应用程序,用于检索具有特定标签的所有 AWS key ,然后列出这些 key 。代码有效,
- 我可以使用特定标签检索 SecretId,但我希望它获取 secret 值。
- 如果我硬编码 SecretId,我可以获得 secret 值。
我认为这是一个嵌套异步函数问题。
module.exports = async function awsconnect(context, accessKey, accessSecret) {
// Load the AWS SDK
var AWS = require('aws-sdk'),
params = {
Filters: [
{
Key: "tag-key",
Values: [
'AZ_PIPELINE',
]
},
]
};
AWS.config.update({
accessKeyId: accessKey,
secretAccessKey: accessSecret,
region: "ap-southeast-2",
});
// Create a Secrets Manager client
var client = new AWS.SecretsManager();
let listSecret = await listAwsSecrets(context, client, params)
}
async function listAwsSecrets(context, client, params) {
return new Promise(function (resolve, reject) {
client.listSecrets(params, (err, data) => {
if (err) {
context.log('Error getting credentials', err);
return reject(err);
} else {
data.SecretList.forEach(function (item) {
const secret = client.getSecretValue({ SecretId: item.Name }).promise();
context.debug('Id=', item.Name, secret);
});
return resolve();
}
});
});
}
如果我在 Kudu 中运行上面的代码。我得到以下内容
AWSConnect timer trigger function ran! 2022-03-08T04:27:09.048Z
Id= S3_SIT Promise { <pending> }
Id= App-SIT-V2 Promise { <pending> }
Id= APP-JOHN_DOE-V2 Promise { <pending> }
上面的三个 Secret_Id 具有匹配的标签。 “待处理”表示存在同步问题。但是如果我按照
把await放在前面const secret = await client.getSecretValue({ SecretId: item.Name }).promise();
它告诉我 await 仅在异步函数中有效,如果我将此行包装在异步函数中,我也会收到此错误。
那么退一步,我如何调用与特定标签匹配的listSecrets并获取每个secretId的 secret 值?
最佳答案
您可以尝试更改以下代码行吗:
data.SecretList.forEach(function (item) {
const secret = client.getSecretValue({ SecretId: item.Name }).promise();
context.debug('Id=', item.Name, secret);
});
至
data.SecretList.forEach(async function (item) {
const secret = await client.getSecretValue({ SecretId: item.Name });
context.debug('Id=', item.Name, secret);
});
或
for (let i=0; i<data.SecretList.length; i++) {
const item = data.SecretList[i];
const secret = await client.getSecretValue({ SecretId: item.Name });
context.debug('Id=', item.Name, secret);
}
关于node.js - 列出 AWS key ,然后迭代返回每个 key 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71390201/