Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services API网关&x2B;λ+;VPC超时问题_Amazon Web Services_Aws Lambda_Aws Api Gateway_Amazon Vpc - Fatal编程技术网

Amazon web services API网关&x2B;λ+;VPC超时问题

Amazon web services API网关&x2B;λ+;VPC超时问题,amazon-web-services,aws-lambda,aws-api-gateway,amazon-vpc,Amazon Web Services,Aws Lambda,Aws Api Gateway,Amazon Vpc,早上好,您能帮我们解决下一个问题吗: 我有一个API网关+Java Lambda处理程序。这个Lambda使用httpconnection来获取一些Internet restapi 当我们在没有VPC的情况下使用这个Lambda时,它工作得很好。但是,当我们使用配置了internet访问的VPC时,有时Lambda会因超时错误而失败。在所有请求中,有20%的请求失败(80%的请求可以正常工作),在日志中出现下一个错误 REPORT RequestId: 16214561-b09a-11e6-a7

早上好,您能帮我们解决下一个问题吗: 我有一个API网关+Java Lambda处理程序。这个Lambda使用httpconnection来获取一些Internet restapi

当我们在没有VPC的情况下使用这个Lambda时,它工作得很好。但是,当我们使用配置了internet访问的VPC时,有时Lambda会因超时错误而失败。在所有请求中,有20%的请求失败(80%的请求可以正常工作),在日志中出现下一个错误

REPORT RequestId: 16214561-b09a-11e6-a762-7546f12e61bd Duration: 15000.26 ms Billed Duration: 15000 ms Memory Size: 512 MB Max Memory Used: 47 MB

09:57:49
2016-11-22T09:57:49.245Z 16214561-b09a-11e6-a762-7546f12e61bd Task timed out after 15.00 seconds
根据我的日志,lambda无法发送GET请求。我不确定问题出在哪里。这是Lambda问题、专有网络问题还是某些配置问题。 我也尝试了许多不同的RESTAPI端点,所以这肯定不是端点问题


感谢您的帮助。

从您的日志中,

  • 计费持续时间:15000毫秒
  • 内存大小:512 MB
  • 使用的最大内存:47 MB
解决方案: 这是超时问题如有必要,您需要将执行时间从15秒增加到30秒或更长

在某些情况下,还需要增加内存大小。它也可能产生效果。但我认为时间是你的主要事实,而不是内存大小



对于计时问题和测试问题,您可以进行以下操作:

问:AWS Lambda函数可以执行多长时间? Soluiton:对AWS Lambda的所有调用必须在300秒内完成执行。默认超时为3秒,但您可以将超时设置为1到300秒之间的任何值

要确定Lambda函数未按预期工作的原因,请执行以下操作: 您可以像在任何其他Node.js函数中一样在本地测试代码,也可以使用控制台的测试调用功能在Lambda控制台中测试代码,或者使用AWS CLI invoke命令。每次执行代码以响应事件时,它都会将一个日志条目写入与Lambda函数相关联的日志组,即/aws/Lambda/

如果您在日志中看到超时超过错误,请更改您的超时设置 超过函数代码的运行时间。这可能是因为 超时时间太低,或者代码执行时间太长

解决方案: 使用不同的内存设置测试代码

如果代码执行时间过长,可能是因为它没有足够的计算资源来执行其逻辑。尝试增加分配给函数的内存,并使用Lambda控制台的测试调用功能再次测试代码。您可以在函数日志条目中看到所使用的内存、代码执行时间和分配的内存。更改内存设置可以更改持续时间的收费方式。有关定价的信息,请参阅

资源链接:

  • 对于测试,这里给出了完整的代码示例:

    当您将Lambda函数放置在VPC内时,它将无法访问VPC外的任何内容。要使Lambda功能能够访问VPC之外的资源,您必须向VPC添加NAT网关。

    问题已经解决

    Lambda VPC配置已连接公共子网


    多亏了@Michael sqlbot,几个月前我遇到了几乎相同的问题,下面是我的解决方案:

    假设您手动设置Lambda,则在
    配置
    ->
    高级设置
    中,您将找到
    专有网络
    ,然后选择
    子网
    安全组

    所选的
    子网
    应与lambda函数调用的其他服务位于同一子网中。在您的情况下,您的lambda服务使用httpconnection到internetrestapi,这很好,但是您可能需要与RDS的DB连接,或者由SQS或SNS触发。因此,请确保子网是正确的


    安全组
    更为重要。同样,在您的情况下,您需要访问Internet,因此请确保安全组的
    出站规则
    具有外部连接。通常,为了简单起见,我会提供所有端口和所有目的地,当然,您可以限制使用端口80和所需的API的IP地址。

    这将是一个很好的答案,但我担心这并不能真正解决这个问题中可能出现的问题。如果他们得到超时,可能仅仅是因为他们遇到了一个由Lambda函数本身启动的出站连接(无论是什么)的情况,由于VPC特有的错误配置而从未成功,因为OP说它在部署非VPC时工作。我相信你应该重新考虑你是否在解决问题的关键。但是,没有理由相信内存问题的存在……我认为,只选择私有子网(具有到NAT盒的defaut路由)来分配Lambda函数,因为Lambda ENIs即使在公共子网上也不会被分配公共IP。@Michael sqlbot非常感谢,你说得对,这就是问题所在,我也有类似的问题。并且配置了NAT网关的专用子网,即使如此,仍然无法访问Internet。有什么帮助吗?@Kostanos该专用子网中的EC2实例是否可以访问Internet?您的路由表设置可能不正确。我建议在这里问一个新问题,而不是在这个问题上加标签。谢谢@mark-b我已经解决了。我的问题是我在私有子网内创建了NAT网关,而我应该在公共子网内创建NAT网关。