【发布时间】: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