node.js - AWS Lambda - 未调用 PutItem Dynamo DB 回调
问题描述
exports.handler = function(event, context) {
var AWS = require('aws-sdk');
var dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
var kafka = require('kafka-node');
var Consumer = kafka.Consumer,
// The client specifies the ip of the Kafka producer and uses
// the zookeeper port 2181
client = new kafka.KafkaClient({kafkaHost: '172.16.35.115:9092,172.16.35.217:9092,172.16.37.14:9092'});
// The consumer object specifies the client and topic(s) it subscribes to
consumer = new Consumer( client, [ { topic: 'BillKazTopic', partition: 0, fromOffset: 'latest'} ], { autoCommit: true });
consumer.on('message', function (message) {
console.log("hellow");
console.log(message);
// Add to Dynamo
var tableName = "dev-AM-Appointment";
console.log(JSON.stringify(event, null, ' '));
dynamodb.putItem({
"TableName": tableName,
"Item" : {
"appointment_id": {S: 'message=' + message.value}
}
}, function(err, data) {
console.log("HELLO WORLD!!!!");
if (err) {
console.log('Error putting item into dynamodb failed: '+err);
context.succeed('error');
}
else {
console.log('great success: '+JSON.stringify(data, null, ' '));
context.succeed('Done');
}
});
});
};
我正在尝试听 Kafka 并使用消息(作品)。
但是 putItem() 的回调永远不会被调用,所以语句:console.log("HELLO WORLD!!!!");
从不显示。可能是什么问题呢?
解决方案
您对 DynamoDB 的请求超时,因为您在 VPC 中运行 Lambda 函数,但您没有提供 NAT 网关或VPC 端点以允许 Lambda 函数访问存在于您的 VPC 之外的 DynamoDB。
我建议将 VPC Endpoint 配置到 DynamoDB。
推荐阅读
- javascript - How to manage sessions in a small React WebApp?
- python - A python function that finds a number's largest divisor excluding itself
- php - 为什么我的 form_validation 不起作用?错误:未正确填写字段表单
- java - Intellij 终端的行为不同于 Ubuntu 终端的 pulseaudio/pacmd/pactrl 命令
- reactjs - how can fix refresh problem in react router
- c# - How to remove issue link from issue links (Atlassian Jira) with Atlassian C# SDK
- gradle - gradle recipe/archetype/generators for multi-modules kotlin nodejs backend and reactjs frontend
- c - 有人可以告诉我为什么它打印 1 而不是 2?
- mysql - 具有引用多个表的外键
- python - 取消订阅的条纹不适用于 Django