与S3甚至与端点通信时,VPC背后的AWS Lambda超时

时间:2019-10-25 16:30:32

标签: node.js amazon-web-services amazon-s3 aws-lambda amazon-vpc

我在VPC后面有一个lambda。当我尝试获取S3对象时,出现“连接ETIMEDOUT”错误。我设置了一个端点,但是仍然有这个问题。

如果删除VPC,便可以获取对象,因此我知道VPC是问题所在,而不是权限。

我已经建立了一个Internet网关来与外界进行通信(并且我已经确认那是可行的)。按照堆栈溢出和这些说明(https://aws.amazon.com/blogs/aws/new-vpc-endpoint-for-amazon-s3/),我创建了一个服务于“ com.amazonaws.us-east-1.s3”的端点,具有“完全访问权”,并将其与我创建的路由表相关联外部访问。

Screenshot of VPC Gateway Endpoint created

VPC,lambda和S3都位于同一区域。 (Lambda和S3是通过SAM创建的。)

最初,我有默认的AWS和S3对象。我试过为这两个区域设置运气不好。

AWS.config.update({ region: 'us-east-1'});
const s3 = new AWS.S3({ region: 'us-east-1' });
const s3FileParams = {
  Bucket: srcBucket,
  Key: srcKey,
};
const resp = await s3.getObject(s3FileParams).promise();

我还尝试将s3端点显式设置为s3 = new AWS.S3({ endpoint: 'https://s3.us-east-1.amazonaws.com' });

请让我知道我可以提供的任何其他信息,并先谢谢您。

2 个答案:

答案 0 :(得分:1)

使用S3网关端点的要求:

  • 确保端点策略允许对S3的适当访问。除Lambda的IAM权限外,这是必需的。
  • 在需要使用网关的任何子网使用的路由表中添加一个条目。
  • 确保Lambda的安全组允许您所在区域中的S3的Internet(0.0.0.0/0)或前缀列表ID(pl-xxxxxxx)的传出HTTPS通信。
  • 您必须在VPC中启用DNS解析。在VPC上启用enableDnsHostnamesenableDnsSupport属性。
  • 被访问的S3存储桶必须与VPC处于同一区域。

答案 1 :(得分:0)

答案是上面Greg列表中的第3项。我切换到了一个新的安全组(暂时),该组允许所有流量流向出站规则中的所有内容,从而解决了我的问题。 (现在,我知道前进的道路,可以尝试更好的出站规则。)

谢谢大家! (对于在其他问题中发表有关VPC端点的原始人员。)