![](/img/trans.png)
[英]How to support transactions in dynamoDB with javascript aws-sdk?
[英]How to use assume role credential in dynamodb (aws-sdk javascript)?
我已经让 aws 在 .aws/credetials 文件中承担角色凭证。 如何使用它来创建 sts 或 dynamodb,例如:
const { DynamoDB } = require('aws-sdk');
const { DocumentClient } = DynamoDB;
const dynamo = new DynamoDB({
endpoint: process.env.AWS_ENDPOINT,
region: process.env.AWS_REGION,
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
secretToken: process.env.aws_security_token
});
我的意思是我的错误是:
root@myubuntu:~/work/contacts_api# node ./seed/runner.js
``
检查“联系人”表是否存在 { UnrecognizedClientException: 请求中包含的安全令牌无效。 在 Request.extractError (/root/work/contacts_api/node_modules/aws-sdk/lib/protocol/json.js:51:27) 在 Request.callListeners (/root/work/contacts_api/node_modules/aws-sdk/lib/ sequence_executor.js:106:20) 在 Request.emit (/root/work/contacts_api/node_modules/aws-sdk/lib/sequential_executor.js:78:10) 在 Request.emit (/root/work/contacts_api/node_modules/ aws-sdk/lib/request.js:683:14) 在 Request.transition (/root/work/contacts_api/node_modules/aws-sdk/lib/request.js:22:10) 在 AcceptorStateMachine.runTo (/root/ work/contacts_api/node_modules/aws-sdk/lib/state_machine.js:14:12) 在 /root/work/contacts_api/node_modules/aws-sdk/lib/state_machine.js:26:10 在请求。 (/root/work/contacts_api/node_modules/aws-sdk/lib/request.js:38:9) 在请求中。 (/root/work/contacts_api/node_modules/aws-sdk/lib/request.js:685:12) 在 Request.callListeners (/root/work/contacts_api/node_modules/aws-sdk/lib/sequential_executor.js:116: 18) 消息:'请求中包含的安全令牌无效。',代码:'UnrecognizedClientException',时间:2019-01-07T05:39:54.907Z,requestId:'A5CFV62P0TGHJH7VDIBSL0JRC3VV4KQNSO6QAEMV4KQNSO6QAEMV4KQNSO6QAEMV4KQNSO6QAEmv4KQNSO6QAEmvable,false重试延迟:5.013458338738063 }
``
如果我想使用 mfa 凭证,我想知道初始凭证的正确方法。
我猜这里的错误应该给你一个线索:
"The security token included in the request is invalid"
您是否尝试打印出环境价值
env | grep aws_security_token
如果为空,则必须在运行代码之前设置值。
另外,我注意到您的其他aws键全部为大写字母,而aws_security_token全部为小写字母。
我怀疑secretToken
不是一回事。 这是如何完成的两个示例(我以前是如何完成的)。
也就是说,我会尽可能鼓励构建和使用Credentials
(第二个示例),但是如果您想内联进行,那也应该可行。
/** assume a role and build a DocumentClient object to make a single scan **/
;(async () => {
const sts = new AWS.STS()
const assumeRole = await sts
.assumeRole({
RoleArn: process.env.ROLE_ARN,
RoleSessionName: process.env.ROLE_SESSION_NAME,
})
.promise()
const dynamodb = new AWS.DynamoDB.DocumentClient({
region: process.env.REGION,
credentials: {
accessKeyId: assumeRole.Credentials?.AccessKeyId,
secretAccessKey: assumeRole.Credentials?.SecretAccessKey,
sessionToken: assumeRole.Credentials?.SessionToken,
},
})
const scan = await dynamodb
.scan({
TableName: process.env.TABLE_NAME,
})
.promise()
console.log(scan)
})()
/**
* assume a role and build a Credentials object and use it
* to build a DocumentClient object to make a single scan
**/
;(async () => {
const sts = new AWS.STS()
const assumeRole = await sts
.assumeRole({
RoleArn: process.env.ROLE_ARN,
RoleSessionName: process.env.ROLE_SESSION_NAME,
})
.promise()
const credentials = new AWS.Credentials({
accessKeyId: assumeRole.Credentials?.AccessKeyId,
secretAccessKey: assumeRole.Credentials?.SecretAccessKey,
sessionToken: assumeRole.Credentials?.SessionToken,
})
const dynamodb = new AWS.DynamoDB.DocumentClient({
region: process.env.REGION,
credentials: credentials,
})
const scan = await dynamodb
.scan({
TableName: process.env.TABLE_NAME,
})
.promise()
console.log(scan)
})()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.