通过请求另一个函数对 Lambda 函数进行超时会导致超时错误

我有一个带有用户验证器的 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 毫秒(!!!)。


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


qq_花开花谢_0
浏览 115回答 1
1回答

青春有我

正如上面评论中提到的,谁可能会遇到同样的问题,我的 lambda 函数位于 VPC 内部。一开始我质疑我的 VPC 配置,但因为有时两个 lambda 之间的执行都成功执行,所以我很早就排除了这个假设。仍然不明白为什么增加我的 lambda 的超时可以使它工作。我没有假设,Suraj 的评论鼓励我重置我的 VPC 配置,而不是根据我的经验进行配置,而是尝试遵循以下链接中的每个细节。在这个过程中,意识到之前我将公共路由表分配给了私有子网。这似乎解释了这个问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go