L'éditeur PHP Xinyi vous présente un problème courant : "erreur de format d'exécution dans go aws-lambda et terraform". Lors de la création de fonctions à l'aide d'aws-lambda et de terraform, vous pouvez rencontrer des problèmes avec des erreurs de format Exec. Cela peut être dû à des erreurs dans le code de fonction ou dans la configuration de Terraform. Cet article vous aidera à comprendre et à résoudre ce problème afin que vous puissiez créer et exécuter avec succès des fonctions aws-lambda.
J'ai en fait rencontré un problème très rare lors de l'appel de golang lambda à l'aide de terraform. Donc, fondamentalement, j'utilise Terraform pour déployer toutes mes ressources comme lambda, la passerelle API avec Golang. Le problème est que lorsque je déploie le fichier binaire .zip golang lambda sur lambda à l'aide de terraform, lors de la vérification de la demande à l'aide de routes, il renvoie une erreur de format d'exécution. Tout le code pour Terraform est agréable et formaté car j'ai testé la simple fonction lambda js et cela fonctionne bien. Je suppose que c'est un problème d'architecture binaire, mais j'utilise la même architecture binaire que le lambda que j'utilise sur AWS. Si quelqu'un peut m'aider, j'ai également eu le même problème avec Provide.al2 et j'ai obtenu une erreur de format d'exécution.
Quelques informations de débogage
1-Structure du répertoire
- infra -- helloGO -- main.go -- main // binary file -- terraform -- main.tf -- hello.zip // with main binary file
2- Ressource de la fonction 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-Commande de construction
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
Cela créera le fichier de construction main et le conditionnera sous le nom main.zip pour une utilisation par le fichier terraform lambda. (amd64 est le fichier exécutable de x86_64)
J'ai essayé de fournir des solutions comme la construction avec amd64 mais ne connaissant pas l'appel lambda, go dit que le binaire ne peut pas être exécuté avec cet exécutable
Vos paramètres d'environnement sont corrects mais vous vous trompez La commande les définit.
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 cd ./helloGo/ && go build -o ./ main.go
Ce comportement cd
命令设置 GOOS、GOARCH 和 CGO_ENABLED,而不是为 go build
est défini.
Essayez ceci :
cd ./helloGo/ && GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o ./ main.go
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!