Rumah > pembangunan bahagian belakang > Golang > ralat format exec dalam go aws-lambda dan terraform

ralat format exec dalam go aws-lambda dan terraform

WBOY
Lepaskan: 2024-02-13 19:30:09
ke hadapan
853 orang telah melayarinya

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

Editor PHP Xinyi memperkenalkan anda kepada masalah biasa: "ralat format exec dalam go aws-lambda dan terraform". Apabila mencipta fungsi menggunakan aws-lambda dan terraform, anda mungkin menghadapi masalah dengan ralat format Exec. Ini mungkin disebabkan oleh ralat dalam kod fungsi atau konfigurasi terraform. Artikel ini akan membantu anda memahami dan menyelesaikan masalah ini supaya anda boleh berjaya mencipta dan menjalankan fungsi aws-lambda.

Kandungan soalan

Saya sebenarnya menghadapi masalah yang sangat jarang berlaku apabila memanggil golang lambda menggunakan terraform. Jadi pada asasnya saya menggunakan terraform untuk menggunakan semua sumber saya seperti lambda, gerbang api dengan golang. Masalahnya ialah apabila saya menggunakan fail .zip binari golang lambda ke lambda menggunakan terraform, apabila menyemak permintaan menggunakan laluan, ia mengembalikan ralat format exec. Semua kod terraform bagus dan diformatkan kerana saya menguji fungsi js lambda yang mudah dan ia berfungsi dengan baik. Saya rasa ia adalah isu seni bina binari, tetapi saya menggunakan seni bina binari yang sama seperti lambda yang saya gunakan pada aws. Jika sesiapa boleh membantu, saya juga mengalami masalah yang sama menggunakan Provide.al2 dan mendapat ralat format exec.

Beberapa maklumat penyahpepijatan

1-Struktur direktori

- infra
  -- helloGO
       -- main.go
       -- main // binary file
  -- terraform
       -- main.tf
  -- hello.zip // with main binary file
Salin selepas log masuk

2- sumber fungsi lambda terraform

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
}
Salin selepas log masuk

3-Bina arahan

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
Salin selepas log masuk

Ini akan mencipta fail binaan utama dan membungkusnya sebagai main.zip untuk digunakan oleh fail terraform lambda. (amd64 ialah fail boleh laku bagi x86_64)

Saya cuba menyediakan penyelesaian seperti membina dengan amd64 tetapi tidak mengetahui tentang lambda memanggil go mengatakan binari tidak boleh dilaksanakan dengan boleh laku ini

Penyelesaian

Tetapan persekitaran anda betul tetapi anda salah Perintah menetapkannya.

GOOS=linux GOARCH=amd64 CGO_ENABLED=0 cd ./helloGo/ && go build -o ./ main.go
Salin selepas log masuk

Tingkah laku ini cd 命令设置 GOOS、GOARCH 和 CGO_ENABLED,而不是为 go build ditetapkan.

Cuba ini:

cd ./helloGo/ && GOOS=linux GOARCH=amd64 CGO_ENABLED=0  go build -o ./ main.go
Salin selepas log masuk

Atas ialah kandungan terperinci ralat format exec dalam go aws-lambda dan terraform. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan