在NodeJS中使用AWS-SDK(v 2.27.0),我有一个在发电机表中创建新记录的功能,然后将两个文件保存到S3存储桶中的不同文件夹中。发电机和S3都位于eu-west-2。
一般来说,我的功能成功了。然而,大约有十分之一的时间我失败了。无论是dynamo(保存)进程还是S3(putItem)进程都会发生这种情况。
以下是错误的详细信息以及触发它们的代码:
手摇
错误讯息:Error saving: UnrecognizedClientException: No account found for the given parameters
// [...]
let params = {
TableName: 'users',
Item: data, //json object
ReturnValues: 'NONE'
};
dynamo.putItem(params, function(err, res) {
if (err) {
console.log(err);
deferred.reject(err);
}
else {
deferred.resolve(data.data.S); // successful response
}
});
然后我尝试在大约五分钟后再次运行该过程(没有改变任何东西),这次发电机记录保存正确,没有上述错误。但是,我在保存到S3时发现错误。
S3问题
错误讯息:AllAccessDisabled: All access to this object has been disabled
s3.putObject({
Key: 'public/'+id+'.pem',
Body: pair[keyType] //string
}).promise().then(function() {
deferred.resolve();
},
function(err) {
console.log(err);
deferred.reject();
});
我觉得很奇怪它有时候工作,有时候不行,这让我想知道AWS账号是否有问题?通过AWS仪表板浏览我的S3存储桶时,我有时会看到错误“已禁用对此对象的所有访问”。
以下是我初始化AWS / S3 / Dynamo
的方法
AWS.config.update({
region: 'eu-west-2'
});
const s3 = new AWS.S3({params: {Bucket: 'universalapikeys', region: 'eu-west-2'}});
const dynamo = new AWS.DynamoDB({region: 'eu-west-2'});
秘密和密钥来自两个环境变量AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
,并且在我的理解中,aws-sdk会自动使用它。我的IAM用户直接连接了AmazonS3FullAccess和AmazonDynamoDBFullAccess(等等)。