use*_*520 5 javascript amazon-web-services node.js aws-lambda aws-sdk-js
我正在使用带有lambda和AWS Javascript SDK的Node.我有一个角色附加到lambda函数,允许我需要访问.我希望能够接受用户对访问和密钥的输入,并更新我的AWS配置以使用这些更新的凭据执行新操作.至今
let AWS = require("aws-sdk"); // I do the normal import
let ddb = new AWS.DynamoDB({apiVersion: '2012-10-08'}); // do some dynamo action
Run Code Online (Sandbox Code Playgroud)
....
然后使用这些具有其他帐户资源权限的密钥
AWS.config = new AWS.Config({
accessKeyId: data.accessKey,
secretAccessKey: data.secretAccessKey
});
Run Code Online (Sandbox Code Playgroud)
当我执行新任务时,它只使用lambda角色提供的权限,而不是更新的AWS信用.有任何想法吗?
当您更新 AWS.config 时,它会更新 AWS 对象。此后创建的任何 AWS 服务对象(S3、EC2、DynamoDB...)对象都将具有更新后的凭证。它不会更新在更新到 AWS.config之前创建的任何服务对象。
正如 AWS Guru @johnrotenstein 建议的那样,您应该在更新配置后创建服务对象。如果ddb此时已经创建了对象,只需将其重新声明为new DynamoDB({...})
const AWS = require('aws-sdk')
AWS.config = new AWS.Config({
accessKeyId: data.accessKey,
secretAccessKey: data.secretAccessKey
})
let ddb = new AWS.DynamoDB({apiVersion: '2012-10-08'})
Run Code Online (Sandbox Code Playgroud)
另一个可能更简单的解决方案是在服务对象的配置属性上使用 update 方法,如下所示:
const AWS = require('aws-sdk')
let ddb = new AWS.DynamoDB({apiVersion: '2012-10-08'})
ddb.config.update({accessKeyId: '', secretAccessKey: ''})
// ddb will now use the new credentials for future calls
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
491 次 |
| 最近记录: |