Lambda'ya npm modüllerini .zip
dahil etmek için bir dosya gereklidir . Ve gerçekten de Lambda web düzenleyicisini pek çok şey için kullanmamalısınız - herhangi bir üretim kodunda olduğu gibi, yerel olarak geliştirme, gitme taahhüdü vb.
AKIŞIM:
1) Lambda işlevlerim genellikle daha büyük bir proje için yardımcı araçlar, bu yüzden onları barındırmak için bunun içinde bir / aws / lambdas dizini oluşturuyorum.
2) Her ayrı lambda dizini , işlev kodunu içeren bir index.js dosyası, bağımlılıkları tanımlayan bir package.json dosyası ve / node_modules alt dizini içerir. (Package.json dosyası Lambda tarafından kullanılmaz, sadece npm install
komutu yerel olarak çalıştırabilmemiz içindir .)
package.json:
{
"name": "my_lambda",
"dependencies": {
"svg2png": "^4.1.1"
}
}
3) Tüm node_modules dizinlerini ve .zip dosyalarını .gitignore ediyorum, böylece npm kurulumlarından ve sıkıştırmadan üretilen dosyalar depomuzu karıştırmasın.
.gitignore:
# Ignore node_modules
**/node_modules
# Ignore any zip files
*.zip
4) npm install
Modülleri kurmak ve işlevi yerel olarak geliştirmek / test etmek için dizinin içinden çalıştırıyorum .
5) Lambda dizinini .zip ve konsol aracılığıyla yüklüyorum.
( ÖNEMLİ: Dosyayı sıkıştırmak için Mac'in Finder'daki 'sıkıştırma' yardımcı programını kullanmayın! Zip'i CLI'den dizinin kökünden çalıştırmalısınız - buraya bakın )
zip -r ../yourfilename.zip *
NOT:
Bazı platforma özgü modüller Lambda'nın Linux tabanlı ortamına yerleştirildiğinde başarısız olabileceğinden, düğüm modüllerini yerel olarak Mac'inize yüklerseniz sorunlarla karşılaşabilirsiniz. (Bkz. Https://stackoverflow.com/a/29994851/165673 )
Çözüm, kullandığınız Lambda Node.js çalışma zamanına karşılık gelen AMI'den başlatılan bir EC2 bulut sunucusunda modülleri derlemektir ( Lambda çalışma zamanlarının ve ilgili AMI'lerin listesine bakın ).
Ayrıca Node.js'de AWS Lambda Dağıtım Paketi - AWS Lambda'ya bakın