我有一个javascript文件
secretServer.js
,它是我与node secretServer.js
一起运行的服务器,它在端口3030上托管一个快速服务器。我正在尝试这样做,以便如果我访问路线/secretTest
,它会从中获取一个秘密AWS秘密管理器并返回值。这是我的 secretServer.js
文件:
const algoliasearch = require("algoliasearch");
const express = require('express');
const cors = require('cors');
const app = express();
const port = 3030;
// Enable CORS for all routes
app.use(cors());
const { GetSecretValueCommand, SecretsManagerClient } = require("@aws-sdk/client-secrets-manager");
const getSecretValue = async (secretName = "SECRET_NAME") => {
const client = new SecretsManagerClient({
region: process.env.AWS_REGION || "us-west-2",
});
try {
const response = await client.send(
new GetSecretValueCommand({
SecretId: secretName,
})
);
console.log(response)
return response.SecretString;
} catch (error) {
console.error('Error retrieving secret:', error);
throw error;
}
}
// Retrieve secrets from AWS
async function retrieveSecretsFromAWS() {
return new Promise(async function (resolve, reject) {
let response = "init rsp val";
try {
response = await getSecretValue("algoliaDbIndex_Secret_Name");
} catch (error) {
response = `Error getting aws secret: ${error}`
}
console.log('response=', response)
resolve(response);
});
}
app.get('/secretTest', async (req, res) => {
let awsSecret = await retrieveSecretsFromAWS();
res.send({ 'awsSecret': awsSecret });
});
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
当我运行服务器并访问 http://localhost:3030/secretTest 时,我得到以下响应:
{
"awsSecret": "Error getting aws secret: CredentialsProviderError: Could not load credentials from any providers"
}
并在我的日志中看到此错误:
C:\Users\martin\Documents\projects\aws-react-docker-ghactions>node secretServer.js
Server is running on port 3030
Error retrieving secret: CredentialsProviderError: Could not load credentials from any providers
at C:\Users\martin\Documents\projects\aws-react-docker-ghactions\node_modules\@aws-sdk\credential-provider-node\dist-cjs\index.js:112:13
at C:\Users\martin\Documents\projects\aws-react-docker-ghactions\node_modules\@smithy\property-provider\dist-cjs\index.js:97:33
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async coalesceProvider (C:\Users\martin\Documents\projects\aws-react-docker-ghactions\node_modules\@smithy\property-provider\dist-cjs\index.js:124:18)
at async C:\Users\martin\Documents\projects\aws-react-docker-ghactions\node_modules\@smithy\property-provider\dist-cjs\index.js:142:18
at async C:\Users\martin\Documents\projects\aws-react-docker-ghactions\node_modules\@smithy\core\dist-cjs\index.js:82:17
at async C:\Users\martin\Documents\projects\aws-react-docker-ghactions\node_modules\@aws-sdk\middleware-logger\dist-cjs\index.js:34:22
at async getSecretValue (C:\Users\martin\Documents\projects\aws-react-docker-ghactions\secretServer.js:16:22)
at async C:\Users\martin\Documents\projects\aws-react-docker-ghactions\secretServer.js:34:18 {
tryNextLink: false
}
response= Error getting aws secret: CredentialsProviderError: Could not load credentials from any providers
我尝试检索的秘密名称为“algoliaDbIndex_Secret_Name”,这是显示秘密存在的屏幕截图,为什么我无法检索它?
您似乎没有在任何地方设置 AWS 凭证。您可以通过多种方式定义您的 AWS 凭证。您可以使用环境变量、凭证或配置文件等。以下文档解释了 AWS 在其中查找凭证时使用的操作顺序:https://docs.aws.amazon.com/cli/v1/userguide /cli-chap-configure.html