我有一个在私有子网中运行的NodeJS Lambda函数,允许安全组和NACL中的所有传入/传出策略(不安全,但他们完成工作)。私有子网有一个NAT网关,位于同一个VPC的公有子网中,因此互联网连接正常工作。
我的目标是将消息发送到SQS队列。
Lambda代码是这样的:
const AWS = require('aws-sdk')
const sqs = new AWS.SQS()
exports.handler = (event, context, callback) => {
sqs.sendMessage({
MessageBody: JSON.stringify(event),
QueueUrl: 'https://sqs.eu-west-1.amazonaws.com/000000000000/queue-name'
}, function(err, data) {
console.log(err, data);
return callback(err, data);
});
};
由于某种原因,此功能仅在我放置的每个私有子网中第一次运行。在那之后,它只是超时。
{
"errorMessage": "2017-10-23T17:07:01.675Z 903aaabc-b814-11e7-a727-19816eaa468a Task timed out after 10.00 seconds"
}
这是日志
START RequestId: 903aaabc-b814-11e7-a727-19816eaa468a Version: $LATEST
END RequestId: 903aaabc-b814-11e7-a727-19816eaa468a
REPORT RequestId: 903aaabc-b814-11e7-a727-19816eaa468a Duration: 10002.46 ms Billed Duration: 10000 ms Memory Size: 128 MB Max Memory Used: 32 MB
2017-10-23T17:07:01.675Z 903aaabc-b814-11e7-a727-19816eaa468a Task timed out after 10.00 seconds
如果我运行未附加到VPC的功能,它每次都能正常工作,但我必须在那里添加一些私有资源访问逻辑,所以我无法在VPC之外运行它。
我的感觉是,这与该功能使用的可重用容器(基础设施单元)有关,但我对AWS的一般经验和Lambda的经验太浅,无法弄清楚它是如何影响它的。
我已经尝试过#34;温暖"在sqs
中构建handler
对象的版本,但是没有更好的工作。
有没有人知道我做错了什么?
答案 0 :(得分:0)
这似乎是一个连接问题。
我有3个公共子网和3个私有子网。公共子网通过Internet网关(IGW)将流量路由到0.0.0.0/0
。私有网络通过位于其中一个公共子网的NAT网关将流量路由到0.0.0.0/0
。
问题在于,附加到公共子网的NACL仅允许端口80
,443
和49152-65535
上的入站流量。似乎对SQS服务的请求来自与这些不同的端口。
根据the guide here,我已允许通过端口1024-65535
向公共子网提供入站流量,但它看起来并不安全。