AWS Lambda ve DynamoDB Boş Yanıtı
Bir Lambda işlevinden bir DynamoDB tablosuna yazmaya çalışıyorum. Fonksiyonu çalıştırmayı test ettiğimde, hata mesajı olmadan null döndürüyor ve tabloya hiçbir şey yazılmıyor. Fonksiyon aşağıdadır. Bu işlev için 'Ürünler' tablosuna erişime izin veren bir izin politikasıyla zaten bir hizmet rolü oluşturdum. Bazı öğreticilerde bir "AWS Lambda Uygulaması" oluşturduktan sonra Lambda işlevini oluşturduklarını gördüm, ancak bunun benim kullanımım için gerekli olduğunu düşünmedim.
const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
exports.handler = async (event, context, callback) => {
dynamodb.putItem({
TableName: "Products",
Item: {
"sku": {S: "29574839"},
"name": {S: "Test Code"}
}
}, function(err, data) {
if (err) {
console.log(err, err.stack);
return callback(null, {
statusCode: '500',
body: err
});
} else {
return callback(null, {
statusCode: '200',
body: 'Adding to table!'
});
}
});
};
Ayrıca belge istemcisini kullanmayı denedim const docClient = new dynamodb.DocumentClient();ve şu hatayı alıyorum: "dynamodb.DocumentClient bir yapıcı değil".
Burada neyi özlüyorum? Teşekkürler!
CloudWatch günlükleri şunu gösterir (istek kimliğini kaldırdım): İşlev günlükleri: START RequestId: Sürüm: $ LATEST END RequestId: REPORT RequestId: Süre: 491.07 ms Faturalandırma Süresi: 500 ms Bellek Boyutu: 128 MB Kullanılan Maksimum Bellek: 87 MB Başlatma Süresi: 405,37 ms
Yanıtlar
Zaman uyumsuz işleyici kullandığınız için, bence sorun, işleyicinin vücudunun çalışma şansı bulmadan işlevinizin tamamlanmasıdır.
Bunu düzeltmenin bir yolu Promise, AWS belgelerinde gösterildiği gibi kullanmaktır . Örneğin:
const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
exports.handler = async (event, context, callback) => {
const promise = new Promise(function(resolve, reject) {
dynamodb.putItem({
TableName: "Products",
Item: {
"sku": {S: "29574839"},
"name": {S: "Test Code"}
}
}, function(err, data) {
if (err) {
console.log(err, err.stack);
return callback(null, {
statusCode: '500',
body: err
});
} else {
return callback(null, {
statusCode: '200',
body: 'Adding to table!'
});
}
});
})
return promise;
};
Yukarıdaki değişiklikler yalnızca örnek niteliğindedir, bu nedenle muhtemelen bazı ayarlamalara ihtiyaç duyulacaktır.