我有一個用 Go 編寫的 lambda,它與 AWS 中的應(yīng)用程序負(fù)載均衡器后面的輕量級 http 應(yīng)用程序通信:package mainimport ( "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) }}我已經(jīng)在 lambda 和 ALB 使用的安全組中的所有端口上開放了全球訪問權(quán)限,并且我可以從我的家用機器上很好地卷曲端點。但是,當(dāng)我嘗試在 Lambda 中運行它時,我在 CloudWatch 日志中得到以下信息:2020-06-04T07:06:31.028-05:00 進(jìn)程在完成請求之前退出2020-06-04T07:06:41.100-05:00 2020/06/04 12:06:41 讀取響應(yīng)時出錯。獲取 http://my-app-12345.us-east-1.elb.amazonaws.com:8080:net/http:在等待連接時取消請求(等待標(biāo)頭時超出 Client.Timeout)2020-06-04T07: 06:41.101-05:00 2020/06/04 12:06:41 退出狀態(tài) 1我很難確定這是 Go 問題還是我在 AWS 中的某些配置有誤。我對 Go 在這里拋出的錯誤一點也不熟悉。
1 回答

蠱毒傳說
TA貢獻(xiàn)1895條經(jīng)驗 獲得超3個贊
你的 lambda 似乎在 VPC 中,因為你寫了它的安全組。如果是這種情況,那么超時的最可能原因是VPC 中的 lambda 沒有互聯(lián)網(wǎng)訪問權(quán)限,也沒有公共 IP,即使它在公共子網(wǎng)中也是如此。
來自文檔:
將函數(shù)連接到公共子網(wǎng)不會為其提供 Internet 訪問權(quán)限或公共 IP 地址。
由于您的 ALB 是公共的(您從家里卷曲它),因此您的 lambda 無法訪問它,即使它們都在同一個子網(wǎng)中。
要糾正此問題,您必須使用正確的路由設(shè)置NAT 網(wǎng)關(guān)或?qū)嵗?/strong>,以便能夠從 VPC 中的 lambda 通信到您的公共 ALB,并將您的 lambda 放置在私有子網(wǎng)中。
- 1 回答
- 0 關(guān)注
- 221 瀏覽
添加回答
舉報
0/150
提交
取消