Maison > développement back-end > Golang > 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
Libérer: 2024-02-13 19:30:09
avant
861 Les gens l'ont consulté

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
Copier après la connexion

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
}
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal