【问题标题】:Timeout on Lambda function by requesting another function gives a timeout error通过请求另一个函数对 Lambda 函数进行超时会导致超时错误
【发布时间】:2020-08-02 17:49:44
【问题描述】:

我有一个带有用户验证器的 lambda 函数 A,它请求带有 Bearer 令牌的第二个 lambda 函数 B,并希望接收用户信息。

当我将函数 A 的超时时间定义为小于 28 秒时,我收到以下错误:

错误:获取https://dev.url.com/auth/:net/http:请求在等待连接时被取消(Client.Timeout 在等待标头时超出)

我的代码是:

    client := &http.Client{
        Timeout: time.Second * 20,
    }

    req, err := http.NewRequest("GET", m.authURL, nil)
    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("Authorization", "Bearer "+m.token)
    resp, err := client.Do(req)
    if err != nil || resp.StatusCode != http.StatusOK {
        return errors.Errorf("Failed to request auth service.\ntoken: %s\nERROR: %+v\n", m.token, err)
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)

    log.Println(string(body))
    return err

当我将函数 A 的超时时间定义为大于或等于 28 秒时,一切都按预期工作,两个函数都正常工作,整个过程大约需要 7 毫秒 (!!!)。 p>

超时是否可能在执行中具有这样的作用?如果有,为什么?

【问题讨论】:

  • 不应该。您的任何 Lambda 是否都在 VPC 中?此外,请尝试在 Lambda 处理程序函数之外创建请求。
  • 在函数外部请求没有问题。我也怀疑 VPC,因为我配置为从我的 lambda 访问互联网。如何验证 VPC 是否导致问题?

标签: amazon-web-services go aws-lambda aws-api-gateway


【解决方案1】:

对于可能遇到相同问题的人,如上面的 cmets 中所述,我的 lambda 函数位于 VPC 内部。一开始我质疑我的 VPC 配置,但因为有时两个 lambda 之间的执行都成功执行,所以我很早就排除了这个假设。

仍然不明白为什么增加我的 lambda 的超时时间可以使它工作。我没有假设,Suraj 的评论鼓励我重置我的 VPC 配置,而不是根据我的经验进行配置,而是尝试遵循以下link 中的每个细节。在这个过程中,意识到之前我将公共路由表分配给了私有子网。这似乎可以解释问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    相关资源
    最近更新 更多