aws-sdk NodeJS 从环境变量中读取凭证

Jac*_*ore 5 amazon-web-services node.js aws-sdk aws-sdk-js

我正在运行一个使用该aws-sdk库的 NodeJS 应用程序。我导出了以下环境变量:

AWS_ACCESS_KEY_ID=XXXXXXXXXXXXX
AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXX
Run Code Online (Sandbox Code Playgroud)

env我可以通过运行命令以及console.log(process.env)在我的节点代码中运行来验证它们是否设置正确。

运行我的应用程序时,出现以下错误:

Error: ENOENT: no such file or directory, open '/root/.aws/credentials'
    at Object.fs.openSync (fs.js:577:3)
    at Object.fs.readFileSync (fs.js:483:33)
    at Object.readFileSync (/app/node_modules/aws-sdk/lib/util.js:97:26)
    at SharedIniFile.loadFile [as ensureFileLoaded] (/app/node_modules/aws-sdk/lib/shared_ini.js:19:18)
    at SharedIniFile.loadProfile [as getProfile] (/app/node_modules/aws-sdk/lib/shared_ini.js:52:10)
    at Config.region (/app/node_modules/aws-sdk/lib/node_loader.js:88:34)
    at Config.set (/app/node_modules/aws-sdk/lib/config.js:448:39)
    at Config.<anonymous> (/app/node_modules/aws-sdk/lib/config.js:283:12)
    at Config.each (/app/node_modules/aws-sdk/lib/util.js:485:32)
    at new Config (/app/node_modules/aws-sdk/lib/config.js:282:19)
    at Object.<anonymous> (/app/node_modules/aws-sdk/lib/node_loader.js:99:14)
    at Module._compile (internal/modules/cjs/loader.js:702:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:713:10)
    at Module.load (internal/modules/cjs/loader.js:612:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:551:12)
    at Function.Module._load (internal/modules/cjs/loader.js:543:3)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
Run Code Online (Sandbox Code Playgroud)

显然,确切的问题很明显我没有文件/root/.aws/credentials。然而,从阅读来看,特别是在这里,sdk 似乎应该自动检测我的环境变量,并且不需要有凭据文件。

我的问题是如何才能aws-sdk在环境变量中使用凭据,而不会出现没有凭据文件的错误?

Sam*_*y93 0

AWS-SDK 自动获取 .aws/credential 文件的凭证。

  • 在 Windows 中,它位于 C:\Users\username\.aws\credentials 内
  • 在 Linux 中,它很可能位于 ~/.aws/credentials 位置。另外,您应该将其注释如下,

[default] AWS_ACCESS_KEY_ID=XXXXXXXXXXXXX AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXX