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.
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
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 }
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
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
Tetapan persekitaran anda betul tetapi anda salah Perintah menetapkannya.
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 cd ./helloGo/ && go build -o ./ main.go
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
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!