.zip
ไฟล์เป็นสิ่งจำเป็นเพื่อที่จะรวมNPMโมดูลในแลมบ์ดา และคุณไม่ควรใช้โปรแกรมแก้ไขเว็บของแลมบ์ดาสำหรับเรื่องใด ๆ - เช่นเดียวกับรหัสการผลิตใด ๆ คุณควรจะพัฒนาในพื้นที่รับผิดชอบต่อคอมไพล์ ฯลฯ
ไหลของฉัน:
1) ฟังก์ชั่นแลมบ์ดาของฉันมักเป็นตัวช่วยสาธารณูปโภคสำหรับโครงการขนาดใหญ่ดังนั้นฉันจึงสร้าง a / aws / lambdasไดเรกทอรีภายในนั้นเพื่อใช้ในบ้าน
2) แต่ละไดเรกทอรี lambda มีไฟล์index.jsที่มีรหัสฟังก์ชันไฟล์package.json ที่กำหนดการขึ้นต่อกันและไดเรกทอรีย่อย/ node_modules (ไฟล์ package.json ไม่ได้ใช้โดยแลมบ์ดามันเป็นเพียงเพื่อให้เราสามารถเรียกใช้npm install
คำสั่งในเครื่องได้)
package.json:
{
"name": "my_lambda",
"dependencies": {
"svg2png": "^4.1.1"
}
}
3) ฉัน. gignignore ไดเรกทอรี node_modules ทั้งหมดและไฟล์. zip เพื่อให้ไฟล์ที่สร้างขึ้นจากการติดตั้งและการบีบอัดไฟล์ npm จะไม่เกะกะ repo ของเรา
.gitignore:
# Ignore node_modules
**/node_modules
# Ignore any zip files
*.zip
4) ฉันเรียกใช้npm install
จากภายในไดเรกทอรีเพื่อติดตั้งโมดูลและพัฒนา / ทดสอบฟังก์ชั่นในเครื่อง
5) ฉัน. zip ไดเรกทอรี lambda และอัพโหลดผ่านคอนโซล
( สำคัญ:อย่าใช้ยูทิลิตี้ 'บีบอัด' ของ Mac จาก Finder เพื่อบีบอัดไฟล์คุณต้องเรียกใช้ zip จาก CLI จากภายในรากของไดเรกทอรี - ดูที่นี่ )
zip -r ../yourfilename.zip *
บันทึก:
คุณอาจพบปัญหาหากคุณติดตั้งโมดูลโหนดแบบโลคัลบน Mac ของคุณเนื่องจากบางโมดูลเฉพาะแพลตฟอร์มอาจล้มเหลวเมื่อปรับใช้กับสภาพแวดล้อมที่ใช้ระบบปฏิบัติการบน Linux ของ Lambda (ดูhttps://stackoverflow.com/a/29994851/165673 )
การแก้ปัญหาคือการรวบรวมโมดูลบนอินสแตนซ์ EC2 จากการเปิดตัว AMI ที่สอดคล้องกับแลมบ์ดา Node.js รันไทม์คุณกำลังใช้ (ดูรายชื่อนี้runtimes แลมบ์ดาและ AMIS ของตน )
ดูAWS Lambda Deployment Package ใน Node.js - AWS Lambda