首頁  >  文章  >  後端開發  >  go aws-lambda 與 terraform 中的 exec 格式錯誤

go aws-lambda 與 terraform 中的 exec 格式錯誤

WBOY
WBOY轉載
2024-02-13 19:30:09788瀏覽

go aws-lambda 与 terraform 中的 exec 格式错误

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中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除