gpt4 book ai didi

amazon-web-services - client.Timeout 在等待 header 时超出

转载 作者:行者123 更新时间:2023-12-01 22:13:20 25 4
gpt4 key购买 nike

我有一个用 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 使用的安全组中的所有端口上开放了全局访问权限,并且我可以从我的家用机器上很好地 curl 端点。但是,当我尝试在 Lambda 中运行它时,我在 CloudWatch 日志中得到以下信息:

2020-06-04T07:06:31.028-05:00 Process exited before completing request
2020-06-04T07:06:41.100-05:00 2020/06/04 12:06:41 Error reading response. Get http://my-app-12345.us-east-1.elb.amazonaws.com:8080: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
2020-06-04T07:06:41.101-05:00 2020/06/04 12:06:41 exit status 1



我很难确定这是 Go 问题还是我在 AWS 中的某些配置有误。我对 Go 在这里抛出的错误一点也不熟悉。

最佳答案

你的 lambda 似乎在 VPC 中,因为你写了它的 安全组 .如果是这种情况,那么超时的最可能原因是 VPC 中的 lambda 没有互联网访问权限,也没有公共(public) IP ,即使它在公共(public)子网中。

来自 docs :

Connecting a function to a public subnet does not give it internet access or a public IP address.



由于您的 ALB 是公共(public)的(您从家里 curl 它),因此您的 lambda 无法访问它,即使它们都在同一个子网中。

要纠正此问题,您必须设置 NAT 网关或实例 具有正确的路由,以便能够从 VPC 中的 lambda 通信到您的公共(public) ALB,并将您的 lambda 放在 中私有(private)子网 .

关于amazon-web-services - client.Timeout 在等待 header 时超出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62194477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com