【发布时间】:2020-09-23 10:17:21
【问题描述】:
我有一个用 Go 编写的 lambda,它与 AWS 中的应用程序负载均衡器后面的轻量级 http 应用程序通信:
package main
import (
"io/ioutil"
"log"
"net/http"
"os"
"time"
)
func main() {
for {
req, err := http.NewRequest("GET", "http://my-app-12345.us-east-1.elb.amazonaws.com:8080", nil)
if err != nil {
log.Fatal("Error reading request. ", err)
}
req.Header.Set("Load-Rate", os.Getenv("LOAD"))
client := &http.Client{Timeout: time.Second * 10}
resp, err := client.Do(req)
if err != nil {
log.Fatal("Error reading response. ", err)
}
if resp.StatusCode == http.StatusOK {
bodyBytes, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
bodyString := string(bodyBytes)
log.Println(bodyString)
}
time.Sleep(time.Duration(10) * time.Millisecond)
}
}
我已经在 lambda 和 ALB 使用的安全组中的所有端口上开放了全球访问权限,并且我可以从我的家用机器上很好地卷曲端点。但是,当我尝试在 Lambda 中运行它时,我在 CloudWatch 日志中得到以下信息:
2020-06-04T07:06:31.028-05:00 进程在完成前退出 请求
2020-06-04T07:06:41.100-05:00 2020/06/04 12:06:41 错误 阅读反应。得到 http://my-app-12345.us-east-1.elb.amazonaws.com:8080: net/http:在等待连接时请求被取消 (等待标头时超出 Client.Timeout)
2020-06-04T07:06:41.101-05:00 2020/06/04 12:06:41 退出状态 1
我很难确定这是 Go 问题还是我在 AWS 中的某些配置有误。我对 Go 在这里抛出的错误一点也不熟悉。
【问题讨论】:
-
正如错误所说,请求超时。我们无法从中猜到太多,除了你给它的时间超过 10 秒,可能是因为它仍然无法连接。
标签: amazon-web-services go aws-lambda