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

ralat format exec dalam go aws-lambda dan terraform

WBOY
WBOYke hadapan
2024-02-13 19:30:09789semak imbas

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

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

Penyelesaian

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam