typescript - Σφάλμα ELF Άκυρο Λειτουργία Λαμβάνουσα συμβολοσειρά σύνδεσης


Έχω μια συνάρτηση lambda που συνδέεται με μια απομακρυσμένη βάση MongoDB σε EC2 χρησιμοποιώντας TypeScript. Μπορώ να συνδεθώ στη βάση δεδομένων τοπικά, αλλά όταν βρίσκομαι στο lambda μου δίνει ένα σφάλμα ELF. Μετά την έρευνά μου βλέπω ότι αυτό οφείλεται κυρίως σε ασυμφωνία δυαδικών αρχείων των πακέτων npm κατά τη δημιουργία τους, π.χ. (Linux/Mac/Windows) κλπ.

η σειρά σφαλμάτων στο Stack: ERROR:/var/task/node_modules/snappy/build/Release/binding.node:Invalid ELF Header.

Και όμως είναι μόνο αυτό το πακέτο npm, το mongoose ή το εγγενές πακέτο mongoDB που όταν εγκαθίσταται δίνει αυτό το σφάλμα.

Η EC2 περίπτωση μου τρέχει Ubuntu server, και η Lambda μου είναι σε Node, χρησιμοποιώ το serverless template.yml για να ανεβάσω/πακετάρω τον κώδικα στη Lambda.

τι θα μπορούσε να προκαλεί αυτό το σφάλμα; Είναι το Lambda; ή είναι το λειτουργικό σύστημα του EC2 μου που προκαλεί αυτό το σφάλμα;

Δεν νομίζω ότι το λειτουργικό σύστημα Linux στο ec2 θα προκαλέσει αυτό το πρόβλημα, αφού είναι μόνο ο διακομιστής της βάσης δεδομένων και δεν προκαλεί το πρόβλημα ασυμφωνίας των περιβαλλόντων. (διόρθωσέ με αν κάνω λάθος).

Η συμβολοσειρά σύνδεσής μου και ο κώδικάς μου είναι οι εξής.

import mongoose from 'mongoose';

mongoose.connect('mongodb://IPADDRESS:<PORT>/DB');

Το πακέτο npm είναι:

"mongoose": "^5.12.12",

Αν αφαιρέσω τη συμβολοσειρά σύνδεσης/τα πακέτα του Mongo, λειτουργεί. Αυτό το σφάλμα εμφανίζεται τόσο με τα πακέτα mongodb native όσο και με τα mongoose. Μόλις τα αφαιρέσω, το σφάλμα εξαφανίζεται και όλα λειτουργούν σωστά.

Ποιος είναι ο σωστός τρόπος για να εντοπίσω/λύσω αυτό το πρόβλημα. Υποθέτω ότι πολλοί άνθρωποι χρησιμοποιούν το mongoose με το lambda, οπότε δεν είμαι σίγουρος τι προκαλεί αυτό το σφάλμα.

Απάντηση #1

Δοκιμάστε να προσθέσετε αυτές τις επιλογές packagerOptions στο template.yml:

custom:
  webpack:
    includeModules: true
    packagerOptions:
      scripts:
        - npm_config_platform=linux npm_config_arch=x64 yarn add snappy