Maison  >  Article  >  développement back-end  >  erreur de format d'exécution dans go aws-lambda et terraform

erreur de format d'exécution dans go aws-lambda et terraform

WBOY
WBOYavant
2024-02-13 19:30:09789parcourir

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

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.

Contenu de la question

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

Solution de contournement

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer