php小編新一為您介紹一個常見問題:「go aws-lambda 與 terraform 中的 exec 格式錯誤」。在使用aws-lambda和terraform建立函數時,可能會遇到Exec格式錯誤的問題。這可能是由於函數程式碼或terraform配置的錯誤導致的。本文將幫助您了解並解決此問題,讓您能夠順利建立和執行aws-lambda函數。
我實際上在使用 terraform 呼叫 golang lambda 時遇到了一個非常罕見的問題。所以基本上我使用 terraform 來部署我的所有資源,例如 lambda、帶有 golang 的 api 網關。問題是,當我使用 terraform 將 golang lambda 二進位 .zip 檔案部署到 lambda 時,在使用路由檢查請求時,它會傳回 exec 格式錯誤。 terraform 的所有程式碼都很好且格式化,因為我測試了簡單的 js lambda 函數,它運作得很好。我猜這是二進位架構的問題,但我使用與 aws 上使用的 lambda 相同的二進位架構。如果有人可以提供協助,我也使用與 Provide.al2 相同的問題,並出現 exec 格式錯誤。
一些調試資訊
1-目錄結構
- infra -- helloGO -- main.go -- main // binary file -- terraform -- main.tf -- hello.zip // with main binary file
2- terraform lambda 函數資源
resource "aws_lambda_function" "hello" { function_name = "hello" filename = "../hello.zip" // taking filename from root ./hello.zip runtime = "go1.x" # nodejs16.x go1.x handler = "main" # function.handler role = aws_iam_role.hello_lambda_exec.arn timeout = 3 }
3-建置指令
buildGO: cleanGO GOOS=linux GOARCH=amd64 CGO_ENABLED=0 cd ./helloGo/ && go build -o ./ main.go cd ./helloGo/ && chmod +x main cd ./helloGo/ && zip ../hello.zip main
這將建立建置檔案 main 並將其打包為 main.zip 以便 lambda terraform 檔案使用。 (amd64 是 x86_64 的可執行檔)
我嘗試提供了諸如使用amd64 構建之類的解決方案,但不知道lambda 呼叫go 說二進位檔案無法用此可執行檔執行
您的環境設定是正確的,但您為錯誤的命令設定了它們。
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 cd ./helloGo/ && go build -o ./ main.go
此行為 cd
指令設定 GOOS、GOARCH 和 CGO_ENABLED,而不是為 go build
設定。
試試這個:
cd ./helloGo/ && GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o ./ main.go
以上是go aws-lambda 與 terraform 中的 exec 格式錯誤的詳細內容。更多資訊請關注PHP中文網其他相關文章!