AWS Lambda - คู่มือฉบับย่อ
AWS Lambdaเป็นบริการที่ดำเนินการคอมพิวเตอร์แบบไร้เซิร์ฟเวอร์ซึ่งเกี่ยวข้องกับการประมวลผลโดยไม่มีเซิร์ฟเวอร์ใด ๆ รหัสจะดำเนินการตามการตอบสนองของเหตุการณ์ในบริการของ AWS เช่นการเพิ่ม / ลบไฟล์ในบัคเก็ต S3 การอัปเดตตาราง Amazon ไดนาโม dB คำขอ HTTP จากเกตเวย์ Amazon API เป็นต้น
เพื่อทำงานร่วมกับ AWS Lambdaเราต้องพุชโค้ดในบริการ AWS Lambda งานและทรัพยากรอื่น ๆ ทั้งหมดเช่นโครงสร้างพื้นฐานระบบปฏิบัติการการบำรุงรักษาเซิร์ฟเวอร์การตรวจสอบรหัสบันทึกและความปลอดภัยจะได้รับการดูแลโดย AWS
AWS Lambdaรองรับภาษาเช่น Java, NodeJS, Python, C # และ Go โปรดทราบว่า AWS Lambda จะใช้งานได้กับบริการของ AWS เท่านั้น
AWS Lambda คืออะไร
คำจำกัดความของ AWS Lambda ตามเอกสารอย่างเป็นทางการมีดังต่อไปนี้ -
AWS Lambda เป็นบริการประมวลผลที่ช่วยให้คุณสามารถรันโค้ดได้โดยไม่ต้องจัดเตรียมหรือจัดการเซิร์ฟเวอร์ AWS Lambda จะรันโค้ดของคุณเมื่อจำเป็นเท่านั้นและปรับขนาดโดยอัตโนมัติจากคำขอไม่กี่ครั้งต่อวันไปจนถึงหลายพันต่อวินาที คุณจ่ายเฉพาะเวลาประมวลผลที่คุณใช้เท่านั้น - ไม่มีค่าใช้จ่ายเมื่อรหัสของคุณไม่ทำงาน
AWS Lambda ทำงานอย่างไร
แผนภาพบล็อกที่อธิบายการทำงานของ AWS Lambda ในห้าขั้นตอนง่ายๆดังแสดงด้านล่าง -
Step 1 − อัปโหลดโค้ด AWS lambda ในภาษาใดก็ได้ที่ AWS lambda รองรับนั่นคือ NodeJS, Java, Python, C # และ Go
Step 2 − นี่เป็นบริการ AWS เพียงไม่กี่บริการที่สามารถเรียกใช้ AWS lambda ได้
Step 3 −AWS Lambda ซึ่งมีรหัสอัปโหลดและรายละเอียดเหตุการณ์ที่ทริกเกอร์เกิดขึ้น ตัวอย่างเช่นเหตุการณ์จาก Amazon S3, Amazon API Gateway, Dynamo dB, Amazon SNS, Amazon Kinesis, CloudFront, Amazon SES, CloudTrail, แอปมือถือเป็นต้น
Step 4 − เรียกใช้ AWS Lambda Code เฉพาะเมื่อถูกเรียกใช้โดยบริการ AWS ภายใต้สถานการณ์เช่น -
- ผู้ใช้อัปโหลดไฟล์ในถัง S3
- http get / post endpoint URL ถูกตี
- ข้อมูลถูกเพิ่ม / อัปเดต / ลบในตารางไดนาโม dB
- ผลักดันการแจ้งเตือน
- การรวบรวมสตรีมข้อมูล
- การโฮสต์เว็บไซต์
- การส่งอีเมล
- แอพมือถือ ฯลฯ
Step 5 − โปรดจำไว้ว่า AWS จะเรียกเก็บเงินเฉพาะเมื่อรหัส AWS lambda ดำเนินการเท่านั้นไม่ใช่อย่างอื่น
ข้อดีของการใช้ AWS Lambda
AWS Lambda มอบสิทธิประโยชน์มากมายเมื่อคุณใช้งาน ส่วนนี้จะกล่าวถึงรายละเอียด -
ใช้งานง่ายกับรหัส
AWS Lambda มอบโครงสร้างพื้นฐานในการอัปโหลดโค้ดของคุณ ดูแลรักษารหัสและเรียกใช้รหัสเมื่อใดก็ตามที่เหตุการณ์ที่ต้องการเกิดขึ้น ช่วยให้คุณสามารถเลือกหน่วยความจำและระยะหมดเวลาที่จำเป็นสำหรับรหัส
AWS Lambda ยังสามารถดำเนินการตามคำขอแบบขนานตามเหตุการณ์ที่เรียก
การจัดสรรบันทึก
AWS Lambda ให้รายละเอียดจำนวนครั้งที่มีการเรียกใช้โค้ดและเวลาที่ใช้ในการดำเนินการหน่วยความจำที่ใช้ไปเป็นต้น AWS CloudWatch รวบรวมบันทึกทั้งหมดซึ่งช่วยในการทำความเข้าใจขั้นตอนการดำเนินการและในการดีบักโค้ด
การเรียกเก็บเงินตามการใช้งาน
การเรียกเก็บเงิน AWS Lambda ดำเนินการตามการใช้หน่วยความจำคำขอที่ทำและการดำเนินการซึ่งจะเรียกเก็บเงินทีละขั้นต่ำ 100ms ดังนั้นสำหรับการดำเนินการ 500ms การเรียกเก็บเงินจะเกิดขึ้นทุก ๆ 100ms หากคุณระบุรหัส AWS lambda ของคุณที่จะดำเนินการใน 500ms และเวลาที่ใช้ในการดำเนินการเพียง 200ms AWS จะเรียกเก็บเงินจากคุณเฉพาะช่วงเวลาที่ดำเนินการนั่นคือการดำเนินการ 200ms แทนที่จะเป็น 500ms AWS จะเรียกเก็บเงินตามเวลาดำเนินการที่ใช้เสมอ คุณไม่จำเป็นต้องจ่ายเงินหากไม่ได้ดำเนินการฟังก์ชัน
รองรับหลายภาษา
AWS Lambda รองรับภาษายอดนิยมเช่น Node js, Python, Java, C # และ Go ภาษาเหล่านี้เป็นภาษาที่ใช้กันอย่างแพร่หลายและนักพัฒนาทุกคนจะพบว่าการเขียนโค้ดสำหรับ AWS Lambda เป็นเรื่องง่าย
ง่ายต่อการสร้างและปรับใช้โค้ด
มีตัวเลือกมากมายสำหรับ Lambda สำหรับการสร้างและปรับใช้โค้ด สำหรับการเขียนโค้ดของคุณคุณสามารถใช้ AWS online editor, Visual Studio IDE หรือ Eclipse IDE นอกจากนี้ยังรองรับเฟรมเวิร์กแบบไร้เซิร์ฟเวอร์ซึ่งทำให้การเขียนและปรับใช้โค้ด AWS Lambda เป็นเรื่องง่าย นอกจากคอนโซล AWS แล้วเรายังมี AWS-cli สำหรับสร้างและปรับใช้โค้ด
คุณสมบัติอื่น ๆ
คุณสามารถใช้ AWS Lambda ได้ฟรีโดยการเข้าสู่ระบบ AWS free tier ให้บริการฟรี 1 ปี ดูบริการฟรีที่นำเสนอโดย AWS free tier
ข้อเสียของการใช้ AWS Lambda
แม้จะมีข้อดีมากมาย AWS Lambda ก็มีข้อเสียดังต่อไปนี้ -
ไม่เหมาะสำหรับโครงการขนาดเล็ก
คุณต้องวิเคราะห์รหัสของคุณอย่างรอบคอบและตัดสินใจว่าหน่วยความจำและระยะหมดเวลา ในกรณีที่ฟังก์ชันของคุณต้องการเวลามากกว่าที่ได้รับการจัดสรรฟังก์ชันนั้นจะถูกยกเลิกตามระยะหมดเวลาที่ระบุไว้และโค้ดจะไม่ทำงานอย่างสมบูรณ์
เนื่องจาก AWS Lambda ใช้ AWS สำหรับโครงสร้างพื้นฐานอย่างสมบูรณ์คุณจึงไม่สามารถติดตั้งซอฟต์แวร์เพิ่มเติมใด ๆ ได้หากรหัสของคุณต้องการ
เหตุการณ์ที่ทริกเกอร์ AWS Lambda
เหตุการณ์สามารถทริกเกอร์ AWS Lambda มีดังนี้ -
- เข้าสู่วัตถุ S3
- การแทรกการอัพเดตและการลบข้อมูลในตาราง Dynamo DB
- ผลักดันการแจ้งเตือนจาก SNS
- GET / POST เรียก API Gateway
- การแก้ไขส่วนหัวที่ผู้ดูหรือคำขอต้นทาง / การตอบกลับใน CloudFront
- รายการบันทึกในสตรีมข้อมูล AWS Kinesis
- บันทึกประวัติใน CloudTrail
ใช้กรณีของ AWS Lambda
AWS Lambda เป็นบริการประมวลผลที่ส่วนใหญ่ใช้เพื่อเรียกใช้กระบวนการเบื้องหลัง สามารถทริกเกอร์ได้เมื่อใช้กับบริการ AWS อื่น ๆ รายชื่อบริการของ AWS ที่เราสามารถใช้ AWS Lambda ได้รับด้านล่าง -
S3 Object และ AWS Lambda
Amazon S3 ส่งรายละเอียดกิจกรรมไปยัง AWS Lambda เมื่อมีการอัปโหลดไฟล์ใด ๆ ใน S3 รายละเอียดของการอัปโหลดไฟล์หรือการลบไฟล์หรือการย้ายไฟล์จะถูกส่งผ่านไปยัง AWS Lambda รหัสใน AWS Lambda สามารถทำตามขั้นตอนที่จำเป็นเมื่อได้รับรายละเอียดกิจกรรม ตัวอย่างการสร้างภาพขนาดย่อของภาพที่แทรกลงใน S3
DynamoDB และ AWS Lambda
DynamoDB สามารถทริกเกอร์ AWS Lambda เมื่อมีการเพิ่มอัปเดตและลบข้อมูลในตาราง เหตุการณ์ AWS Lambda มีรายละเอียดทั้งหมดของตาราง AWS DynamoDB เกี่ยวกับการแทรก / อัปเดตหรือลบ
API Gateway และ AWS Lambda
API Gateway สามารถทริกเกอร์ AWS Lambda บนเมธอด GET / POST เราสามารถสร้างฟอร์มและแชร์รายละเอียดกับปลายทาง API เกตเวย์และใช้กับ AWS Lambda สำหรับการประมวลผลเพิ่มเติมตัวอย่างเช่นการป้อนข้อมูลในตาราง DynamoDB
SNS และ AWS Lambda
SNS ใช้สำหรับการแจ้งเตือนแบบพุชการส่ง SMS เป็นต้นเราสามารถเรียกใช้ AWS lambda ได้เมื่อมีการแจ้งเตือนแบบพุชเกิดขึ้นใน SNS นอกจากนี้เรายังสามารถส่ง SMS ไปยังหมายเลขโทรศัพท์จาก AWS Lambda เมื่อได้รับทริกเกอร์
กิจกรรมตามกำหนดการและ AWS Lambda
กิจกรรมตามกำหนดการสามารถใช้สำหรับงาน cron สามารถทริกเกอร์ AWS Lambda ให้ทำงานตามรูปแบบเวลาปกติได้
CloudTrail และ AWS Lambda
CloudTrail มีประโยชน์ในการตรวจสอบบันทึกในบัญชี เราสามารถใช้ AWS Lambda เพื่อประมวลผลบันทึก CloudTrail เพิ่มเติมได้
Kinesis และ AWS Lambda
Kinesis ใช้เพื่อบันทึก / จัดเก็บข้อมูลการติดตามแบบเรียลไทม์ที่มาจากการคลิกเว็บไซต์บันทึกฟีดโซเชียลมีเดียและทริกเกอร์ไปยัง AWS Lambda สามารถประมวลผลเพิ่มเติมในบันทึกนี้ได้
CloudFront และ Lambda @ Edge
CloudFront เป็นเครือข่ายการจัดส่งเนื้อหาที่คุณสามารถโฮสต์เว็บไซต์ของคุณและ Lambda @ Edge สามารถใช้เพื่อประมวลผลส่วนหัวที่มาจากคำขอของผู้ดูคำขอต้นทางการตอบกลับต้นทางและการตอบสนองของผู้ดู การแก้ไขส่วนหัวรวมถึงงานต่างๆเช่นการแก้ไขข้อมูลคุกกี้การเขียน URL ใหม่ใช้สำหรับการทดสอบ AB เพื่อเปลี่ยนการตอบกลับที่ส่งไปยังผู้ใช้กลับการเพิ่มข้อมูลส่วนหัวเพิ่มเติมเพื่อความปลอดภัยเป็นต้น
ก่อนที่คุณจะเริ่มทำงานกับ AWS Lambda คุณต้องเข้าสู่ระบบด้วยคอนโซล Amazon AWS Lambda รองรับสอง IDE:Visual studio และ Eclipse. ในบทนี้เราจะพูดถึงรายละเอียดเกี่ยวกับการติดตั้ง AWS Lambda แบบทีละขั้น
สร้างการเข้าสู่ระบบใน AWS Console
คุณสามารถสร้างการเข้าสู่ระบบของคุณใน AWS Console ได้ฟรีโดยใช้ Amazon free tier คุณสามารถทำตามขั้นตอนต่อไปนี้เพื่อสร้างการเข้าสู่ระบบกับ amazon เพื่อใช้บริการของ Amazon -
ขั้นตอนที่ 1
ไปที่ https://aws.amazon.com/free/และคลิกที่สร้างบัญชีฟรี คุณสามารถดูภาพหน้าจอตามที่ระบุด้านล่าง -
ขั้นตอนที่ 2
คลิกที่ Create a Free Account และคุณจะถูกเปลี่ยนเส้นทางไปยังหน้าจอดังที่แสดงด้านล่าง -
ตอนนี้กรอกรายละเอียดของที่อยู่อีเมลรหัสผ่านและชื่อบัญชี AWS ตามที่คุณเลือกในแบบฟอร์มด้านบนนี้แล้วคลิก Continue.
ขั้นตอนที่ 3
ตอนนี้คุณสามารถค้นหาหน้าจอดังที่แสดงด้านล่าง -
ป้อนรายละเอียดที่จำเป็นทั้งหมดในแบบฟอร์มนี้
โปรดทราบว่ามีค่าใช้จ่ายขั้นต่ำที่ต้องชำระตามประเทศที่เลือก จะได้รับเงินคืนเมื่อตรวจสอบรายละเอียดที่ป้อนแล้ว คุณต้องมีรายละเอียดบัตรเครดิตหรือบัตรเดบิตเพื่อสร้างบัญชีฟรี สำหรับผู้ใช้ชาวอินเดียRs 2/- จะถูกหักออกและสำหรับสหรัฐอเมริกา $1 จะถูกเรียกเก็บเงินและจะคืนเงินให้กับผู้ใช้บัตรที่เกี่ยวข้องเมื่อผู้ใช้ตรวจสอบแล้ว
โปรดทราบว่าบัญชีนี้ไม่มีค่าใช้จ่ายและมีการ จำกัด การใช้บริการ หากการใช้งานเกินขีด จำกัด ผู้ใช้จะถูกเรียกเก็บเงิน
เมื่อกรอกรายละเอียดในแบบฟอร์มด้านบนแล้วให้คลิก Create Account and Continue.
คุณจะถูกเปลี่ยนเส้นทางไปยังหน้าจอถัดไปดังที่แสดงด้านล่าง
ขั้นตอนที่ 4
คุณต้องป้อนรายละเอียดการชำระเงินนั่นคือบัตรเครดิตหรือบัตรเดบิตพร้อมกับวันหมดอายุและชื่อผู้ถือบัตรตามที่แสดงด้านล่าง -
ขั้นตอนที่ 5
เมื่อกรอกรายละเอียดทั้งหมดแล้วให้คลิก Secure Submit และจะตรวจสอบความถูกต้องของบัตรกับธนาคารและจะให้ OTPบนมือถือของคุณซึ่งเชื่อมโยงกับการ์ด คุณสามารถค้นหาหน้าต่างดังที่แสดงด้านล่าง -
ตอนนี้ให้ป้อนไฟล์ OTP รายละเอียดและคลิก Make Payment. คุณจะถูกเรียกเก็บเงินตามประเทศที่เลือก
ขั้นตอนที่ 6
เมื่อชำระเงินเสร็จแล้วขั้นตอนต่อไปคือการยืนยันทางโทรศัพท์ คุณต้องป้อนหมายเลขโทรศัพท์ของคุณตามที่แสดงด้านล่าง -
เมื่อกรอกรายละเอียดแล้วให้คลิก Call Me Now. AWS จะโทรทันทีโดยใช้ระบบอัตโนมัติ เมื่อได้รับแจ้งเมื่อมีสายให้ป้อนหมายเลข 4 หลักที่จะปรากฏบนไซต์ AWS ของคุณไปยังโทรศัพท์ของคุณโดยใช้ปุ่มกดโทรศัพท์ของคุณ การดำเนินการนี้จะตรวจสอบหมายเลขของคุณและคุณจะได้รับการเปิดใช้งานอีเมลในรหัสอีเมลที่ระบุไว้ตอนเริ่มต้นในขณะที่สร้างการเข้าสู่ระบบ
ขั้นตอนที่ 7
คลิกลิงก์อีเมลและป้อนชื่อบัญชีหรือรหัสอีเมลและรหัสผ่านและเข้าสู่ระบบเพื่อให้คุณเข้าสู่บริการของ AWS ดังที่แสดงด้านล่าง -
ชื่อบัญชีจะแสดงที่มุมขวาบนตามที่แสดงด้านบน ตอนนี้คุณสามารถเริ่มใช้บริการ AWS Lambda ได้แล้ว สำหรับบริการ AWS Lambda ภาษาที่รองรับ ได้แก่ NodeJS, Python, Java, C # และ Go
การติดตั้ง Visual Studio 2017
มี 2 IDE ที่เข้ากันได้กับ AWS: Visual Studio และ Eclipse. ในส่วนนี้เราจะพูดถึงการติดตั้ง Visual studio 2017 บน Windows, Linux Mac ไปที่เว็บไซต์อย่างเป็นทางการของ Visual Studio:https://www.visualstudio.com/downloads/. คุณจะพบหน้าจอต้อนรับดังภาพ -
ดาวน์โหลดเวอร์ชันชุมชนเช่น Visual Studio Community 2017เนื่องจากตอนนี้ฟรีสำหรับการฝึกฝน เมื่อติดตั้งแล้วจะเรียกใช้คุณผ่านขั้นตอนการติดตั้งซึ่งคุณต้องเลือกแพ็คเกจที่จะใช้ในภายหลัง คุณสามารถเลือก nodejs, python, c# แพคเกจเพื่อให้เราทำงานในภายหลัง
AWS Toolkit Support สำหรับ Visual Studio 2017
เมื่อคุณติดตั้ง Visual Studio 2017 แล้วคุณจะต้องทำตามขั้นตอนที่กำหนดเพื่อติดตั้งการสนับสนุน AWS Toolkit สำหรับ Visual Studio 2017 -
ขั้นตอนที่ 1
ไปที่ https://aws.amazon.com/visualstudio/ และดาวน์โหลดชุดเครื่องมือ AWS สำหรับ Visual Studio การแสดงผลดังแสดงด้านล่าง -
โปรดทราบว่าแพคเกจที่ดาวน์โหลดสำหรับ Visual Studio 2017 คือ vsixแพ็คเกจ หากเวอร์ชัน Visual Studio ของคุณอยู่ระหว่างปี 2556-2558 จะติดตั้งไฟล์msiตัวติดตั้ง คลิกDownload ตามที่แสดงด้านล่าง
ขั้นตอนที่ 2
ตอนนี้ดับเบิลคลิกที่แพ็คเกจ vsix ที่ดาวน์โหลดมาและจะเรียกใช้คุณผ่านขั้นตอนการติดตั้งดังที่แสดงด้านล่าง -
เมื่อติดตั้ง Visual Studio สำเร็จคุณจะเห็นหน้าต่างดังที่แสดงด้านล่าง -
ขั้นตอนที่ 3
ตอนนี้เปิด Visual Studio 2017 และคุณจะเห็นหน้าต้อนรับจาก AWS ดังที่แสดงด้านล่าง -
โปรดทราบว่าคุณต้องเพิ่มคีย์การเข้าถึงคีย์ลับหมายเลขบัญชีเพื่อเริ่มต้นและใช้บริการ AWS จาก visual studio.s
AWS Lambda BoilerPlate สำหรับ NodeJS
คุณสามารถใช้กับไฟล์ visual studio code ดังแสดงด้านล่าง
ขั้นตอนที่ 1
คุณสามารถดาวน์โหลด Visual studio code ได้ฟรีจากเว็บไซต์ทางการ:https://www.visualstudio.com/downloads/. โฮมเพจของการดาวน์โหลด Visual Studio มีลักษณะดังนี้ -
ขั้นตอนที่ 2
ตอนนี้เปิดโค้ด Visual Studio ดังที่แสดงด้านล่าง -
ขั้นตอนที่ 3
ในการติดตั้งการสนับสนุนสำหรับ AWS support for nodejsตัวเลือกสามารถใช้ได้ภายในส่วนขยาย คุณสามารถค้นหา AWS และจะแสดงตัวเลือกดังนี้ -
ขั้นตอนที่ 4
ตอนนี้ติดตั้งสำเร็จรูปสำหรับ AWS Lambda ใน nodejs ตามที่แสดง -
ขั้นตอนที่ 5
คลิกที่เก็บข้อมูลและโคลนใน Visual Studio เพื่อเริ่มเขียนฟังก์ชัน Lambda ใน Visual Studio มันเปลี่ยนเส้นทางคุณไปยังที่เก็บนี้ซึ่งเราสามารถโคลนใน Visual Studio:https://github.com/loganarnett/vscode-lambda-snippets. ตอนนี้เปิดจานคำสั่งจากView ตัวเลือกใน Visual Studio
ขั้นตอนที่ 6
คลิกที่มันและเลือก git clone ตามที่แสดงด้านล่าง -
ขั้นตอนที่ 7
ป้อน URL ที่เก็บและบันทึกตามที่คุณเลือกในเครื่อง สร้างindex.js ไฟล์ดังที่แสดงด้านล่างเพื่อทำงานกับฟังก์ชันแลมบ์ดา -
การติดตั้ง Eclipse IDE
ตอนนี้คุณจะต้องติดตั้ง eclipse Java EE IDE ล่าสุด คุณสามารถดาวน์โหลดได้จากเว็บไซต์ทางการของ Eclipse:https://www.eclipse.org/downloads/
AWS Toolkit รองรับ Eclipse IDE
เมื่อติดตั้ง Eclipse แล้วให้ทำตามขั้นตอนต่อไปนี้ -
ขั้นตอนที่ 1
เข้าไปช่วยเหลือจากเมนูแล้วคลิก Install New Software.
ขั้นตอนที่ 2
ป้อน https://aws.amazon.com/eclipse ในกล่องข้อความที่มีข้อความ Work with ที่ด้านบนของกล่องโต้ตอบ
ขั้นตอนที่ 3
ตอนนี้เลือกที่จำเป็น AWS Core Management Tools และรายการเสริมอื่น ๆ จากรายการที่แสดงด้านล่าง
ขั้นตอนที่ 4
ตอนนี้คลิก Next. Eclipse จะแนะนำคุณตลอดขั้นตอนการติดตั้งที่เหลือตามที่ระบุในขั้นตอนเพิ่มเติมที่ระบุด้านล่าง
ขั้นตอนที่ 5
โมดูลหลักของ AWS จะแสดงในตารางด้านล่างดังที่แสดงในภาพหน้าจอด้านล่าง -
ขั้นตอนที่ 6
เมื่อติดตั้งเครื่องมือ AWS จะพร้อมใช้งานใน Eclipse ดังที่แสดงด้านล่าง -
ขั้นตอนที่ 7
คุณจะเห็นหน้าจอต่อไปนี้เมื่อคุณคลิกที่บริการของ Amazon
ตอนนี้คลิกที่ AWS Explorer เพื่อดูบริการที่มี เราจะพูดถึงวิธีการทำงานกับ IDE ที่ติดตั้งไว้ในบทต่อ ๆ ไป
AWS Lambda เป็นบริการที่ดูแลการคำนวณโค้ดของคุณโดยไม่ต้องมีเซิร์ฟเวอร์ใด ๆ กล่าวกันว่าเป็นการประมวลผลแบบไร้เซิร์ฟเวอร์ รหัสจะดำเนินการตามการตอบสนองของเหตุการณ์ในบริการของ AWS เช่นการเพิ่ม / ลบไฟล์ในที่เก็บข้อมูล S3 การอัปเดตตาราง Amazon DynamoDB คำขอ HTTP จากเกตเวย์ Amazon Api เป็นต้น
โค้ด AWS Lambda สามารถเขียนใน NodeJS, Java, C #, Python และ Go บทนี้จะพูดถึงรายละเอียดเกี่ยวกับการสร้างฟังก์ชัน AWS Lambda ในคอนโซล AWS
AWS Console
เข้าสู่ระบบ AWS Console ที่ลิงค์ https://aws.amazon.com/console. เมื่อคุณเข้าสู่ระบบแล้วระบบจะนำคุณไปยังหน้าจอที่แสดงบริการของ AWS
ตัวอย่าง: การสร้างฟังก์ชัน
ให้เราเข้าใจการทำงานของ AWS Console ด้วยความช่วยเหลือของตัวอย่าง คลิกที่ Lambda (ทำเครื่องหมายไว้ด้านบน) ระบบจะเปลี่ยนเส้นทางเพื่อสร้างฟังก์ชันดังที่แสดงด้านล่าง -
คลิก Create function ปุ่มและหน้าจอจะแสดงรายละเอียดดังต่อไปนี้ -
โปรดทราบว่าโดยค่าเริ่มต้นตัวเลือกคือ Author from scratch. ตัวเลือกนี้ช่วยให้คุณสามารถเขียนโค้ด Lambda ตั้งแต่เริ่มต้น มันจะมีฟังก์ชันง่ายๆด้วยhello world ข้อความ.
ตัวเลือกที่สอง Blue prints มีรายละเอียดดังต่อไปนี้
ให้รายละเอียดของโค้ดที่เขียนไว้แล้วสำหรับบริการ aws ในภาษาที่มีให้กับ AWS Lambda ในกรณีที่คุณต้องเขียนโค้ด AWS Lambda สำหรับบริการใด ๆ ที่คุณสามารถเช็คอินได้blue prints และเริ่มต้น
ตัวเลือกที่สาม Serverless Application Repository มีการตั้งค่าแอปพลิเคชันแบบไร้เซิร์ฟเวอร์ซึ่งจะช่วยในการปรับใช้โค้ด AWS Lambda
ในการอภิปรายเพิ่มเติมเราจะดำเนินการกับตัวเลือกแรกที่เราสร้างฟังก์ชัน AWS lambda โดยใช้ Author from scratch.
ก่อนที่เราจะสร้างฟังก์ชัน Lambda จะต้องมีบทบาทเช่นสิทธิ์ในการทำงานกับบริการของ AWS และ aws lambda ในภายหลังต้องกำหนดบทบาทให้กับฟังก์ชัน aws lambda
การสร้างบทบาทใน AWS Console
สำหรับการสร้างบทบาทใน AWS Console ให้ไปที่บริการคอนโซล AWS แล้วคลิกที่ IAM ดังที่แสดงด้านล่าง -
ตอนนี้ถ้าคุณคลิก IAMคุณจะเห็นหน้าจอดังที่แสดงด้านล่าง -
หากคุณเลือก Rolesคุณจะเห็นปุ่มต่อไปนี้บนหน้าจอ -
ตอนนี้คลิก Create role. ระบบจะขอให้คุณเลือกบริการที่คุณต้องใช้บทบาทที่สร้างขึ้น
เนื่องจากเราจำเป็นต้องใช้บทบาทนี้กับ AWS Lambda ให้เลือก Lambda แล้วคลิก Next:Permissionsตามที่แสดงด้านบน หน้าจอถัดไปจะแสดงชื่อนโยบายซึ่งพร้อมใช้งานตามบริการของ AWS คุณสามารถเลือกนโยบายได้จากที่นี่ -
ตัวอย่างเช่นหากคุณต้องการอนุญาตให้ AWS Lambda ทำงานกับ S3 และ DynamoDB คุณต้องเลือกนโยบาย ในช่องค้นหาป้อนบริการ AWS แล้วคลิกที่ช่องทำเครื่องหมาย คุณสามารถเลือกหลายนโยบายและคลิกในภายหลังNext:Review.
นอกจากนี้ยังสามารถสร้างนโยบายของคุณเองได้ ตัวอย่างเช่นมีตาราง dynamodb และคุณต้องให้สิทธิ์เฉพาะกับตารางนั้นในกรณีเช่นนี้คุณสามารถสร้างนโยบายได้
คลิกที่ Create policyตามที่แสดงในหน้าจอด้านบน ต่อไปนี้เป็นรายละเอียดที่แสดงบนหน้าจอ
เลือก Serviceซึ่งคุณกำลังสร้างนโยบาย หลังจากนั้นจะแสดงข้อมูลสำหรับการดำเนินการresources และ Request conditions.
ตอนนี้เราควรเลือกใช้บริการ ให้เราเลือกAWS Dynamodb จากการค้นหา Actions มีรายละเอียดดังต่อไปนี้ -
ตอนนี้ให้ป้อนไฟล์ Access levelคุณต้องการมอบให้กับ DynamoDB จากนั้นresources จะแสดงรายละเอียดดังต่อไปนี้ -
ตอนนี้เลือกประเภททรัพยากรตาราง คุณสามารถดูผลลัพธ์ต่อไปนี้ -
สำหรับการอนุญาตบนโต๊ะคุณต้อง Add ARN. ARN คือรายละเอียดเฉพาะของตารางที่สร้างใน AWS DynamoDB คุณจะได้รับรายละเอียดเมื่อสร้างตารางใน dynamodb
หากคุณคลิก Add ARN และจะแสดงรายละเอียดดังต่อไปนี้ -
ตอนนี้ถ้าคุณป้อนไฟล์ ARN และ Region, Account และ Tableชื่อจะได้รับการเติมข้อมูล คุณควรคลิกAddปุ่มเพื่อเพิ่มนโยบาย ในทำนองเดียวกันคุณสามารถสร้างนโยบายสำหรับบริการอื่น ๆ
ที่นี่เราได้เลือกสองนโยบาย AmazonS3FullAccess และ AmazonDynamoDBFullACcess. เราได้ให้สิทธิ์เข้าถึง S3 และ DynamoDB อย่างสมบูรณ์ในบทบาทนั้น อย่างไรก็ตามขอแนะนำให้คุณอนุญาตเฉพาะที่เก็บข้อมูลและตารางที่จำเป็นเท่านั้น
คุณสามารถทำตามขั้นตอนที่กล่าวไว้ก่อนหน้านี้เพื่อสร้างนโยบายโดยใช้ ARN.
ขั้นตอนที่ 1
คลิก Create roleปุ่มเพื่อสร้างบทบาท บทบาททั้งหมดที่สร้างขึ้นจะแสดงดังรูป -
ขั้นตอนที่ 2
โปรดทราบว่าคุณสามารถเลือกบทบาทที่คุณต้องการได้ในกรณีที่คุณต้องการการแก้ไขใด ๆ สำหรับบทบาทที่สร้างขึ้น ถ้าเราเลือกAuthor from scratch optionคุณต้องป้อน Name, Runtime and Role.
ขั้นตอนที่ 3
คุณสามารถสังเกตรายละเอียดต่อไปนี้ใน Runtime ดรอปดาวน์ -
ขั้นตอนที่ 4
คุณสามารถเลือกรันไทม์ที่คุณต้องการและดำเนินการตามที่แสดง
Role ดรอปดาวน์มีตัวเลือกดังต่อไปนี้ -
Choose an existing role − สิ่งนี้จะแสดงบทบาททั้งหมดที่สร้างขึ้นในบทบาท IAM
Create new role from template(s) −สิ่งนี้จะช่วยให้คุณสามารถสร้างบทบาทและจะแสดงสิทธิ์ที่จะถูกเลือกสำหรับบทบาทนั้น สังเกตภาพหน้าจอเพื่อความเข้าใจที่ดีขึ้น
Create a custom role − สิ่งนี้ช่วยให้ผู้ใช้สามารถสร้างนโยบายตามที่เรากล่าวไว้ก่อนหน้านี้
ขั้นตอนที่ 5
เลือกไฟล์ runtime, roleและเพิ่มฟังก์ชัน คลิกที่Create functionปุ่มเพื่อสร้างฟังก์ชันแลมบ์ดา หน้าจอถัดไปจะปรากฏดังนี้ -
ส่วนต่างๆของฟังก์ชัน AWS Lambda
มีสองส่วนสำหรับฟังก์ชัน AWS Lambda:Configuration และ Monitoring. ให้เราคุยกันโดยละเอียด
การกำหนดค่า
ฟังก์ชันต่อไปนี้รวมอยู่ในการกำหนดค่า
Add Triggers
ทริกเกอร์ที่จำเป็นในการเพิ่มลงในฟังก์ชัน AWS Lambda จะแสดงดังนี้ -
โปรดทราบว่าเมื่อเราเลือกทริกเกอร์เราจำเป็นต้องเพิ่มรายละเอียดการกำหนดค่าสำหรับทริกเกอร์นั้น ตัวอย่างเช่นสำหรับทริกเกอร์ S3 เราต้องเลือกชื่อที่เก็บข้อมูล สำหรับ Dynamodb trigger เราต้องเลือกชื่อตาราง
ตัวอย่าง
ให้เราดูตัวอย่างรายละเอียดการกำหนดค่าสำหรับทริกเกอร์ S3 -
ตอนนี้เพิ่มรายละเอียดการกำหนดค่าสำหรับทริกเกอร์ S3 เพิ่ม -
ที่นี่คุณต้องเลือกไฟล์ bucket name, event type ที่คุณต้องการเรียกใช้ Lambda คำนำหน้าและรูปแบบตัวกรองถ้ามีและ Add ทริกเกอร์
การเพิ่มรหัสใน Lambda
ตอนนี้เราควรมุ่งเน้นไปที่โค้ดแลมบ์ดาที่จะเขียน ในการเพิ่มโค้ดใน aws lambda มีสามตัวเลือก -
- ใช้ตัวแก้ไขแบบอินไลน์
- ใช้ไฟล์. zip
- อัปโหลดไฟล์จาก Amazon S3
มันแสดงในภาพหน้าจอด้านล่าง -
ให้เราคุยรายละเอียดแต่ละเรื่อง
Using the inline editor
โปรแกรมแก้ไขโค้ดอินไลน์ที่คุณสามารถเขียนโค้ดได้มีดังนี้ -
คุณสามารถเขียนโค้ดของคุณได้โดยเลือกภาษาที่คุณต้องการ คุณสามารถเลือกรันไทม์ได้อีกครั้งที่นี่
สังเกตภาพหน้าจอต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ต้องเขียนโค้ด index.js.Handler. รายละเอียดจะแตกต่างกันไปตามรันไทม์ สำหรับnodejs, มันคือ filename.export function ซึ่งตอนนี้ index.lambda handler.
Upload a .ZIP file
ก่อนอื่นคุณสามารถเขียนรหัสบีบอัดและอัปโหลดไฟล์ zip ได้โดยเลือก Upload a .ZIP file.
Upload a file from Amazon S3
คุณสามารถอัปโหลดไฟล์ในถัง S3 และเลือกตัวเลือก Upload a file from Amazon S3.
โปรดทราบว่าสำหรับ .ZIP และ S3 จะไม่สามารถเปลี่ยนรันไทม์ได้
ตัวแปรสภาพแวดล้อม
พวกเขาใช้คู่ค่าคีย์และแชร์ด้วยรหัส AWS Lambda เราสามารถใช้ตัวแปรสภาพแวดล้อมใน AWS Lambda เพื่อจัดเก็บรายละเอียดการเชื่อมต่อฐานข้อมูลรายละเอียดไฟล์เพื่อจัดเก็บผลลัพธ์รายละเอียดไฟล์บันทึกเป็นต้น
แท็ก
เป็นคู่คีย์ - ค่าที่เพิ่มให้กับ AWS Lambda เพื่อการจัดระเบียบฟังก์ชันที่ดีขึ้นเมื่อใช้ในภูมิภาคต่างๆ สำหรับกรณีการใช้งานที่เรียบง่ายไม่จำเป็นต้องใช้ เมื่อมีการสร้างฟังก์ชัน Lambda จำนวนมากการติดแท็กจะช่วยในการกรองและจัดการฟังก์ชัน Lambda
บทบาทการดำเนินการ
คุณสามารถเปลี่ยนบทบาทได้อีกครั้งที่นี่หากทำไม่ถูกต้องตั้งแต่เริ่มสร้างฟังก์ชัน Lambda คุณสามารถอัปเดตหรือสร้างบทบาทใหม่ได้ที่นี่ มีตัวเลือกเดียวกับที่แสดงเมื่อเริ่มสร้างฟังก์ชัน Lambda
การตั้งค่าพื้นฐาน
ที่นี่คุณต้องป้อนคำอธิบายสั้น ๆ ว่าฟังก์ชัน Lambda ของคุณกำลังทำอะไรอยู่ เลือกหน่วยความจำและระยะหมดเวลาที่จำเป็นสำหรับฟังก์ชัน Lambda
เครือข่าย
สิ่งนี้ช่วยให้คุณสามารถเลือก VPC ซึ่งจะช่วยให้คุณเข้าถึงฟังก์ชัน Lambda จาก VPC โดยค่าเริ่มต้นจะไม่มีการเลือก VPC
การแก้ไขข้อบกพร่องและการจัดการข้อผิดพลาด
สำหรับการแก้ไขข้อบกพร่องและการจัดการข้อผิดพลาดคุณสามารถเลือกบริการ AWS เพื่อส่งรายละเอียด ตัวเลือกที่มีคือNone, SNS และ SQS.
ภาวะพร้อมกัน
สิ่งนี้ช่วยให้คุณสามารถจัดสรรขีด จำกัด เฉพาะของการดำเนินการพร้อมกันที่อนุญาตสำหรับฟังก์ชันนี้
การตรวจสอบและการปฏิบัติตามข้อกำหนด
ประกอบด้วยบันทึกที่จัดการด้วยความช่วยเหลือของ AWS CloudTrail
เมื่อเสร็จแล้วคุณต้องบันทึกการเปลี่ยนแปลงโดยใช้ปุ่มบันทึกดังที่แสดงไว้ที่นี่ -
ตอนนี้ถ้าคุณคลิก Testมันจะถามเหตุการณ์ทดสอบ คุณสามารถผ่านเหตุการณ์ทดสอบตัวอย่างได้ดังนี้ -
เหตุการณ์ทดสอบที่สร้างขึ้นดังที่แสดงไว้ที่นี่ -
ตอนนี้บันทึกเหตุการณ์ทดสอบแล้วคลิกปุ่มทดสอบเพื่อดูการทำงานของฟังก์ชัน AWS Lambda -
รหัสสำหรับ index.js มีดังนี้ -
exports.lambdahandler = (event, context, callback) => {
// TODO implement
console.log(event.key1);
console.log(event.key2);
console.log(event.key3);
callback(null, 'Lambda test');
};
โปรดทราบว่าฟังก์ชันการโทรกลับถูกเรียกใช้เมื่อมีข้อผิดพลาดหรือสำเร็จ หากประสบความสำเร็จคุณจะเห็นLambda test จะปรากฏขึ้น
การตรวจสอบ
เลือกแท็บการตรวจสอบเพื่อดูรายละเอียดการดำเนินการของฟังก์ชัน Lambda กราฟแสดงรายละเอียดของเวลาดำเนินการข้อผิดพลาดที่เกิดขึ้นเป็นต้น
คุณยังสามารถดูบันทึกใน Cloudwatch สำหรับสิ่งนี้ไปที่บริการของ AWS และเลือก cloudwatch ตามที่แสดง -
ตอนนี้เลือกบันทึกจากด้านซ้ายและป้อนชื่อฟังก์ชันของคุณในตัวกรอง -
ฟังก์ชัน AWS Lambda รันโค้ดเมื่อมีการเรียกใช้ บทนี้กล่าวถึงขั้นตอนเหล่านี้ทั้งหมดที่เกี่ยวข้องกับวงจรชีวิตของฟังก์ชัน AWS Lambda โดยละเอียด
ขั้นตอนในการสร้างฟังก์ชัน Lambda
วงจรชีวิตของฟังก์ชัน Lambda ประกอบด้วยขั้นตอนที่จำเป็นสี่ขั้นตอน -
- Authoring
- Deploying
- Monitoring
- Troubleshooting
การเขียนรหัสแลมด้า
โค้ดฟังก์ชัน AWS Lambda สามารถเขียนได้ในภาษาต่อไปนี้ -
- NodeJS
- Java,
- Python
- C#
- Go.
เราสามารถเขียนโค้ดสำหรับ AWS Lambda โดยใช้คอนโซล AWS, AWS CLI จาก Eclipse IDE จาก Visual Studio IDE, เซิร์ฟเวอร์เฟรมเวิร์กเป็นต้น
ตารางต่อไปนี้แสดงรายการภาษาและเครื่องมือต่างๆและ IDE ที่สามารถใช้เขียนฟังก์ชัน Lambda -
ภาษา | IDE สำหรับการเขียนโค้ดแลมบ์ดา |
---|---|
NodeJS | AWS Lambda Console Visual Studio IDE |
Java | Eclipse IDE |
Python | AWS Lambda Console |
ค# | Visual Studio IDE .NET แกน |
ไป | AWS Lambda Console |
การปรับใช้ Lambda Code
เมื่อคุณเลือกภาษาที่คุณต้องการเขียนฟังก์ชัน Lambda แล้วมีสองวิธีในการปรับใช้โค้ด -
- เขียนโค้ดในคอนโซล AWS โดยตรง
- Zip หรือ jar ไฟล์ด้วยไฟล์และการอ้างอิงทั้งหมด
อย่างไรก็ตามโปรดจำไว้ว่าต้องให้สิทธิ์ที่เหมาะสมกับไฟล์ zip
การทดสอบรหัสแลมด้า
Lambda Code สามารถทดสอบได้สำหรับเหตุการณ์ภายในคอนโซล AWS Lambda นอกจากนี้ยังสามารถทดสอบฟังก์ชัน Lambda จาก AWS cli และ cli แบบไร้เซิร์ฟเวอร์ได้อีกด้วย คอนโซล AWS ยังมีข้อมูลเหตุการณ์ซึ่งสามารถใช้เป็นเหตุการณ์ตัวอย่างขณะทดสอบฟังก์ชัน AWS Lambda
การตรวจสอบฟังก์ชัน Lambda
การตรวจสอบฟังก์ชัน Lambda สามารถทำได้โดยใช้ AWS CloudWatch เราสามารถเพิ่มข้อความบันทึกที่จำเป็นในภาษาที่เราเลือกและเห็นเหมือนกันใน AWS CloudWatch
ในการเริ่มเขียนฟังก์ชัน Lambda มีรูปแบบที่ต้องปฏิบัติตาม ต่อไปนี้เป็นแนวคิดหลักที่ต้องปฏิบัติตามสำหรับการเขียนฟังก์ชันแลมด้า -
ตัวจัดการ
Handler คือชื่อของฟังก์ชัน AWS lambda จากจุดที่การเรียกใช้งานเริ่มต้น ปรากฏในคอนโซล AWS ดังที่แสดงด้านล่าง -
โปรดสังเกตว่าที่นี่เราได้เปลี่ยนตัวจัดการเริ่มต้นเป็นชื่ออื่นและอัปเดตเหมือนกันในตัวจัดการ -
โปรดทราบว่าวิธีการเรียกตัวจัดการแตกต่างจากภาษาที่เลือกเป็นรันไทม์
Params ส่งผ่านไปยังตัวจัดการ
หากคุณสังเกตฟังก์ชันตัวจัดการพารามิเตอร์ที่ส่งผ่านคือ event, context และ call back function ดังแสดงด้านล่าง -
Event พารามิเตอร์มีรายละเอียดทั้งหมดสำหรับทริกเกอร์ที่ใช้
Contextโดยทั่วไปแล้วพารามิเตอร์จะดูแลรายละเอียดรันไทม์เพื่อให้ฟังก์ชัน Lambda ดำเนินการ เราสามารถโต้ตอบกับฟังก์ชัน Lambda โดยใช้ไฟล์contextพารามิเตอร์ มีรายละเอียดเช่นเวลาที่เหลือก่อนที่ AWS Lambda จะยุติฟังก์ชันเช่นหมดเวลาที่ระบุขณะสร้างฟังก์ชัน Lambda ชื่อของฟังก์ชัน Lambda ชื่อกลุ่ม cloudwatch รายละเอียด arn เป็นต้น
ตัวอย่าง
ให้เราเข้าใจรายละเอียดที่ได้รับจากออบเจ็กต์บริบท AWS Lambda ด้วยความช่วยเหลือของตัวอย่าง -
exports.lambdahandler = (event, context, callback) => {
// TODO implement
console.log("context object details");
console.log(JSON.stringify(context));
callback(null, 'Lambda test');
};
เมื่อคุณเรียกใช้ฟังก์ชัน Lambda ที่แสดงด้านบนคุณจะเห็นผลลัพธ์ต่อไปนี้ -
เอาต์พุต
context มีรายละเอียดดังนี้ -
{
"callbackWaitsForEmptyEventLoop":true,"logGroupName":"/aws/lambda/myfirstlambdafunction",
"logStreamName":"2018/05/20/[$LATEST]04f17ee4ff7048d5bb1fedffaa807c71","functionName":
"myfirstlambdafunction","memoryLimitInMB":"128","functionVersion":"$LATEST","invokeid":
"c931e21c-5bf3-11e8-acfe-47fdbb39eee9","awsRequestId":"c931e21c-5bf3-11e8-acfe-47fdbb39eee9",
"invokedFunctionArn":"arn:aws:lambda:us-east-1:625297745038:function:myfirstlambdafunction"
}
สังเกตว่ามีรายละเอียดเช่น functionName, memorylimit, requestId เป็นต้น
การบันทึก
บันทึกที่เพิ่มภายในฟังก์ชัน Lambda จะแสดงใน AWS CloudWatch เมื่อฟังก์ชัน AWS ดำเนินการ ไวยากรณ์ของบันทึกจะแตกต่างกันไปตามภาษาที่เลือก ตัวอย่างเช่นในnodejsมันคือ console.log
นี่คือผลลัพธ์ที่คุณเห็นใน AWSCloudWatch -
การจัดการข้อผิดพลาด
ฟังก์ชัน AWS Lambda มีฟังก์ชันการโทรกลับซึ่งใช้เพื่อแจ้งให้ฟังก์ชัน Lambda ทราบว่าเกิดข้อผิดพลาดหรือความสำเร็จ โปรดทราบว่าที่นี่เราใช้ nodejs เป็นรันไทม์ การจัดการข้อผิดพลาดจะแตกต่างกันไปตามภาษาที่เลือก
ปฏิบัติตามตัวอย่างที่ให้ไว้ที่นี่เพื่อความเข้าใจที่ดีขึ้น -
exports.lambdahandler = (event, context, callback) => {
// TODO implement
var error = new Error("There is error in code");
callback(error);
};
เอาต์พุต
เมื่อคุณทดสอบโค้ดแลมบ์ดาคุณจะพบผลลัพธ์ดังที่แสดงด้านล่าง -
รายละเอียดบันทึกดังต่อไปนี้ -
Nodejs เป็นหนึ่งในภาษาที่รองรับฟังก์ชัน AWS Lambda เวอร์ชันที่รองรับกับ nodejs คือ v6.10 และ v8.10 ในบทนี้เราจะเรียนรู้เกี่ยวกับฟังก์ชันต่างๆของฟังก์ชัน AWS Lambda ใน NODEJS โดยละเอียด
ตัวจัดการใน NodeJS
ในการเขียนฟังก์ชันAWS Lambda ใน nodejs อันดับแรกเราควรประกาศตัวจัดการก่อน ตัวจัดการใน nodejs คือชื่อของไฟล์และชื่อของฟังก์ชันการส่งออก ตัวอย่างเช่นชื่อของไฟล์คือindex.js และชื่อฟังก์ชันการส่งออกคือ lambda handlerดังนั้นตัวจัดการที่สอดคล้องกันคือ index.lambdahandler
สังเกตตัวจัดการตัวอย่างที่แสดงที่นี่ -
exports.lambdahandler = function(event, context, callback) { //code goes here}
Params ถึง Handler
Handler เป็นแกนหลักในการสร้างฟังก์ชัน Lambda ตัวจัดการใช้เวลาสามพารามิเตอร์:event, context และ callback.
พารามิเตอร์เหตุการณ์
มีรายละเอียดทั้งหมดของเหตุการณ์ที่ทริกเกอร์ ตัวอย่างเช่นหากเราใช้ฟังก์ชัน Lambda เพื่อเรียกใช้บน S3 เหตุการณ์จะมีรายละเอียดของวัตถุ S3
พารามิเตอร์บริบท
มีรายละเอียดของบริบทเช่นคุณสมบัติและรายละเอียดการกำหนดค่าของฟังก์ชัน Lambda
ฟังก์ชันโทรกลับ
ช่วยในการให้รายละเอียดกลับไปยังผู้โทร โครงสร้างของการโทรกลับมีลักษณะดังนี้ -
callback(error, result);
พารามิเตอร์ของฟังก์ชันการโทรกลับได้อธิบายไว้ด้านล่าง -
Error −สิ่งนี้จะมีรายละเอียดหากมีข้อผิดพลาดเกิดขึ้นระหว่างการเรียกใช้ฟังก์ชัน Lambda ถ้าฟังก์ชัน Lambda สำเร็จnull สามารถส่งผ่านเป็นพารามิเตอร์แรกสำหรับฟังก์ชันเรียกกลับ
Result −สิ่งนี้จะให้รายละเอียดของการทำงานของฟังก์ชันแลมด้าที่ประสบความสำเร็จ หากเกิดข้อผิดพลาดพารามิเตอร์ผลลัพธ์จะถูกละเว้น
Note −ไม่บังคับให้ใช้ฟังก์ชันเรียกกลับใน AWS Lambda ในกรณีที่ไม่มีฟังก์ชันเรียกกลับตัวจัดการจะคืนค่าเป็นโมฆะ
ลายเซ็นโทรกลับที่ถูกต้องมีให้ด้านล่าง -
callback(); // It will return success, but no indication to the caller
callback(null); // It will return success, but no indication to the caller
callback(null, "success"); // It will return the success indication to the caller
callback(error); // It will return the error indication to the caller
เมื่อใดก็ตามที่ AWS Lambda ดำเนินการรายละเอียดการเรียกกลับเช่นข้อผิดพลาดหรือความสำเร็จจะถูกบันทึกใน AWS CloudWatch พร้อมกับข้อความคอนโซลหากมี
การทำงานกับ AWS Lambda ใน Nodejs8.10
ให้เราเข้าใจวิธีการทำงานกับ AWS Lambda ใน nodejs8.10 และเรียกใช้ฟังก์ชันในลักษณะซิงค์และไม่ซิงค์
เรียกใช้ฟังก์ชัน Lambda ด้วยวิธี Sync
ตัวอย่างต่อไปนี้ให้แนวคิดเกี่ยวกับการเรียกใช้ฟังก์ชัน Lambda ด้วยวิธีการซิงค์ -
exports.handler = function(event, context, callback) {
let arrItems = [4,5,6,8,9,10,35,70,80,31];
function countevennumbers (items) {
return new Promise(resolve => {
setTimeout(() => {
let a = 0;
for (var i in items) {
if (items[i] % 2 == 0) {
a++;
}
}
resolve(a);
},2000);
});
}
let evennumber = countevennumbers(arrItems);
callback(null,'even numbers equals ='+evennumber);
};
คุณสามารถสังเกตผลลัพธ์ต่อไปนี้หลังจากทดสอบโค้ดนี้ในคอนโซล AWS -
โปรดทราบว่าผลลัพธ์จากโค้ดด้านบนเป็นวัตถุสัญญา ไม่ให้การนับเนื่องจากจำนวนจะเพิ่มขึ้นภายใน setTimeout และการเรียกใช้ฟังก์ชันไม่รอการดำเนินการภายใน setTimeout และส่งคืนวัตถุสัญญา
ถ้าเรามี async/await บนฟังก์ชันตัวจัดการจะได้รับผลลัพธ์ที่แน่นอนจากฟังก์ชันแลมบ์ดา
การเรียกใช้ Handler ด้วยวิธี Async
ตัวอย่างต่อไปนี้ให้แนวคิดเกี่ยวกับการเรียกใช้ฟังก์ชัน Lambda ด้วยวิธี async -
exports.handler = async function(event, context, callback) {
let arrItems = [4,5,6,8,9,10,35,70,80,31];
function countevennumbers (items) {
return new Promise(resolve => {
setTimeout(() => {
let a = 0;
for (var i in items) {
if (items[i] % 2 == 0) {
a++;
}
}
resolve(a);
}, 2000);
});
}
let evennumber = await countevennumbers(arrItems);
callback(null,'even numbers equals ='+evennumber);
};
เราได้เพิ่ม async และ awaitในโค้ดด้านบน เมื่อเราใช้awaitข้างการเรียกใช้ฟังก์ชันการดำเนินการจะหยุดชั่วคราวจนกว่าสัญญาภายในฟังก์ชันจะได้รับการแก้ไข โปรดทราบว่าawait ใช้ได้เฉพาะสำหรับ async ฟังก์ชั่น.
คุณสามารถสังเกตผลลัพธ์ต่อไปนี้หลังจากทดสอบโค้ดนี้ในคอนโซล AWS -
ContextDetails ใน NodeJS
วัตถุบริบทให้รายละเอียดเช่นชื่อของฟังก์ชัน Lambda เวลาที่เหลือเป็นมิลลิวินาทีรหัสคำขอชื่อกลุ่ม cloudwatch รายละเอียดการหมดเวลาเป็นต้น
ตารางต่อไปนี้แสดงรายการวิธีการและแอตทริบิวต์ที่พร้อมใช้งานกับวัตถุบริบท -
วิธีที่ใช้ได้สำหรับวัตถุบริบท
ซีเนียร์ No | ชื่อวิธีการและคำอธิบาย |
---|---|
1 | getRemainingTimeInMillis() วิธีนี้ให้เวลาที่เหลืออยู่ในหน่วยมิลลิวินาทีจนกว่าฟังก์ชันแลมด้าจะยุติฟังก์ชัน |
แอตทริบิวต์ที่พร้อมใช้งานสำหรับวัตถุบริบท
ซีเนียร์ No | ชื่อแอตทริบิวต์และคำอธิบาย |
---|---|
1 | functionName สิ่งนี้ให้ชื่อฟังก์ชัน AWS Lambda |
2 | functionVersion สิ่งนี้ทำให้เวอร์ชันของฟังก์ชัน AWS Lambda ดำเนินการ |
3 | nvokedFunctionArn สิ่งนี้จะให้รายละเอียด ARN |
4 | memoryLimitInMB แสดงขีด จำกัด หน่วยความจำที่เพิ่มขณะสร้างฟังก์ชัน Lambda |
5 | awsRequestId สิ่งนี้ให้รหัสคำขอ AWS |
6 | logGroupName สิ่งนี้จะให้ชื่อของชื่อกลุ่ม cloudwatch |
7 | logStreamName สิ่งนี้จะให้ชื่อสตรีมบันทึกของ cloudwatch ที่มีการเขียนบันทึก |
8 | identity สิ่งนี้จะให้รายละเอียดเกี่ยวกับผู้ให้บริการข้อมูลประจำตัวของ amazon cognito เมื่อใช้กับ aws mobile sdk รายละเอียดมีดังนี้ -
|
9 | clientContext นี่จะแสดงรายละเอียดของแอปพลิเคชันไคลเอนต์เมื่อใช้กับ sdk มือถือ aws รายละเอียดที่ได้รับมีดังนี้ -
|
ดูตัวอย่างต่อไปนี้เพื่อรับแนวคิดที่ดีขึ้นเกี่ยวกับวัตถุบริบท -
exports.handler = (event, context, callback) => {
// TODO implement
console.log('Remaining time =>', context.getRemainingTimeInMillis());
console.log('functionName =>', context.functionName);
console.log('AWSrequestID =>', context.awsRequestId);
console.log('logGroupName =>', context.log_group_name);
console.log('logStreamName =>', context.log_stream_name);
console.log('clientContext =>', context.clientContext);
callback(null, 'Name of aws Lambda is=>'+context.functionName);
};
คุณสามารถสังเกตผลลัพธ์ต่อไปนี้หลังจากทดสอบโค้ดนี้ในคอนโซล AWS -
คุณสามารถสังเกตเอาต์พุตบันทึกต่อไปนี้หลังจากทดสอบโค้ดนี้ในคอนโซล AWS -
เข้าสู่ระบบ NodeJS
เราสามารถใช้ console.log เพื่อเข้าสู่ระบบ NodeJS รายละเอียดบันทึกสามารถดึงมาจากบริการ CloudWatch เทียบกับฟังก์ชัน Lambda
ดูตัวอย่างต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
exports.handler = (event, context, callback) => {
// TODO implement
console.log('Logging for AWS Lamnda in NodeJS');
callback(null, 'Name of aws Lambda is=>'+context.functionName);
};
คุณสามารถสังเกตผลลัพธ์ต่อไปนี้หลังจากทดสอบโค้ดนี้ในคอนโซล AWS -
คุณสามารถสังเกตภาพหน้าจอต่อไปนี้จาก CloudWatch -
การจัดการข้อผิดพลาดใน NodeJS
แจ้งให้เราเข้าใจว่าการแจ้งข้อผิดพลาดเกิดขึ้นใน NodeJS อย่างไร สังเกตรหัสต่อไปนี้ -
exports.handler = function(event, context, callback) {
// This Source code only throws error.
var error = new Error("something is wrong");
callback(error);
};
คุณสามารถสังเกตสิ่งต่อไปนี้ในเอาต์พุตบันทึก -
รายละเอียดข้อผิดพลาดระบุไว้ในการติดต่อกลับดังนี้ -
{
"errorMessage": "something is wrong",
"errorType": "Error",
"stackTrace": [ "exports.handler (/var/task/index.js:2:17)" ]
}
ในบทนี้ให้เราเข้าใจรายละเอียดเกี่ยวกับวิธีสร้างฟังก์ชัน AWS Lambda แบบง่ายใน Java โดยละเอียด
การสร้างไฟล์ JAR ใน Eclipse
ก่อนที่จะดำเนินการสร้างฟังก์ชันแลมบ์ดาใน AWS เราต้องการการสนับสนุนชุดเครื่องมือ AWS สำหรับ Eclipse สำหรับคำแนะนำเกี่ยวกับการติดตั้งแบบเดียวกันคุณสามารถดูไฟล์Environment Setup บทในบทช่วยสอนนี้
เมื่อคุณติดตั้งเสร็จแล้วให้ทำตามขั้นตอนที่ระบุที่นี่ -
ขั้นตอนที่ 1
เปิด Eclipse IDE และสร้างโปรเจ็กต์ใหม่ด้วย AWS Lambda Java Project. สังเกตภาพหน้าจอด้านล่างเพื่อความเข้าใจที่ดีขึ้น -
ขั้นตอนที่ 2
เมื่อคุณเลือก Nextมันจะเปลี่ยนเส้นทางคุณไปยังหน้าจอที่แสดงด้านล่าง -
ขั้นตอนที่ 3
ตอนนี้รหัสเริ่มต้นถูกสร้างขึ้นสำหรับประเภทอินพุต Custom. เมื่อคุณคลิกFinish ปุ่มโครงการจะถูกสร้างขึ้นดังที่แสดงด้านล่าง -
ขั้นตอนที่ 4
ตอนนี้คลิกขวาที่โครงการของคุณและส่งออก เลือกJava / JAR ไฟล์จากไฟล์ Export ตัวช่วยสร้างและคลิก Next.
ขั้นตอนที่ 5
ตอนนี้ถ้าคุณคลิก Nextคุณจะได้รับแจ้งให้บันทึกไฟล์ในโฟลเดอร์ปลายทางซึ่งจะถูกถามเมื่อคุณคลิกถัดไป
เมื่อบันทึกไฟล์แล้วให้กลับไปที่ AWS Console และสร้างฟังก์ชัน AWS Lambda สำหรับ Java
ขั้นตอนที่ 6
ตอนนี้อัปโหลดไฟล์ .jar ไฟล์ที่เราสร้างโดยใช้ไฟล์ Upload ตามที่แสดงในภาพหน้าจอด้านล่าง -
รายละเอียดตัวจัดการสำหรับ Java
Handler คือ package name และ class name. ดูตัวอย่างต่อไปนี้เพื่อทำความเข้าใจรายละเอียดของตัวจัดการ -
ตัวอย่าง
package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler
สังเกตว่าจากโค้ดด้านบนตัวจัดการจะเป็น com.amazonaws.lambda.demo.LambdaFunctionHandler
ตอนนี้ให้เราทดสอบการเปลี่ยนแปลงและดูผลลัพธ์ -
Context Object ใน Java
การโต้ตอบกับการดำเนินการ AWS Lambda ทำได้โดยใช้บริบท มีวิธีการต่อไปนี้ที่จะใช้ภายใน Java -
ซีเนียร์ No | วิธีบริบทและคำอธิบาย |
---|---|
1 | getMemoryLimitInMB() สิ่งนี้จะให้ขีด จำกัด หน่วยความจำที่คุณระบุในขณะที่สร้างฟังก์ชันแลมบ์ดา |
2 | getFunctionName() สิ่งนี้จะให้ชื่อของฟังก์ชันแลมด้า |
3 | getFunctionVersion() สิ่งนี้จะทำให้เวอร์ชันของฟังก์ชันแลมบ์ดาทำงานอยู่ |
4 | getInvokedFunctionArn() สิ่งนี้จะทำให้ ARN ใช้ในการเรียกใช้ฟังก์ชัน |
5 | getAwsRequestId() สิ่งนี้จะให้ id คำขอ aws รหัสนี้ถูกสร้างขึ้นสำหรับฟังก์ชันแลมบ์ดาและไม่ซ้ำกัน รหัสสามารถใช้กับการสนับสนุน aws ในกรณีที่คุณประสบปัญหาใด ๆ |
6 | getLogGroupName() สิ่งนี้จะให้ชื่อกลุ่ม aws cloudwatch ที่เชื่อมโยงกับฟังก์ชัน aws lambda ที่สร้างขึ้น จะเป็นโมฆะหากผู้ใช้ iam ไม่มีสิทธิ์ในการบันทึก Cloudwatch |
7 | getClientContext() สิ่งนี้จะให้รายละเอียดเกี่ยวกับแอพและอุปกรณ์เมื่อใช้กับ sdk มือถือ aws มันจะให้รายละเอียดเช่นชื่อเวอร์ชันและรหัสรหัสไคลเอนต์ชื่อชื่อแพ็กเกจแอป มันสามารถเป็นโมฆะ |
8 | getIdentity() สิ่งนี้จะให้รายละเอียดเกี่ยวกับตัวตน amazon cognito เมื่อใช้กับ aws mobile sdk มันสามารถเป็นโมฆะ |
9 | getRemainingTimeInMillis() สิ่งนี้จะให้การดำเนินการตามเวลาที่เหลืออยู่ในหน่วยมิลลิวินาทีเมื่อฟังก์ชันถูกยกเลิกหลังจากหมดเวลาที่ระบุ |
10 | getLogger() สิ่งนี้จะทำให้แลมบ์ดาคนตัดไม้เชื่อมโยงกับวัตถุบริบท |
ตอนนี้ให้เราอัปเดตโค้ดที่ระบุข้างต้นและสังเกตผลลัพธ์ของวิธีการบางอย่างที่ระบุไว้ข้างต้น สังเกตโค้ดตัวอย่างด้านล่างเพื่อความเข้าใจที่ดีขึ้น -
package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
@Override
public String handleRequest(Object input, Context context) {
context.getLogger().log("Input: " + input);
System.out.println("AWS Lambda function name: " + context.getFunctionName());
System.out.println("Memory Allocated: " + context.getMemoryLimitInMB());
System.out.println("Time remaining in milliseconds: " + context.getRemainingTimeInMillis());
System.out.println("Cloudwatch group name " + context.getLogGroupName());
System.out.println("AWS Lambda Request Id " + context.getAwsRequestId());
// TODO: implement your handler
return "Hello from Lambda!";
}
}
เมื่อคุณเรียกใช้รหัสที่ระบุข้างต้นคุณจะพบผลลัพธ์ตามที่ระบุด้านล่าง -
บันทึกสำหรับบริบท
คุณสามารถสังเกตผลลัพธ์ต่อไปนี้เมื่อคุณดูเอาต์พุตบันทึกของคุณ -
หน่วยความจำที่จัดสรรสำหรับฟังก์ชัน Lambda คือ 512MB เวลาที่จัดสรรคือ 25 วินาที เวลาที่เหลือตามที่แสดงด้านบนคือ 24961 ซึ่งเป็นมิลลิวินาที ดังนั้น 25,000 - 24961 ซึ่งเท่ากับ 39 มิลลิวินาทีจึงถูกใช้สำหรับการทำงานของฟังก์ชันแลมบ์ดา โปรดทราบว่าชื่อกลุ่ม Cloudwatch และรหัสคำขอจะแสดงดังที่แสดงด้านบนด้วย
โปรดทราบว่าเราได้ใช้คำสั่งต่อไปนี้เพื่อพิมพ์บันทึกใน Java -
System.out.println (“log message”)
สิ่งเดียวกันนี้มีอยู่ใน CloudWatch สำหรับสิ่งนี้ไปที่บริการของ AWS เลือกCloudWatchservices แล้วคลิก Logs.
ตอนนี้ถ้าคุณเลือกฟังก์ชั่น Lambda มันจะแสดงวันที่บันทึกอย่างชาญฉลาดดังที่แสดงด้านล่าง -
เข้าสู่ระบบ Java
คุณยังสามารถใช้ Lambdalogger ใน Java เพื่อบันทึกข้อมูล สังเกตตัวอย่างต่อไปนี้ที่แสดงเหมือนกัน -
ตัวอย่าง
package com.amazonaws.lambda.demo;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
@Override
public String handleRequest(Object input, Context context) {
LambdaLogger logger = context.getLogger();
logger.log("Input: " + input);
logger.log("AWS Lambda function name: " + context.getFunctionName()+"\n");
logger.log("Memory Allocated: " + context.getMemoryLimitInMB()+"\n");
logger.log("Time remaining in milliseconds: " + context.getRemainingTimeInMillis()+"\n");
logger.log("Cloudwatch group name " + context.getLogGroupName()+"\n");
logger.log("AWS Lambda Request Id " + context.getAwsRequestId()+"\n");
// TODO: implement your handler
return "Hello from Lambda!";
}
}
รหัสที่แสดงด้านบนจะให้ผลลัพธ์ต่อไปนี้ -
ผลลัพธ์ใน CloudWatch จะเป็นดังที่แสดงด้านล่าง -
เกิดข้อผิดพลาดในการจัดการ Java สำหรับฟังก์ชัน Lambda
ส่วนนี้จะอธิบายวิธีจัดการข้อผิดพลาดในฟังก์ชัน Java สำหรับ Lambda สังเกตรหัสต่อไปนี้ที่แสดงเหมือนกัน -
package com.amazonaws.lambda.errorhandling;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
@Override
public String handleRequest(Object input, Context context) {
throw new RuntimeException("Error from aws lambda");
}
}
โปรดทราบว่ารายละเอียดข้อผิดพลาดจะปรากฏใน json ฟอร์แมตด้วย errorMessage Error from AWS Lambda. นอกจากนี้ไฟล์ErrorType และ stackTrace ให้รายละเอียดเพิ่มเติมเกี่ยวกับข้อผิดพลาด
ผลลัพธ์และเอาต์พุตบันทึกที่สอดคล้องกันของรหัสที่ระบุข้างต้นจะเป็นดังที่แสดงในภาพหน้าจอต่อไปนี้ที่ระบุด้านล่าง -
ในบทนี้เราจะสร้างฟังก์ชัน AWS Lambda อย่างง่ายใน Python และทำความเข้าใจกับแนวคิดการทำงานดังต่อไปนี้
ก่อนที่จะดำเนินการสร้างฟังก์ชัน Lambda ใน AWS เราต้องการการสนับสนุนชุดเครื่องมือ AWS สำหรับ Python เพื่อจุดประสงค์นี้ให้ทำตามขั้นตอนด้านล่างและสังเกตภาพหน้าจอที่แนบมา -
ขั้นตอนที่ 1
เข้าสู่ระบบคอนโซล AWS และสร้างฟังก์ชัน Lambda และเลือกภาษาเป็น Python
ขั้นตอนที่ 2
ตอนนี้คลิก Create functionและป้อนรายละเอียดสำหรับการสร้าง AWS Lambda แบบง่ายใน Python รหัสนี้ส่งคืนข้อความHello from Lambda using Python และมีลักษณะดังที่แสดงไว้ที่นี่ -
ขั้นตอนที่ 3
ตอนนี้บันทึกการเปลี่ยนแปลงและทดสอบรหัสเพื่อดูผลลัพธ์ คุณควรเห็นผลลัพธ์และบันทึกต่อไปนี้เมื่อคุณทดสอบในคอนโซล AWS โดยใช้ปุ่มทดสอบจาก UI
ขั้นตอนที่ 4
ตอนนี้คุณสามารถเขียนโค้ดภายในโปรแกรมแก้ไขหรือ IDE สำหรับ Python ที่นี่เรากำลังใช้รหัส Visual Studio สำหรับเขียนโค้ด คุณควรซิปไฟล์ในภายหลังและอัปโหลดในคอนโซล AWS
ที่นี่เราได้ซิปรหัสและใช้คอนโซล AWS
ขั้นตอนที่ 5
ตอนนี้เลือก Upload a .ZIP file ตัวเลือกที่แสดงด้านล่าง -
รายละเอียดตัวจัดการสำหรับ Python
โปรดทราบว่าตัวจัดการจะต้องเป็นชื่อของไฟล์ตามด้วยชื่อของฟังก์ชัน ในกรณีข้างต้นชื่อไฟล์ของเราคือhellopython.py และชื่อของฟังก์ชันคือ my_handler; ดังนั้นตัวจัดการจะเป็น hellopython.my_handler.
เมื่ออัปโหลดเสร็จสิ้นและบันทึกการเปลี่ยนแปลงแล้วจะแสดงรายละเอียดของไฟล์ zip ในตัวแก้ไขออนไลน์ในคอนโซล AWS Lambda ตอนนี้ให้เราทดสอบโค้ดเพื่อดูผลลัพธ์และบันทึก
ตอนนี้ให้เราเข้าใจรายละเอียดของฟังก์ชัน Lambda โดยใช้โค้ดตัวอย่างต่อไปนี้ -
def my_handler(event, context):
return "aws lambda in python using zip file"
ในโค้ดด้านบนชื่อฟังก์ชัน my_handler มี 2 พารามิเตอร์เหตุการณ์และบริบท
วัตถุบริบทใน Python
วัตถุบริบทให้รายละเอียดเช่นชื่อของฟังก์ชัน Lambda เวลาที่เหลือเป็นมิลลิวินาทีรหัสคำขอชื่อกลุ่มนาฬิการะบบคลาวด์รายละเอียดการหมดเวลาเป็นต้น
วิธีการและแอตทริบิวต์ที่มีอยู่ในวัตถุบริบทแสดงในตารางด้านล่าง -
ซีเนียร์ No | ชื่อวิธีการและคำอธิบาย |
---|---|
1 | get_remaining_time_in_millis() วิธีนี้ให้เวลาที่เหลืออยู่ในหน่วยมิลลิวินาทีจนกว่าฟังก์ชันแลมบ์ดาจะยุติฟังก์ชัน |
ซีเนียร์ No | คุณสมบัติและคำอธิบาย |
---|---|
1 | function_name สิ่งนี้ให้ชื่อฟังก์ชัน aws lambda |
2 | function_version สิ่งนี้ทำให้เวอร์ชันของฟังก์ชัน aws lambda ดำเนินการ |
3 | invoked_function_arn สิ่งนี้จะให้รายละเอียด ARN |
4 | memory_limit_in_mb แสดงขีด จำกัด หน่วยความจำที่เพิ่มในขณะที่สร้างฟังก์ชันแลมบ์ดา |
5 | aws_request_id สิ่งนี้ให้รหัสคำขอ aws |
6 | og_group_name สิ่งนี้จะให้ชื่อของชื่อกลุ่ม cloudwatch |
7 | log_stream_name สิ่งนี้จะให้ชื่อสตรีมบันทึกของ cloudwatch ที่มีการเขียนบันทึก |
8 | identity สิ่งนี้จะให้รายละเอียดเกี่ยวกับผู้ให้บริการข้อมูลประจำตัวของ amazon cognito เมื่อใช้กับ aws mobile sdk รายละเอียดมีดังนี้ -
|
9 | client_context นี่จะแสดงรายละเอียดของแอปพลิเคชันไคลเอนต์เมื่อใช้กับ sdk มือถือ aws รายละเอียดที่ได้รับมีดังนี้ -
|
ให้เราดูตัวอย่างการทำงานใน Python ซึ่งแสดงรายละเอียดบริบท สังเกตรหัสที่ระบุด้านล่าง -
def my_handler(event, context):
print("Log stream name:", context.log_stream_name)
print("Log group name:", context.log_group_name)
print("Request ID:",context.aws_request_id)
print("Mem. limits(MB):", context.memory_limit_in_mb)
print("Time remaining (MS):", context.get_remaining_time_in_millis())
return "aws lambda in python using zip file"
ผลลัพธ์ที่สอดคล้องกันของรหัสที่แสดงด้านบนแสดงไว้ด้านล่าง -
การบันทึกโดยใช้ Python
ในการบันทึกข้อมูลโดยใช้ Python เราสามารถใช้ฟังก์ชัน print หรือ logger ที่มีอยู่ ให้เราใช้บริบทตัวอย่างข้างต้นและตรวจสอบใน CloudWatch เพื่อดูว่ามีการพิมพ์บันทึกหรือไม่ สังเกตรหัสต่อไปนี้ -
def my_handler(event, context):
print("Log stream name:", context.log_stream_name)
print("Log group name:", context.log_group_name)
print("Request ID:",context.aws_request_id)
print("Mem. limits(MB):", context.memory_limit_in_mb)
print("Time remaining (MS):", context.get_remaining_time_in_millis())
return "aws lambda in python using zip file"
ผลลัพธ์ของรหัสนี้ใน CloudWatch มีดังที่แสดงด้านล่าง -
ดูตัวอย่างต่อไปนี้เพื่อทำความเข้าใจเกี่ยวกับการใช้คนบันทึกเพื่อพิมพ์บันทึกไปยัง CloudWatch -
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def my_handler(event, context):
logger.info('Using logger to print messages to cloudwatch logs')
return "aws lambda in python using zip file"
ผลลัพธ์สำหรับสิ่งนี้จะเป็นดังที่แสดงในภาพหน้าจอด้านล่าง -
ข้อผิดพลาดในการจัดการใน Python สำหรับฟังก์ชัน Lambda
ในส่วนนี้ให้เราดูตัวอย่างการทำงานซึ่งแสดงวิธีจัดการข้อผิดพลาดใน Python สังเกตชิ้นส่วนของรหัสที่ให้ไว้ที่นี่ -
def error_handler(event, context):
raise Exception('Error Occured!')
การแสดงบันทึกดังแสดงในภาพที่นี่ -
การสนับสนุน Go Language เป็นส่วนเสริมล่าสุดของ AWS ในการทำงานกับ Go คุณต้องเลือกภาษาจากคอนโซล AWS ในขณะที่สร้างฟังก์ชัน AWS Lambda ในบทนี้ให้เราเรียนรู้รายละเอียดเกี่ยวกับฟังก์ชัน AWS Lambda ในภาษา Go
กำลังติดตั้ง Go
ในการเริ่มต้นเราต้องมีการสนับสนุน Go Language ในส่วนนี้เราจะดูรายละเอียดต่อไปนี้เพื่อเริ่มทำงานกับ AWS Lambda ใน Go นี่คือเว็บไซต์อย่างเป็นทางการสำหรับ Go download:https://golang.org/dl/
ตอนนี้ดาวน์โหลดแพคเกจตามระบบปฏิบัติการ ทำตามขั้นตอนที่ระบุที่นี่เพื่อติดตั้ง Go บนระบบปฏิบัติการที่เกี่ยวข้อง
การติดตั้งบน Windows
สังเกตว่าสำหรับ Windows จะมีการดาวน์โหลดแบบ 32 บิตและ 64 บิต ดาวน์โหลดไฟล์ zip และแตกเนื้อหาและเก็บไว้ในไดเร็กทอรีที่คุณเลือก
เพิ่มตัวแปรสภาพแวดล้อมที่มีอยู่ที่ ControlPanel ---> System ---> Advanced system settings.
ตอนนี้คลิก Environment Variables และเพิ่มเส้นทางไดเร็กทอรีดังที่แสดงไว้ที่นี่ -
คุณยังสามารถแก้ไขตัวแปรระบบได้ดังที่แสดงไว้ที่นี่ -
เมื่อทำตามขั้นตอนเหล่านี้เสร็จแล้วคุณจะสามารถเริ่มทำงานกับ Go ได้ เปิดพรอมต์คำสั่งและตรวจสอบคำสั่ง Go สำหรับเวอร์ชัน สังเกตภาพหน้าจอต่อไปนี้สำหรับสิ่งเดียวกัน
การติดตั้งสำหรับ Linux และ Mac OS
สำหรับการติดตั้งแพ็คเกจบน Linux และ Mac OS ให้ทำตามคำแนะนำที่แสดงด้านล่าง -
แกะหีบห่อและจัดเก็บในสถานที่ /usr/local/go. ตอนนี้เพิ่ม/usr/local/go/binไปยังตัวแปรสภาพแวดล้อม PATH สามารถทำได้โดยใช้/etc/profile หรือ $HOME/.profile.
เพื่อจุดประสงค์นี้คุณสามารถใช้คำสั่งต่อไปนี้
export PATH=$PATH:/usr/local/go/bin
ในการเพิ่มการรองรับ AWS สำหรับ Windows, Linux และ mac ให้ใช้สิ่งต่อไปนี้ในบรรทัดคำสั่ง git ของคุณ -
go.exe get -u github.com/aws/aws-lambda-go/lambda
go.exe get -u github.com/aws/aws-lambda-go/lambdacontext
go.exe get -u github.com/aws/aws-lambda-go/cmd/build-lambda-zip
ในการคอมไพล์โค้ด Windows / Linux / Mac ให้ใช้คำสั่งต่อไปนี้ -
GOOS=linux GOARCH=amd64 go build -o main main.go
%GOPATH%\bin\build-lambda-zip.exe -o main.zip main
AWS Lambda Function โดยใช้ GO
โปรแกรมที่ส่งคืนใน Go เมื่อบิลด์ให้ไฟล์ปฏิบัติการ ต่อไปนี้เป็นโปรแกรมง่ายๆใน Go with AWS Lambda support เราจำเป็นต้องนำเข้าไฟล์github.com/aws/aws-lambda-go/lambdaเนื่องจากมีฟังก์ชันการเขียนโปรแกรม Lambda ความต้องการที่สำคัญอีกประการหนึ่งสำหรับ AWS Lambda คือตัวจัดการ
Main.go
// main.go
package main
import (
"github.com/aws/aws-lambda-go/lambda"
)
func hello() (string, error) {
return "Hello Lambda", nil
}
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
โปรดทราบว่าการดำเนินการของไฟล์ Goโปรแกรมเริ่มต้นจาก main โดยที่ lambda start ถูกเรียกด้วยฟังก์ชันตัวจัดการ สังเกตโค้ดที่แสดงด้านล่าง -
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
ตอนนี้ให้เราเรียกใช้ไฟล์ด้านบนโดยใช้คำสั่ง Go จากนั้น zip ไฟล์ปฏิบัติการ
โครงสร้างของไฟล์ที่เราใช้มีดังที่แสดงไว้ที่นี่ -
ด้วย go buildมันสร้างไฟล์ปฏิบัติการชื่อ main.exe ในการบีบอัดไฟล์และอัปโหลดใน AWS Lambda คุณสามารถใช้ขั้นตอนต่อไปนี้ -
ในการคอมไพล์โค้ด Windows / Linux / Mac ให้ใช้คำสั่งต่อไปนี้ -
GOOS=linux GOARCH=amd64 go build -o main main.go
%GOPATH%\bin\build-lambda-zip.exe -o main.zip main
จากนั้นลงชื่อเข้าใช้คอนโซล AWS และสร้างฟังก์ชัน Lambda โดยใช้ Go เป็นรันไทม์ -
เมื่อสร้างฟังก์ชันแล้วให้อัปโหลดไฟล์ซิปปฏิบัติการที่สร้างไว้ด้านบน
ตัวจัดการฟังก์ชัน Lambda พร้อม Go
Handler คือจุดเริ่มต้นการทำงานของโปรแกรม Go จากสายหลักไปยังlambda.startการดำเนินการเรียกใช้ด้วยฟังก์ชันตัวจัดการ โปรดทราบว่าตัวจัดการที่จะเพิ่มจะเป็นmain.
สังเกตรหัสที่นี่เพื่อความเข้าใจ -
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
ทำตามภาพหน้าจอด้านล่าง -
ตอนนี้บันทึกฟังก์ชันและทดสอบ คุณสามารถดูผลการดำเนินการดังที่แสดงไว้ที่นี่
ผลลัพธ์ของบันทึกที่เกี่ยวข้องจะเป็นดังที่แสดงไว้ที่นี่ -
วัตถุบริบทด้วย Go
AWS Lambda in Go ให้ตัวแปรส่วนกลางและคุณสมบัติสำหรับบริบทดังต่อไปนี้
MemoryLimitInMB - ขีด จำกัด หน่วยความจำเป็น MB ที่กำหนดค่าใน aws lambda
FunctionName - ชื่อของฟังก์ชัน aws lambda
FunctionVersion - เวอร์ชันของฟังก์ชัน aws lambda ที่เรียกใช้งาน
LogStreamName - ชื่อสตรีมบันทึก cloudwatch
LogGroupName - ชื่อกลุ่ม cloudwatch
คุณสมบัติที่มีอยู่ในบริบทจะได้รับภายใต้ -
AwsRequestID
นี่คือรหัสคำขอ AWS ที่คุณได้รับเมื่อเรียกใช้ฟังก์ชัน AWS Lambda
ClientContext
ซึ่งประกอบด้วยรายละเอียดเกี่ยวกับแอปพลิเคชันไคลเอนต์และอุปกรณ์เมื่อเรียกใช้ผ่าน AWS Mobile SDK มันสามารถเป็นโมฆะ บริบทไคลเอ็นต์ให้รายละเอียดเช่นรหัสไคลเอ็นต์ชื่อแอปพลิเคชันชื่อเวอร์ชันรหัสเวอร์ชันและชื่อแพ็กเกจแอปพลิเคชัน
InvokedFunctionArn
เรียกใช้ ARN ของฟังก์ชัน ARN ที่ไม่มีเงื่อนไขเรียกใช้เวอร์ชันล่าสุดและนามแฝงที่เรียกใช้เวอร์ชันฟังก์ชันที่ชี้ไป
เอกลักษณ์
ให้รายละเอียดเกี่ยวกับผู้ให้บริการข้อมูลประจำตัว Amazon Cognito เมื่อใช้กับ AWS mobile SDK
การเปลี่ยนแปลงที่เพิ่มเข้ามา main.go เพื่อพิมพ์รายละเอียดบริบท -
// main.go
package main
import (
"context"
"log"
"github.com/aws/aws-lambda-go/lambda"
"github.com/aws/aws-lambda-go/lambdacontext"
)
func hello(ctx context.Context) (string, error) {
lc, _ := lambdacontext.FromContext(ctx);
log.Print(lc);
log.Print(lc.AwsRequestID);
log.Print(lc.InvokedFunctionArn);
return "Hello Lambda", nil
}
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
เราจำเป็นต้องนำเข้าไฟล์ log และ lambda contextเพื่อใช้กับ Go รายละเอียดบริบทมีดังนี้ -
func hello(ctx context.Context) (string, error) {
lc, _ := lambdacontext.FromContext(ctx);
log.Print(lc);
log.Print(lc.AwsRequestID);
log.Print(lc.InvokedFunctionArn);
return "Hello Lambda", nil
}
คุณสามารถสังเกตผลลัพธ์ต่อไปนี้ในการทดสอบโค้ดด้านบน -
การบันทึกข้อมูล
ด้วย Go คุณสามารถบันทึกข้อมูลโดยใช้โมดูลบันทึกหรือ fmt ดังที่แสดงด้านล่าง -
// main.go
package main
import (
"log"
"fmt"
"github.com/aws/aws-lambda-go/lambda"
)
func hello() (string, error) {
log.Print("Hello from Lambda Go using log");
fmt.Print("Hello from Lambda Go using fmt");
return "Hello Lambda", nil
}
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
ผลลัพธ์เดียวกันดังที่แสดงด้านล่าง -
การตรวจสอบบันทึกใน CloudWatch
คุณสามารถดูบันทึกใน CloudWatch ได้เช่นกัน สำหรับสิ่งนี้ไปที่บริการ AWS แล้วเลือก cloudwatch แล้วคลิกLogsทางด้านซ้าย ตอนนี้ค้นหาฟังก์ชัน Lambda ในรายการเพื่อดูบันทึก -
ข้อผิดพลาดของฟังก์ชัน
คุณสามารถสร้างการจัดการข้อผิดพลาดแบบกำหนดเองใน AWS Lambda โดยใช้โมดูลข้อผิดพลาดดังที่แสดงในโค้ดด้านล่าง -
// main.go
package main
import (
"errors"
"github.com/aws/aws-lambda-go/lambda"
)
func hello() error {
return errors.New("There is an error in the code!")
}
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
ผลลัพธ์ของรหัสที่แสดงด้านบนเป็นไปตามที่ระบุด้านล่าง -
บทนี้จะอธิบายวิธีการทำงานกับฟังก์ชัน AWS Lambda ใน C # โดยละเอียด ที่นี่เราจะใช้ Visual Studio เพื่อเขียนและปรับใช้โค้ดกับ AWS Lambda สำหรับข้อมูลและความช่วยเหลือเกี่ยวกับการติดตั้ง Visual Studio และการเพิ่ม AWS toolkit ไปยัง Visual Studio โปรดดูที่ไฟล์Introductionบทในบทช่วยสอนนี้ เมื่อคุณติดตั้ง Visual Studio เสร็จแล้วโปรดทำตามขั้นตอนด้านล่างนี้ ดูภาพหน้าจอตามลำดับเพื่อความเข้าใจที่ดีขึ้น -
ขั้นตอนที่ 1
เปิด Visual Studio ของคุณและทำตามขั้นตอนเพื่อสร้างโครงการใหม่ คลิกที่File -> New -> Project.
ขั้นตอนที่ 2
ตอนนี้หน้าจอต่อไปนี้จะปรากฏขึ้นตามที่คุณเลือก AWS Lambda for Visual C#. เลือกAWS Lambda Project (.NET Core).
คุณสามารถเปลี่ยนชื่อได้หากจำเป็นจะคงไว้ที่นี่เป็นชื่อเริ่มต้น คลิกOK ดำเนินการต่อไป.
ขั้นตอนต่อไปจะขอให้คุณเลือกไฟล์ Blueprint.
เลือก Empty function สำหรับตัวอย่างนี้และคลิก Finish. มันจะสร้างโครงสร้างโครงการใหม่ดังที่แสดงด้านล่าง -
ตอนนี้เลือก Function.cs ซึ่งเป็นไฟล์หลักที่ตัวจัดการพร้อมเหตุการณ์และบริบทถูกสร้างขึ้นสำหรับ AWS Lambda
การแสดงไฟล์ Functions.cs มีดังต่อไปนี้ -
คุณสามารถใช้คำสั่งที่ระบุด้านล่างเพื่อทำให้พารามิเตอร์อินพุตและเอาต์พุตเป็นอนุกรมกับฟังก์ชัน AWS Lambda
[assembly:
LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
รายละเอียดตัวจัดการสำหรับ C #
ตัวจัดการจะแสดงดังนี้ -
public string FunctionHandler(string input, ILambdaContext context) {
return input?.ToUpper();
}
ส่วนประกอบต่างๆของโค้ดข้างต้นอธิบายไว้ด้านล่าง -
FunctionHandler −นี่คือจุดเริ่มต้นของฟังก์ชัน C # AWS Lambda
String input − พารามิเตอร์ไปยังตัวจัดการ string input มีข้อมูลเหตุการณ์ทั้งหมดเช่นออบเจ็กต์ S3 รายละเอียดเกตเวย์ API เป็นต้น
ILambdaContext context −ILamdaContext เป็นอินเทอร์เฟซที่มีรายละเอียดบริบท มีรายละเอียดเช่นชื่อฟังก์ชันแลมบ์ดารายละเอียดหน่วยความจำรายละเอียดการหมดเวลาเป็นต้น
ตัวจัดการ Lambda สามารถเรียกใช้แบบซิงค์และแบบไม่ซิงค์ หากเรียกใช้ด้วยวิธีการซิงค์ดังที่แสดงด้านบนคุณสามารถมีประเภทการส่งคืน ถ้า async เกินกว่าประเภท return จะต้องเป็นโมฆะ
ตอนนี้ให้เราปรับใช้ AWS Lambda C # และทดสอบสิ่งเดียวกัน คลิกขวาที่โครงการแล้วคลิกPublish to AWS Lambda ดังแสดงด้านล่าง -
เติมไฟล์ Function Name และคลิกที่ Next. หน้าจอถัดไปที่แสดงคือAdvanced Function Details ตามที่แสดง -
ป้อนไฟล์ Role Name, Memory และ Timeout. โปรดทราบว่าที่นี่เราได้เลือกบทบาทที่มีอยู่ที่สร้างและใช้หน่วยความจำเป็น 128MB และหมดเวลาเป็น 10 วินาที เมื่อคลิกเสร็จแล้วUpload เพื่อเผยแพร่ไปยังคอนโซล AWS Lambda
คุณจะเห็นหน้าจอต่อไปนี้เมื่ออัปโหลดฟังก์ชัน AWS Lambda คลิกInvokeเพื่อเรียกใช้ฟังก์ชัน AWS Lambda ที่สร้างขึ้น ในปัจจุบันจะแสดงข้อผิดพลาดเนื่องจากต้องมีการป้อนข้อมูลตามรหัสที่เขียน
ตอนนี้ให้เราป้อนข้อมูลตัวอย่างและ Invokeอีกครั้ง โปรดทราบว่าที่นี่เราได้ป้อนข้อความบางส่วนในช่องป้อนข้อมูลและเช่นเดียวกันกับการคลิกinvokeจะแสดงเป็นตัวพิมพ์ใหญ่ในส่วนการตอบกลับ เอาต์พุตบันทึกจะแสดงด้านล่าง -
ตอนนี้ให้เราตรวจสอบคอนโซล AWS เพื่อดูว่าฟังก์ชันถูกสร้างขึ้นเมื่อเราปรับใช้ฟังก์ชันจาก Visual Studio หรือไม่
ฟังก์ชัน Lambda ที่สร้างขึ้นด้านบนคือ aws lambda using csharp และสิ่งเดียวกันนี้จะปรากฏในคอนโซล AWS ดังที่แสดงในภาพหน้าจอด้านล่าง -
ลายเซ็นตัวจัดการ
Handler เป็นจุดเริ่มต้นสำหรับ AWS ในการดำเนินการ ชื่อของตัวจัดการควรกำหนดเป็น -
ASSEMBLY::TYPE::METHOD
รายละเอียดของลายเซ็นมีรายละเอียดดังนี้ -
ASSEMBLY- นี่คือชื่อของแอสเซมบลี. NET สำหรับแอปพลิเคชันที่สร้างขึ้น โดยพื้นฐานแล้วเป็นชื่อของโฟลเดอร์ที่สร้างโครงการ
TYPE- นี่คือชื่อของตัวจัดการ โดยพื้นฐานแล้วคือ namespace.classname
METHOD - นี่คือชื่อของตัวจัดการฟังก์ชัน
รหัสสำหรับลายเซ็นตัวจัดการมีดังที่แสดงด้านล่าง -
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Amazon.Lambda.Core;
// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
namespace AWSLambda3 {
public class Function {
/// <summary>
/// A simple function that takes a string and does a ToUpper
/// </summary>
/// <param name="input"></param>
/// <param name="context"></param>
/// <returns></returns>
public string FunctionHandler(string input, ILambdaContext context) {
return input?.ToUpper();
}
}
}
โปรดทราบว่านี่คือการชุมนุม AWSLamda3Type คือ namespace.classname ซึ่งก็คือ AWSLambda3.Function และวิธีการคือ FunctionHandler. ดังนั้นลายเซ็นของตัวจัดการคือAWSLamda3::AWSLambda3.Function::FunctionHandler
วัตถุบริบทใน C #
Context Object ให้ข้อมูลที่เป็นประโยชน์เกี่ยวกับรันไทม์ในสภาพแวดล้อม AWS คุณสมบัติที่มีอยู่ในวัตถุบริบทดังแสดงในตารางต่อไปนี้ -
ซีเนียร์ No | คุณสมบัติและคำอธิบาย |
---|---|
1 | MemoryLimitInMB ข้อมูลนี้จะให้รายละเอียดของหน่วยความจำที่กำหนดค่าสำหรับฟังก์ชัน AWS Lambda |
2 | FunctionName ชื่อฟังก์ชัน AWS Lambda |
3 | FunctionVersion เวอร์ชันของฟังก์ชัน AWS Lambda |
4 | InvokedFunctionArn ARN ใช้เพื่อเรียกใช้ฟังก์ชันนี้ |
5 | AwsRequestId รหัสคำขอ AWS สำหรับฟังก์ชัน AWS ที่สร้างขึ้น |
6 | LogStreamName ชื่อสตรีมบันทึก Cloudwatch |
7 | LogGroupName ชื่อกลุ่ม Cloudwatch |
8 | ClientContext ข้อมูลเกี่ยวกับแอปพลิเคชันไคลเอนต์และอุปกรณ์เมื่อใช้กับ AWS mobile SDK |
9 | Identity ข้อมูลเกี่ยวกับตัวตน amazon cogbnito เมื่อใช้กับ AWS mobile SDK |
10 | RemainingTime เวลาดำเนินการที่เหลืออยู่จนกว่าฟังก์ชันจะสิ้นสุดลง |
11 | Logger คนตัดไม้ที่เกี่ยวข้องกับบริบท |
ตัวอย่าง
ในส่วนนี้ให้เราทดสอบคุณสมบัติข้างต้นบางประการใน AWS Lambda ใน C # สังเกตโค้ดตัวอย่างด้านล่าง -
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Amazon.Lambda.Core;
// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
namespace AWSLambda6 {
public class Function {
/// <summary>
/// </summary>
/// <param name="input"></param>
/// <param name="context"></param>
/// <returns></returns>
public void FunctionHandler(ILambdaContext context) {
LambdaLogger.Log("Function name: " + context.FunctionName+"\n");
context.Logger.Log("RemainingTime: " + context.RemainingTime+"\n");
LambdaLogger.Log("LogGroupName: " + context.LogGroupName+"\n");
}
}
}
ผลลัพธ์ที่เกี่ยวข้องซึ่งคุณสามารถสังเกตได้เมื่อคุณเรียกใช้รหัสด้านบน C# ดังแสดงด้านล่าง -
ผลลัพธ์ที่เกี่ยวข้องซึ่งคุณสามารถสังเกตได้เมื่อคุณเรียกใช้รหัสด้านบน AWS Console ดังแสดงด้านล่าง -
การบันทึกโดยใช้ C #
สำหรับการบันทึกคุณสามารถใช้สองฟังก์ชัน -
context.Logger.Log
LambdaLogger.Log
ดูตัวอย่างต่อไปนี้ที่แสดงที่นี่ -
public void FunctionHandler(ILambdaContext context) {
LambdaLogger.Log("Function name: " + context.FunctionName+"\n");
context.Logger.Log("RemainingTime: " + context.RemainingTime+"\n");
LambdaLogger.Log("LogGroupName: " + context.LogGroupName+"\n");
}
ผลลัพธ์ที่สอดคล้องกันสำหรับรหัสที่ระบุข้างต้นแสดงไว้ที่นี่ -
คุณสามารถรับบันทึกจาก CloudWatch ดังที่แสดงด้านล่าง -
การจัดการข้อผิดพลาดใน C # สำหรับฟังก์ชัน Lambda
ส่วนนี้กล่าวถึงเกี่ยวกับการจัดการข้อผิดพลาดใน C # สำหรับการจัดการข้อผิดพลาดException ต้องขยายคลาสดังที่แสดงในตัวอย่างด้านล่าง -
ตัวอย่าง
namespace example {
public class AccountAlreadyExistsException : Exception {
public AccountAlreadyExistsException(String message) :
base(message) {
}
}
}
namespace example {
public class Handler {
public static void CreateAccount() {
throw new AccountAlreadyExistsException("Error in AWS Lambda!");
}
}
}
ผลลัพธ์ที่สอดคล้องกันสำหรับรหัสที่ระบุข้างต้นมีดังต่อไปนี้ -
{
"errorType": "LambdaException",
"errorMessage": "Error in AWS Lambda!"
}
ในบทก่อนหน้านี้เราได้เรียนรู้วิธีสร้างฟังก์ชัน AWS Lambda ในคอนโซล AWS อย่างไรก็ตามมีพารามิเตอร์อื่น ๆ สำหรับการสร้างฟังก์ชันแลมบ์ดา ซึ่งรวมถึงการจัดสรรหน่วยความจำการหมดเวลา ฯลฯ
ในบทนี้ให้เราเข้าใจรายละเอียดเกี่ยวกับคุณสมบัติการกำหนดค่าต่อไปนี้สำหรับ AWS Lambda
การจัดสรรหน่วยความจำ
เข้าสู่ระบบคอนโซล AWS และสร้างหรือเลือกฟังก์ชันแลมบ์ดาที่มีอยู่ คลิกConfigurationเพื่อดูรายละเอียดของหน่วยความจำที่จัดสรร ดูภาพหน้าจอด้านล่าง -
โปรดทราบว่าโดยค่าเริ่มต้นหน่วยความจำที่จัดสรรคือ 128MB. หากคุณต้องการเพิ่มหน่วยความจำคุณสามารถคลิกแถบเลื่อน
หน่วยความจำจะเพิ่มขึ้นเป็น 64MBในขณะที่คุณเลื่อนแถบเลื่อน สังเกตว่าหน่วยความจำสูงสุดที่มีอยู่คือ3008MB. ดูภาพหน้าจอด้านล่าง -
คุณยังสามารถใช้ aws cliจากพรอมต์คำสั่งเพื่อเพิ่มขีด จำกัด หน่วยความจำ คุณจะต้องให้หน่วยความจำเพิ่มขึ้นทีละ 64MB
ตอนนี้ให้เราเพิ่มขีด จำกัด หน่วยความจำของ AWS Lambda ด้วยชื่อ:myfirstlambdafunction.
รายละเอียดหน่วยความจำของฟังก์ชั่นแสดงอยู่ในภาพหน้าจอด้านล่าง -
คำสั่งที่ใช้ในการเปลี่ยนหน่วยความจำโดยใช้ aws cli มีดังนี้ -
aws lambda update-function-configuration --function-name your function name --
region region where your function resides --memory-size memory amount --
profile admin user
เอาต์พุตที่สอดคล้องกันของฟังก์ชัน AWS Lambda myfirstlambdafunctionในคอนโซล AWS จะแสดงที่นี่ สังเกตว่าหน่วยความจำเปลี่ยนจาก 128MB เป็น 256MB
เวลาดำเนินการสูงสุด
หมดเวลาคือเวลาที่กำหนดให้กับฟังก์ชัน AWS Lambda เพื่อยุติหากหมดเวลา ฟังก์ชัน AWS Lambda จะทำงานภายในเวลาที่จัดสรรหรือสิ้นสุดหากเกินระยะหมดเวลาที่กำหนด คุณต้องประเมินเวลาที่ต้องใช้เพื่อให้ฟังก์ชันดำเนินการและเลือกเวลาตามนั้นConfiguration แท็บในคอนโซล AWS ดังที่แสดงด้านล่าง -
บทบาท IAM
เมื่อสร้างฟังก์ชัน AWS Lambda จำเป็นต้องกำหนดบทบาทหรือสิทธิ์ ในกรณีที่คุณต้องการ AWS Lambda สำหรับ S3 หรือ dynamoDB คุณต้องได้รับอนุญาตที่เกี่ยวข้องกับบริการของแลมบ์ดา ตามบทบาทที่ได้รับมอบหมาย AWS Lambda จะตัดสินใจขั้นตอนที่ต้องดำเนินการ ตัวอย่างเช่นหากคุณให้สิทธิ์การเข้าถึง dynamodb โดยสมบูรณ์คุณสามารถเพิ่มอัปเดตและลบแถวจากตาราง dynamodb
ชื่อเครื่องจัดการ
นี่คือจุดเริ่มต้นของการเรียกใช้ฟังก์ชัน AWS Lambda ฟังก์ชันตัวจัดการมีรายละเอียดของเหตุการณ์ที่เรียกใช้อ็อบเจ็กต์บริบทและการเรียกกลับที่ต้องส่งกลับsuccess หรือ error ของ AWS Lambda
รูปแบบของฟังก์ชันตัวจัดการใน nodejs แสดงที่นี่ -
exports.handler = (event, context, callback) => {
callback(null, "hello from lambda");
};
ฟังก์ชันแลมด้าโดยใช้ตัวแปรสภาพแวดล้อม
ในส่วนนี้เราจะสร้างฟังก์ชัน Lambda อย่างง่ายโดยใช้ตัวแปรสภาพแวดล้อมที่เพิ่มในส่วนการกำหนดค่า เพื่อจุดประสงค์นี้ให้ทำตามขั้นตอนด้านล่างและอ้างอิงภาพหน้าจอตามลำดับ -
ขั้นตอนที่ 1
ไปที่คอนโซล AWS และสร้างฟังก์ชันใน Lambda ดังที่แสดง
ขั้นตอนที่ 2
ตอนนี้เพิ่มตัวแปรสภาพแวดล้อมดังที่แสดง -
ขั้นตอนที่ 3
ตอนนี้ให้เราดึงข้อมูลเดียวกันในโค้ดแลมบ์ดาดังนี้ -
exports.handler = (event, context, callback) => {
var hostName = process.env.host;
var userName = process.env.username;
callback(null, "Environment Variables =>"+hostName+" and "+userName);
};
ขั้นตอนที่ 4
ในการรับรายละเอียดจากตัวแปรสภาพแวดล้อมเราจำเป็นต้องใช้ process.envตามที่ปรากฏ. โปรดทราบว่าไวยากรณ์นี้มีไว้สำหรับNodeJS รันไทม์
var hostName = process.env.host;
var userName = process.env.username;
ขั้นตอนที่ 5
ผลลัพธ์สำหรับฟังก์ชัน Lambda ในการดำเนินการจะเป็นดังที่แสดง -
เราสามารถสร้างฟังก์ชัน Lambda และทดสอบสิ่งเดียวกันในคอนโซล AWS บทนี้จะกล่าวถึงเรื่องนี้โดยละเอียด เพื่อจุดประสงค์นี้คุณจะต้องทำตามขั้นตอนที่ให้ไว้ที่นี่และสังเกตภาพหน้าจอที่ให้มา -
ขั้นตอนที่ 1
เข้าสู่ระบบ AWS Console https://aws.amazon.com/console/. ตอนนี้คุณจะถูกเปลี่ยนเส้นทางไปยังหน้าจอที่แสดงบริการของ AWS
ขั้นตอนที่ 2
ตอนนี้คลิกที่ Lambdaบริการตามที่เน้นด้านบน สิ่งนี้จะเปลี่ยนเส้นทางเพื่อสร้างฟังก์ชันดังที่แสดงด้านล่าง -
ขั้นตอนที่ 3
ตอนนี้คลิก Create functionและป้อนรายละเอียดของฟังก์ชัน จากนั้นคุณจะเห็นหน้าจอดังที่แสดงด้านล่าง -
ขั้นตอนที่ 4
คุณสามารถเขียนโค้ดของคุณได้โดยเลือกภาษาที่คุณต้องการ โค้ดจะต้องถูกเขียนด้วยตัวแก้ไขหากตัวเลือกที่เลือกคือแก้ไขโค้ดแบบอินไลน์ ตัวเลือกอื่น ๆ มีดังนี้ -
ขั้นตอนที่ 5
เมื่อเสร็จแล้วคุณต้องบันทึกการเปลี่ยนแปลงที่ปุ่มให้ไว้ที่มุมขวาบนตามที่แสดงด้านล่าง -
ขั้นตอนที่ 6
ตอนนี้คลิก Testปุ่ม. สิ่งนี้ให้รายละเอียดทั้งหมดของการทำงานของฟังก์ชัน Lambda ดังที่แสดงด้านล่าง -
ขั้นตอนที่ 7
รหัสสำหรับ index.js มีดังนี้ -
exports.handler = (event, context, callback) => {
// TODO implement
callback(null, 'Lambda test');
};
ซึ่งจะเรียกไฟล์ Callback functionและผลลัพธ์อาจผิดพลาดหรือสำเร็จ เมื่อประสบความสำเร็จคุณจะเห็นไฟล์Lambda testข้อความ; หากข้อผิดพลาดมันจะผ่านโมฆะ
ขั้นตอนที่ 8
Role รายละเอียดสำหรับฟังก์ชัน Lambda เป็นส่วนหนึ่งของการกำหนดค่าและแสดงดังที่แสดงด้านล่าง -
ขั้นตอนที่ 9
ตอนนี้คุณสามารถอัปเดตบทบาทได้หากจำเป็นและบันทึกฟังก์ชัน Lambda จากนั้นรายละเอียดหน่วยความจำและระยะหมดเวลาสำหรับฟังก์ชันแลมบ์ดาจะแสดงดังที่แสดงด้านล่าง -
ขั้นตอนที่ 10
ตอนนี้เราจำเป็นต้องเพิ่มทริกเกอร์ให้กับฟังก์ชัน Lambda เพื่อให้ดำเนินการเมื่อเหตุการณ์เกิดขึ้น รายละเอียดทริกเกอร์จะแสดงที่จุดเริ่มต้นของหน้าจอฟังก์ชัน AWS Lambda ดังที่แสดงด้านล่าง -
จากนี้คุณสามารถเลือกทริกเกอร์ที่คุณต้องการให้ฟังก์ชันแลมด้าของคุณทริกเกอร์ได้ เมื่อคุณเลือกทริกเกอร์จะต้องเพิ่มรายละเอียดการกำหนดค่าสำหรับทริกเกอร์
ตัวอย่างเช่นสำหรับทริกเกอร์บน S3 รายละเอียดการกำหนดค่าที่จะเพิ่มมีดังนี้ -
ขั้นตอนที่ 11
ตอนนี้เลือกที่เก็บข้อมูลที่คุณต้องการใช้ทริกเกอร์ ประเภทเหตุการณ์มีรายละเอียดดังต่อไปนี้ -
ขั้นตอนที่ 12
สำหรับทริกเกอร์คุณสามารถพูดถึงไฟล์ประเภทคำนำหน้าหรือรูปแบบไฟล์ได้โดยจะต้องมีทริกเกอร์ Lambda มีรายละเอียดดังรูป -
ขั้นตอนที่ 13
ตอนนี้กรอกรายละเอียดที่จำเป็นสำหรับทริกเกอร์แล้วคลิก Add ปุ่มบันทึกฟังก์ชัน Lambda เพื่อให้ทริกเกอร์ได้รับการเพิ่มการบันทึกฟังก์ชันจะปรับใช้รายละเอียดและนับจากนี้เป็นต้นไปเมื่อใดก็ตามที่มีการเพิ่มไฟล์ลงในถัง S3 แลมด้าจะถูกทริกเกอร์
สังเกตภาพหน้าจอต่อไปนี้ซึ่งแสดงทริกเกอร์ S3 ที่เพิ่มใน AWS Lambda -
ขั้นตอนที่ 14
ตอนนี้ให้เราใช้เหตุการณ์ตัวอย่าง S3 เพื่อทดสอบฟังก์ชัน Lambda รหัสเดียวกันแสดงอยู่ที่นี่ -
Amazon S3 ใส่เหตุการณ์ตัวอย่าง
{
"Records": [{
"eventVersion": "2.0",
"eventTime": "1970-01-01T00:00:00.000Z",
"requestParameters": {
"ExampleIPAddress": "127.0.0.1"
},
"s3": {
"configurationId": "testConfigRule",
"object": {
"eTag": "0123456789abcdef0123456789abcdef",
"sequencer": "0A1B2C3D4E5F678901",
"key": "HappyFace.jpg",
"size": 1024
},
"bucket": {
"arn": bucketarn,
"name": "Examplebucket",
"ownerIdentity": {
"principalId": "Example"
}
},
"s3SchemaVersion": "1.0"
},
"responseElements": {
"x-amz-id-2": "Example123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
"x-amz-request-id": "Example123456789"
},
"awsRegion": "us-east-1",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "Example"
},
"eventSource": "aws:s3"
}]
}
คุณจะต้องใช้คำสั่งต่อไปนี้เพื่อรับรายละเอียดของไฟล์ที่อัปโหลดจากเหตุการณ์ S3 put -
event.Records[0].s3.object.key //will display the name of the file
คุณจะต้องใช้คำสั่งต่อไปนี้เพื่อรับชื่อที่เก็บข้อมูล -
event.Records[0].s3.bucket.name //will give the name of the bucket.
คุณจะต้องใช้คำสั่งต่อไปนี้เพื่อรับ EventName -
event.Records[0].eventName // will display the event name
ขั้นตอนที่ 15
ตอนนี้ให้เราอัปเดตโค้ด AWS Lambda เพื่อพิมพ์รายละเอียด S3 ดังที่แสดงด้านล่าง -
exports.lambdahandler = (event, context, callback) => {
callback(null, "Bucket name: "+event.Records[0].s3.bucket.name+"
File name:"+event.Records[0].s3.object.key );
};
ขั้นตอนที่ 16
บันทึกการเปลี่ยนแปลง คลิกTest และเข้าสู่เหตุการณ์ตัวอย่าง S3 -
ขั้นตอนที่ 17
ตอนนี้คลิก Test และคุณจะเห็นผลลัพธ์ดังที่แสดง -
ขั้นตอนที่ 18
ในการทดสอบทริกเกอร์บน S3 โดยใช้บริการ S3 AWS ให้อัปโหลดไฟล์ในที่เก็บข้อมูล S3: test bucket trigger. อัปเดตบทบาทที่ใช้กับ Lambda เพื่อใช้นโยบาย S3 และ SES (เพื่อส่งเมล) สำหรับสิทธิ์ การดำเนินการนี้จะอัปเดตโค้ด AWS Lambda เพื่อส่งอีเมลเพื่อดูทริกเกอร์ทำงาน -
รหัส AWS Lambda ที่อัปเดตมีดังที่แสดง -
var aws = require('aws-sdk');
var ses = new aws.SES({
region: 'us-east-1'
});
exports.lambdahandler = function(event, context, callback) {
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data: "Bucket name: "+event.Records[0].s3.bucket.name+" File name:"+event.Records[0].s3.object.key
}
},
Subject: {
Data: "S3 and AWS Lambda"
}
},
Example: "[email protected]"
};
console.log('===SENDING EMAIL===');
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
};
ภาพหน้าจอที่เกี่ยวข้องดังแสดงที่นี่ -
ขั้นตอนที่ 19
ตอนนี้อัปโหลดไฟล์และตรวจสอบรหัสอีเมลที่ให้ไว้ในรหัส AWS Lambda -
AWS CLIเป็นเครื่องมือบรรทัดคำสั่งที่ช่วยในการทำงานกับบริการของ AWS เราสามารถใช้มันเพื่อสร้างปรับปรุงลบเรียกใช้ฟังก์ชัน aws lambda ในบทนี้คุณจะพูดคุยเกี่ยวกับการติดตั้งและการใช้งาน AWS CLI โดยละเอียด
การติดตั้ง AWS CLI
ส่วนนี้จะแนะนำคุณตลอดการติดตั้ง AWS CLI บนระบบปฏิบัติการต่างๆ ทำตามขั้นตอนที่กำหนดและสังเกตภาพหน้าจอที่เกี่ยวข้องทุกที่ที่แนบมา
สำหรับ Windows
ตรวจสอบการกำหนดค่า Windows ของคุณและเลือกหนึ่งในลิงก์ต่อไปนี้สำหรับการติดตั้ง AWS CLI MSI -
สำหรับ Windows 64 บิต - ติดตั้ง AWS CLI MSI สำหรับ Windows (64 บิต)
สำหรับ Windows 32 บิต - ติดตั้ง AWS CLI MSI สำหรับ Windows (32)
เมื่อคุณเลือกลิงค์ที่เกี่ยวข้องและคลิกแล้วคุณจะพบหน้าต่างดังที่แสดงไว้ที่นี่ -
ถัดไปตั้งค่า Environment path in windows ดังแสดงในภาพหน้าจอด้านล่าง -
เมื่อเสร็จแล้วคุณสามารถใช้คำสั่งต่อไปนี้ในพรอมต์คำสั่งเพื่อดูว่า aws cli ติดตั้งแล้ว -
aws --version
จะแสดงรายละเอียดของเวอร์ชัน aws-cli ดังที่แสดงในภาพหน้าจอต่อไปนี้ -
สำหรับ Linux / Mac
สำหรับการติดตั้งบน Linux และ Mac คุณต้องมีเวอร์ชัน Python 2.6.3 หรือสูงกว่า จากนั้นใช้คำสั่งต่อไปนี้สำหรับกระบวนการติดตั้งเพิ่มเติม -
$ curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip" $ unzip awscli-bundle.zip
$ sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws
ตอนนี้เราต้องกำหนดการตั้งค่า AWS คุณสามารถใช้คำสั่งต่อไปนี้เพื่อจุดประสงค์นี้ -
aws configure
เพื่อจุดประสงค์นี้จำเป็นต้องมีรายละเอียดเช่น -
- รหัสคีย์การเข้าถึง AWS
- AWS Secret Access Key
- ชื่อภูมิภาคเริ่มต้น
- เอาต์พุตเริ่มต้นจากรูปแบบ
คุณสามารถรับรายละเอียดเหล่านี้ได้จากคอนโซล aws ของคุณ ไปที่ชื่อบัญชีของคุณที่มุมขวาบนตามที่แสดง -
ตอนนี้คลิก My Security Credentialsและเลือกผู้ใช้จากด้านซ้าย เพิ่มผู้ใช้พร้อมรายละเอียดตามที่ถาม
เพิ่มผู้ใช้และรับคีย์การเข้าถึงและคีย์ลับ หากต้องการดูคีย์การเข้าถึงใหม่ให้เลือกShow. ข้อมูลรับรองของคุณจะมีลักษณะดังที่แสดงด้านล่าง -
Access key ID − AOSAIOSFOCDD7Example
Secret access key − aJuirCVtnROUN/K7MDENG/bPxRfiCYExampleKEY
คำสั่งอ้างอิงสำหรับ AWS CLIS
ตารางต่อไปนี้จะให้การอ้างอิงคำสั่งที่พร้อมใช้งาน aws cli.
ชื่อของคำสั่ง aws cli | การอ้างอิงคำสั่ง |
---|---|
create-function | สร้างฟังก์ชัน - ฟังก์ชันชื่อ <value> - เวลาทำงาน <ค่า> - ค่ารูล <ค่า> - ตัวจัดการ <ค่า> [- รหัส <ค่า>] [- คำอธิบาย <ค่า>] [- หมดเวลา < value>] [- ขนาดหน่วยความจำ <value>] [- สภาพแวดล้อม <ค่า>] [--kms-key-arn <value>] [- แท็ก <value>] [--zip-file <value> ] [--cli-input-json <value>] |
list-functions | list-functions [--master-region <value>] [- function-version <value>] [--max-items <value>] [--cli-input-json <value>] [--starting- โทเค็น <value>] [- ขนาดหน้า <value>] [--generate-cli-skeleton <value>] |
get-function | get-function - function-name <value> [--qualifier <value>] [--cli-input-json <value>] [--generate-cli-skeleton <value>] |
get-function-configuration | get-function-configuration - function-name <value> [--qualifier <value>] [--cli-input-json <value>] [--generate-cli-skeleton <value>] |
get-account-settings | รับบัญชีการตั้งค่า [--cli-input-json <value>] [--generate-cli-skeleton <value>] |
update-function-configuration | การปรับปรุงฟังก์ชันการกำหนดค่า - ชื่อฟังก์ชัน <value> [--role <value>] [- ตัวจัดการ <ค่า>] [- คำอธิบาย <ค่า>] [- การหมดเวลา <ค่า>] [- หน่วยความจำ - ขนาด <value>] [--vpc-config <value>] [- สภาพแวดล้อม <value>] [--runtime <value>] [--dead-letter-config <value>] [--kms-key- arn <value>] [--tracing-config <value>] [--revision-id <value>] [--cli-input-json <value>] [--generate-cli-skeleton <value>] |
update-function-code | อัปเดตฟังก์ชันรหัส - ชื่อฟังก์ชัน <value> [--zip-file <value>] [--s3-bucket <value>] [--s3-key <value>] [--s3-object- เวอร์ชัน <value>] [- เผยแพร่ | --no-published] [--dry-run | --no-dry-run] [--revision-id <value>] [- cli-input-json <value>] [- create-cli-skeleton <value>] |
delete-function | ลบฟังก์ชัน - ฟังก์ชันชื่อ <value> [--qualifier <value>] [--cli-input-json <value>] [--generate-cli-skeleton <value>] |
ตอนนี้ให้เราพูดถึงคำสั่งเหล่านี้ทีละคำโดยละเอียด
สร้างฟังก์ชัน
api นี้จะสร้างฟังก์ชันแลมด้าใหม่ ต้องระบุรหัสในรูปแบบ zip หากฟังก์ชันที่จะสร้างมีอยู่แล้ว api จะล้มเหลว โปรดทราบว่าชื่อฟังก์ชันจะคำนึงถึงขนาดตัวพิมพ์
รวมคำสั่ง
รายการคำสั่งที่คุณสามารถใช้กับ create-function ได้ที่นี่ -
create-function
--function-name <value>
--runtime <value>
--role <value>
--handler <value>
[--code <value>]
[--description <value>]
[--timeout <value>]
[--memory-size <value>]
[--environment <value>]
[--kms-key-arn <value>]
[--tags <value>]
[--zip-file <value>]
[--cli-input-json <value>]
รวมตัวเลือก
ตัวเลือกต่างๆที่คุณสามารถใช้ได้กับฟังก์ชั่นข้างต้นมีดังนี้ -
--function-name (string)- ใช้ชื่อของฟังก์ชัน ชื่อสามารถเป็นอักขระ 64 บิต
--runtime(string)- ที่นี่คุณต้องระบุสภาพแวดล้อมรันไทม์เช่นการเลือกภาษา รายละเอียดของรันไทม์มีดังต่อไปนี้ -
มีตัวเลือก | รันไทม์ |
---|---|
Python v3.6 | python3.6 |
Python v2.7 | python2.7 |
NodeJS v6.10 | nodejs6.10 |
NodeJS v8.10 | nodejs8.10 |
Java | java8 |
ค # 1 | dotnetcore1.0 |
ค # 2 | dotnetcore2.0 |
ไป | go1.x |
--role(string)- นี่จะเป็นชื่อของนโยบายแลมบ์ดาเช่นบทบาทที่กำหนดให้กับฟังก์ชันแลมบ์ดาสำหรับการเข้าถึงบริการอื่น ๆ จะมีสิทธิ์ตามบทบาทที่ระบุ
--handler (string) - นี่คือชื่อของตัวจัดการที่จะเริ่มการเรียกใช้โค้ดแลมบ์ดา
- สำหรับ nodejs ชื่อตัวจัดการคือชื่อโมดูลที่เราส่งออก
- สำหรับ java คือ package.classname :: handler หรือ package.classname
- สำหรับ python ตัวจัดการคือ nameofthefile
--code (structure) −AWS รหัส Lambda
--description (string) - คำอธิบายสำหรับฟังก์ชัน AWS Lambda
--timeout (integer)- การหมดเวลาจะมีเวลาที่ฟังก์ชันแลมด้าต้องยุติการดำเนินการ ค่าเริ่มต้นคือ 3 วินาที
--memory-size (integer)- นี่คือหน่วยความจำที่มอบให้กับฟังก์ชัน aws lambda AWS จะจัดสรรจำนวน CPU และการจัดสรรหน่วยความจำตามหน่วยความจำที่กำหนด
--environment (structure) - เป็นวัตถุที่มีรายละเอียดสภาพแวดล้อมที่จำเป็นในฟังก์ชัน aws lambda
e.g : Variables = {Name1 = string, Name2 = string}
--kms-key-arn (string)- นี่คือชื่อทรัพยากรของ amazon (ARN) ที่ใช้ในการเข้ารหัสตัวแปรสภาพแวดล้อม หากไม่ได้ระบุไว้จะใช้การตั้งค่าเริ่มต้นในการเข้ารหัส
--zip-file (blob) - เส้นทางของไฟล์ zip ที่มีรายละเอียดของรหัส
--cli-input-json (string): ดำเนินการบริการตามสตริง JSON ที่ให้มา สตริง JSON เป็นไปตามรูปแบบที่จัดทำโดย --generate-cli-skeleton หากมีการจัดเตรียมอาร์กิวเมนต์อื่นไว้ในบรรทัดรับคำสั่งค่า CLI จะแทนที่ค่าที่ระบุโดย JSON
ตอนนี้ให้เราสร้างฟังก์ชัน AWS Lambda ง่ายๆโดยใช้รันไทม์เป็น nodejs และเพิ่ม console.logs ที่จะพิมพ์
พิจารณาโค้ดตัวอย่างเพื่อให้เข้าใจตรงกัน -
exports.handler = async (event) => {
console.log("Using aws cli");
return 'Hello from Lambda from aws cli!'
};
ตอนนี้ซิปไฟล์และจัดเก็บเป็นไฟล์ awscli.zip.
รับ ARN
สำหรับบทบาทนี้ให้เราใช้ไฟล์ arnจากบทบาทเดิมที่เราสร้างขึ้น ในการรับ ARN คุณจะต้องทำตามขั้นตอนดังที่แสดงไว้ที่นี่ สังเกตภาพหน้าจอตามลำดับทุกที่ที่แนบมา -
ขั้นตอนที่ 1
ไปที่ IAM และเลือกบทบาทที่คุณต้องการ Roles. รายละเอียด ARN สำหรับบทบาทจะแสดงดังที่แสดงด้านล่าง ใช้Role ARN ด้วย create-function ใน aws cli.
สังเกตตรงนี้ว่า role arn คือ arn: aws: iam :: 625297745038: role / lambdaapipolicy
คำสั่งที่มีค่าสำหรับ create-function มีดังนี้ -
aws lambda create-function
--function-name "awslambdausingcli"
--runtime "nodejs8.10"
--role "arn:aws:iam::625297745038:role/lambdaapipolicy"
--handler "awscli.handler"
--timeout 5
--memory-size 256
--zip-file "fileb://awscli.zip"
ตอนนี้หากคุณรันคำสั่งใน aws cli คุณจะพบผลลัพธ์ดังที่แสดงด้านล่าง -
ในคอนโซล AWS ฟังก์ชัน Lambda จะแสดงดังที่แสดงด้านล่าง -
รายละเอียดของฟังก์ชั่นแสดงไว้ที่นี่ -
รายละเอียดของการกำหนดค่ามีดังต่อไปนี้ -
คุณสามารถทดสอบฟังก์ชั่นและตรวจสอบผลลัพธ์ดังที่แสดง -
เอาต์พุตบันทึกที่เกี่ยวข้องจะแสดงที่นี่ -
รายการฟังก์ชั่น
API นี้ให้รายการฟังก์ชันที่สร้างขึ้นจนถึงปัจจุบันใน AWS Lambda
รวมคำสั่ง
ต่อไปนี้เป็นคำสั่งที่เชื่อมโยงกับ API นี้ -
list-functions
[--master-region <value>]
[--function-version <value>]
[--max-items <value>]
[--cli-input-json <value>]
ตัวเลือกภายใต้รายการฟังก์ชั่น
ต่อไปนี้เป็นตัวเลือกต่างๆที่คุณสามารถใช้ได้ภายใต้รายการฟังก์ชัน api -
--master-region(string)- ไม่จำเป็น ภูมิภาคที่ต้องการแสดงฟังก์ชัน
--function-version(string)- ไม่จำเป็น สิ่งนี้จะให้ฟังก์ชันเวอร์ชัน
--max-items(integer)- ไม่จำเป็น สิ่งนี้จะให้รายการตามมูลค่าที่ระบุ
--cli-input-json(string)- ไม่จำเป็น จะดำเนินการตามไฟล์ json ที่ให้มา
คำสั่งที่มีค่า list-functions มีดังนี้ -
aws lambda list-functions --max-items 3
คำสั่งแสดงรายละเอียดดังนี้ -
รับฟังก์ชั่น
api นี้จะให้รายละเอียดของฟังก์ชั่นและลิงค์ url ที่อัพโหลดไฟล์ zip โดยใช้ create-function URL ที่มีรายละเอียด zip จะใช้ได้เป็นเวลา 10 นาทีเท่านั้น
รวมคำสั่ง
ต่อไปนี้เป็นคำสั่งที่เกี่ยวข้องกับ api นี้ -
get-function
--function-name <value>
[--qualifier <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
รวมตัวเลือก
--function-name- ชื่อของฟังก์ชัน AWS Lambda คุณยังสามารถระบุชื่อทรัพยากร Amazon ของฟังก์ชัน
--qualifier(string)- ไม่บังคับ สามารถใช้เวอร์ชันของฟังก์ชันเพื่อดูรายละเอียดของฟังก์ชันได้
คำสั่งที่มีค่าเพื่อรับฟังก์ชันคือ -
aws lambda get-function --function-name awslambdausingcli
รายละเอียดการแสดงคำสั่งมีดังนี้ -
มันให้ url ที่มีการอัพโหลดรหัสไปรษณีย์ ในกรณีข้างต้น url คือ -
https://prod-04-2014-
tasks.s3.amazonaws.com/snapshots/625297745038/awslambdausingcli-97048f8d-4a08
-4ed9-99d9-acb00d2063d2?versionId=d04HKvPu9S2zz8pzjbW6Rmf5o5fxnc_r&X-Amz-Security
-Token=FQoDYXdzEKT%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaDCpTmGvtwKToPBiWcyK3A96UcJEnwvYDhMbbxu
%2Bg2gffK2ocfnlEeiCHak8QqqE1RFpbKrdks9NzxP9gNbagL4M9RValxJ1a9PUY%2FOdAekscRHOiX00MVAxUlI8
2pKryhdOwLJWSj0uRzqvOxCcBwJenHrSNPeG6lMa2ZDo0qZFEUDONSaTg4nuSnJK1f6t3pMAKu4vF9wPvf92G%2BU
60rUxwleggigISmD9l1IlZse3%2BVF1JlNuN%2F5d85v0y2Q%2F%2BO515CybcZpn91sHPYG8JMJ00LsrkQ2Ww4VU
9Zz5c5QYH4JYPj0CyEgSz9b%2FMceMPpOoPUAMjctb%2FEwQqcShZeqAr9%2Fcd2ZI%2BXl2%2Bs4ri0ucgPvQQvs
eGIIiZbX3GqdwR2jb1nylrAEIfiuFMoSWfcFYoYtuL0MZnjGR9jy2GNkp6MB%2BlHHr7%2BnuFRUzU26rgDYmdE1w
Rb3%2B21Jm49WGDa9opRLvUxFaux57Or70haib2FuKzN6Gf3Vzzk5KPdWsYUpaLyf%2B1ovEytOZhB1JEXuCs%2FG
IlOXS88yxT%2BpOKmyxweiezpGgI%2FAkSAQTbSRsYQKIOFyIJNHzplwrJKhy28vy60numIBIo9Zqq2AU%3D
&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20180527T112426Z&X-Amz-
SignedHeaders=host&X-Amz-Expires=600&X-Amz-
Credential=ASIAICSQHLSBWFP37U4Q%2F20180527%2Fus-
east-1%2Fs3%2Faws4_request&X-Amz-Signature=
8b97e7d6d7da13313068e027894d2c875be5e50a0c5a62550f55307985bdc1aa
รับฟังก์ชั่นการกำหนดค่า
สิ่งนี้จะให้รายละเอียดการกำหนดค่าของฟังก์ชัน AWS Lambda
ต่อไปนี้เป็นคำสั่งที่ใช้ร่วมกับ api นี้ -
get-function-configuration
--function-name <value>
[--qualifier <value>]
The following are the options used with
--function-name (string) −ชื่อของฟังก์ชัน aws lambda คุณยังสามารถระบุชื่อทรัพยากร Amazon ของฟังก์ชัน
--qualifier(string) − ไม่จำเป็นเวอร์ชันฟังก์ชันสามารถใช้เพื่อรับรายละเอียดของฟังก์ชัน
คำสั่งที่มีค่าเพื่อรับฟังก์ชันคือ -
aws lambda get-function-configuration --function-name awslambdausingcli
คำสั่งแสดงรายละเอียดดังนี้ -
รับบัญชีการตั้งค่า
api นี้ให้การตั้งค่าบัญชี
คำสั่งที่เกี่ยวข้อง
คำสั่งที่คุณสามารถใช้กับ api นี้คือ -
get-account-settings
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
ตัวเลือกที่เกี่ยวข้อง
คุณสามารถใช้ตัวเลือกต่อไปนี้กับ api นี้ -
--cli-input-json(string) − ดำเนินการบริการตามสตริง json ที่ให้มา
--generate-cli-skeleton(string) − มันพิมพ์เอาต์พุต json โดยไม่ต้องส่งคำขอ API
คุณสามารถใช้คำสั่งต่อไปนี้สำหรับ get-account-settings -
aws lambda get-account-settings
คุณสามารถดูผลลัพธ์ต่อไปนี้เมื่อคุณดำเนินการคำสั่งที่ให้ไว้ด้านบน -
อัปเดตฟังก์ชันการกำหนดค่า
API นี้ช่วยในการอัปเดตรายละเอียดการกำหนดค่าสำหรับฟังก์ชัน AWS Lambda ที่สร้างขึ้น คุณสามารถเปลี่ยนหน่วยความจำการหมดเวลาตัวจัดการบทบาทรันไทม์คำอธิบาย ฯลฯ
คำสั่งที่เกี่ยวข้อง
คำสั่งต่อไปนี้เป็นคำสั่งที่เกี่ยวข้องกับ api update-function-configuration -
update-function-configuration
--function-name <value>
[--role <value>]
[--handler <value>]
[--description <value>]
[--timeout <value>]
[--memory-size <value>]
[--environment <value>]
[--runtime <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
ตัวเลือกที่เกี่ยวข้อง
ต่อไปนี้เป็นตัวเลือกที่เกี่ยวข้องกับ api update-function-configuration -
--function-name − ชื่อของฟังก์ชัน aws lambda
--role (string) −ไม่จำเป็น. จำเป็นต้องอัปเดต ARN ของบทบาท
--handler (string) −ไม่จำเป็น. รายละเอียดตัวจัดการของฟังก์ชัน aws lambda
--description(string) −ไม่จำเป็น. คำอธิบายสำหรับฟังก์ชัน
--timeout(integer) −ไม่จำเป็น. เวลาที่ต้องการเพื่อให้ฟังก์ชัน aws lambda สามารถยุติได้
--memory-size(integer) −ไม่จำเป็น. นี่คือหน่วยความจำที่มอบให้กับฟังก์ชัน aws lambda AWS จะจัดสรรจำนวน CPU และการจัดสรรหน่วยความจำตามหน่วยความจำที่กำหนด
--environment (structure) −ไม่จำเป็น. เป็นวัตถุที่มีรายละเอียดสภาพแวดล้อมที่จำเป็นในฟังก์ชัน aws lambda
e.g: Variables = {Name1 = string, Name2 = string}
--runtime(string) − ที่นี่คุณต้องระบุสภาพแวดล้อมรันไทม์เช่นการเลือกภาษา
รายละเอียดของรันไทม์แสดงในตารางด้านล่าง -
มีตัวเลือก | รันไทม์ |
---|---|
Python v3.6 | python3.6 |
Python v2.7 | python2.7 |
NodeJS v6.10 | nodejs6.10 |
NodeJS v8.10 | nodejs8.10 |
Java | java8 |
ค # 1 | dotnetcore1.0 |
ค # 2 | dotnetcore2.0 |
ไป | go1.x |
--cli-input-json (string) −ไม่จำเป็น. สิ่งนี้จะดำเนินการกับ api ตามที่ระบุในสตริง json ที่ให้มา
--generate-cli-skeleton (string) −ไม่จำเป็น. สิ่งนี้จะส่งออกโครงกระดูก JSON ของรายละเอียดทั้งหมดโดยไม่ต้องดำเนินการ api เอาต์พุตสามารถใช้เป็นอินพุตไปยัง--cli-input-json.
ตอนนี้ให้เราไล่หน่วยความจำและระยะหมดเวลาของฟังก์ชัน AWS Lambda ที่เราสร้างไว้ก่อนหน้านี้ ทำตามขั้นตอนที่ระบุด้านล่างและสังเกตภาพหน้าจอที่เกี่ยวข้องที่แนบมาเพื่อจุดประสงค์นี้ -
ขั้นตอนที่ 1
หน่วยความจำและการหมดเวลาก่อนที่จะเกิดการเปลี่ยนแปลงมีดังนี้ -
ขั้นตอนที่ 2
ตอนนี้กับ update-function-configurationให้เราเปลี่ยนหน่วยความจำและการหมดเวลาเป็น 320MB และหมดเวลาเป็น 10 วินาที เพื่อจุดประสงค์นี้ให้ใช้คำสั่งต่อไปนี้พร้อมค่า -
aws lambda update-function-configuration --function-name “awslambdusingcli”
--timeout 10 --memory-size 320
ขั้นตอนที่ 3
จากนั้นคุณจะเห็นผลลัพธ์ต่อไปนี้เป็นจอแสดงผล -
ขั้นตอนที่ 4
การแสดงผลในคอนโซล AWS หลังจากใช้งาน update-function-configuration มีดังนี้ -
อัปเดตฟังก์ชันรหัส
api นี้จะอัปเดตโค้ดสำหรับฟังก์ชัน AWS Lambda ที่มีอยู่
คำสั่งที่เกี่ยวข้อง
update-function-code
--function-name <value>
[--zip-file <value>]
[--s3-bucket <value>]
[--s3-key <value>]
[--s3-object-version <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
ตัวเลือกที่เกี่ยวข้อง
ต่อไปนี้เป็นตัวเลือกที่เกี่ยวข้องกับ api update-function-code -
--function-name(string) − ชื่อของฟังก์ชัน aws lambda
--zip-file (blob) −ไม่จำเป็น. เส้นทางของไฟล์ zip ซึ่งมีรหัสที่จะอัปเดต
--s3-bucket(string) −ไม่จำเป็น. ชื่อที่เก็บข้อมูล S3 ซึ่งมีไฟล์ซิปพร้อมรหัสที่อัปโหลด
--s3-key(string) −ไม่จำเป็น. ชื่อคีย์ออบเจ็กต์ AWS s3 ที่ต้องอัปโหลด
--s3-object-version (string) −ไม่จำเป็น. เวอร์ชันวัตถุ AWS s3
--cli-input-json (string) −ไม่จำเป็น. สิ่งนี้จะดำเนินการกับ api ตามที่ระบุในสตริง json ที่ให้มา
--generate-cli-skeleton (string) −ไม่จำเป็น. สิ่งนี้จะส่งออกโครงกระดูก JSON ของรายละเอียดทั้งหมดโดยไม่ต้องดำเนินการ api เอาต์พุตสามารถใช้เป็นอินพุตไปยัง --cli-input-json
รหัสที่อัปเดตมีดังที่แสดงด้านล่าง -
exports.handler = async (event, context) => {
console.log("Using aws cli");
console.log()
return 'Hello from Lambda from aws cli!'
};
คุณสามารถใช้สิ่งต่อไปนี้ command with values for this purpose -
aws lambda update-function-code --function-name "awslambdausingcli"
--zip-file "fileb://awscli.zip"
ผลลัพธ์ที่สอดคล้องกันดังแสดงที่นี่ -
การแสดงผลจากคอนโซล AWS ดังแสดงที่นี่ -
เอาต์พุตบันทึกที่สอดคล้องกันดังแสดงด้านล่าง -
ลบฟังก์ชัน
delete aws cli api จะลบฟังก์ชันที่กำหนด
รวมคำสั่ง
รายละเอียดคำสั่งเดียวกันได้รับที่นี่ -
delete-function
--function-name <value>
[--qualifier <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
รวมตัวเลือก
ตัวเลือกที่รวมอยู่ใน api นี้มีดังต่อไปนี้ -
--function-name(string) − สิ่งนี้จะใช้ชื่อฟังก์ชัน lambda หรือ arn ของฟังก์ชัน aws lambda
--qualifier (string) −นี่เป็นทางเลือก คุณสามารถระบุเวอร์ชันของ aws lambda ที่ต้องลบได้ที่นี่
-- cli-input-json(string) −ดำเนินการบริการตามสตริง JSON ที่ให้มา สตริง JSON เป็นไปตามรูปแบบที่จัดทำโดย --generate-cli-skeleton หากมีการจัดเตรียมอาร์กิวเมนต์อื่นไว้ในบรรทัดรับคำสั่งค่า CLI จะแทนที่ค่าที่ระบุโดย JSON
--generate-cli-skeleton(string) − มันพิมพ์ json skeleton ไปยังเอาต์พุตมาตรฐานโดยไม่ต้องส่งคำขอ API
aws lambda delete-function --function-name "lambdatestcli"
ตอนนี้สังเกตว่าฟังก์ชันจะไม่ปรากฏในรายการฟังก์ชัน AWS Lambda -
AWS Lambda สามารถสร้างและปรับใช้โดยใช้เฟรมเวิร์กแบบไร้เซิร์ฟเวอร์ ช่วยให้คุณสร้างทริกเกอร์ AWS Lambda และปรับใช้สิ่งเดียวกันได้โดยการสร้างบทบาทที่ต้องการ เฟรมเวิร์กแบบไร้เซิร์ฟเวอร์ช่วยให้จัดการโปรเจ็กต์ขนาดใหญ่ได้ง่ายขึ้น เหตุการณ์และทรัพยากรที่จำเป็นจะถูกเขียนขึ้นในที่เดียวและมีเพียงไม่กี่คำสั่งที่ช่วยในการปรับใช้ฟังก์ชันทั้งหมดบนคอนโซล AWS
ในบทนี้คุณจะได้เรียนรู้รายละเอียดวิธีการเริ่มต้นใช้งาน AWS serverless framework
ติดตั้ง Serverless Framework โดยใช้การติดตั้ง npm
ในการเริ่มต้นคุณต้องติดตั้งก่อน nodejs. คุณสามารถตรวจสอบ nodejs ได้ดังนี้ -
คุณจะต้องใช้คำสั่งต่อไปนี้เพื่อติดตั้งแบบไร้เซิร์ฟเวอร์โดยใช้แพ็คเกจ npm -
npm install -g serverless
เมื่อ npm เสร็จสิ้นให้รันคำสั่งแบบเซิร์ฟเวอร์ซึ่งแสดงรายการคำสั่งที่จะใช้ในการสร้างและปรับใช้ฟังก์ชัน AWS Lambda สังเกตภาพหน้าจอด้านล่าง -
คุณยังสามารถใช้ sls แทน serverless sls เป็นคำสั่งชวเลขสำหรับเซิร์ฟเวอร์
ในกรณีที่คุณต้องการความช่วยเหลือเกี่ยวกับคำสั่ง sls, คุณสามารถใช้คำสั่งต่อไปนี้ -
sls create --help
สำหรับการสร้างเฟรมเวิร์กแบบไร้เซิร์ฟเวอร์คุณต้องทำตามขั้นตอนด้านล่าง -
ขั้นตอนที่ 1
ในการเริ่มใช้เฟรมเวิร์กแบบไร้เซิร์ฟเวอร์เราจำเป็นต้องเพิ่มข้อมูลรับรอง โดยสิ่งนี้คุณสามารถเป็นผู้ใช้ก่อนในคอนโซล AWS ดังนี้ -
ขั้นตอนที่ 2
คลิกที่ Next:Permissionsปุ่มเพื่อเพิ่มสิทธิ์ คุณจะต้องแนบนโยบายที่มีอยู่หรือการเข้าถึงของผู้ดูแลระบบให้กับผู้ใช้รายนี้
ขั้นตอนที่ 3
คลิก Create Userเพื่อเพิ่มผู้ใช้ มันจะแสดงคีย์การเข้าถึงและคีย์ลับที่เราต้องกำหนดค่าเฟรมเวิร์กไร้เซิร์ฟเวอร์ -
กำหนดค่า AWS Serverless Framework
ให้เราดูวิธีกำหนดค่า AWS serverless framework คุณสามารถใช้คำสั่งต่อไปนี้เพื่อจุดประสงค์นี้ -
sls config credentials --provider aws --key accesskey --secret secretkey
โปรดทราบว่ารายละเอียดของข้อมูลรับรองที่ป้อนนั่นคือไฟล์ access key และ secret key จะถูกเก็บไว้ในไฟล์ file /aws/credentials.
ขั้นแรกสร้างโฟลเดอร์ที่คุณต้องการจัดเก็บไฟล์โครงการของคุณ
ต่อไปเราจะเริ่มงานใน aws-serverless โฟลเดอร์
สร้าง AWS Lambda โดยใช้ Serverless Framework
ตอนนี้ให้เราสร้างฟังก์ชัน Lambda ด้วยเฟรมเวิร์กไร้เซิร์ฟเวอร์โดยใช้ขั้นตอนที่ระบุด้านล่าง -
ขั้นตอนที่ 1
ต่อไปนี้เป็นรายละเอียดสำหรับเซิร์ฟเวอร์ create คำสั่ง -
ขั้นตอนที่ 2
ตอนนี้เราต้องกำหนดแม่แบบซึ่งมีดังต่อไปนี้ -
AWS-nodejs, aws-nodejs-typescript, aws-nodejs-ecma-script, aws-python, aws-python3, aws-groovy-gradle etc.
ขั้นตอนที่ 3
เราจะใช้ประโยชน์จาก aws-nodejsเทมเพลตเพื่อสร้างโครงการแรกของเราโดยใช้เฟรมเวิร์กไร้เซิร์ฟเวอร์ คำสั่งสำหรับวัตถุประสงค์เดียวกันดังที่แสดงไว้ที่นี่ -
sls create --template aws-nodejs
โปรดสังเกตว่าคำสั่งนี้สร้างต้นแบบสำหรับเทมเพลต aws-nodejs
ขั้นตอนที่ 4
ตอนนี้เปิดโฟลเดอร์ที่สร้างใน IDE ที่นี่เราใช้รหัส Visual Studio และโครงสร้างโฟลเดอร์มีดังนี้ -
ขั้นตอนที่ 5
มี 2 ไฟล์ที่สร้างขึ้น: handler.js และ Serverless.yml
รายละเอียดฟังก์ชันพื้นฐานของ AWS Lambda แสดงอยู่ใน handler.js ดังต่อไปนี้ -
'use strict';
module.exports.hello = (event, context, callback) => {
const response = {
statusCode: 200,
body: JSON.stringify({
message: 'Go Serverless v1.0! Your function executed successfully!',
input: event,
}),
};
callback(null, response);
// Use this code if you don't use the http event with the LAMBDA-PROXY integration
// callback(null, { message: 'Go Serverless v1.0! Your function executed successfully!', event });
};
ไฟล์นี้ Serverless.yml มีรายละเอียดการกำหนดค่าของเฟรมเวิร์กไร้เซิร์ฟเวอร์ดังที่แสดงด้านล่าง -
# Welcome to Serverless!
#
# This file is the main config file for your service.
# It's very minimal at this point and uses default values.
# You can always add more config options for more control.
# We've included some commented out config Examples here.
# Just uncomment any of them to get that config option.
#
# For full config options, check the docs:
# docs.serverless.com
#
# Happy Coding!
service: aws-nodejs # NOTE: update this with your service name
# You can pin your service to only deploy with a specific Serverless version
# Check out our docs for more details
# frameworkVersion: "=X.X.X"
provider:
name: aws
runtime: nodejs6.10
# you can overwrite defaults here
# stage: dev
# region: us-east-1
# you can add statements to the Lambda function's IAM Role here
# iamRoleStatements:
# - Effect: "Allow"
# Action:
# - "s3:ListBucket"
# Resource: { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" : "ServerlessDeploymentBucket" } ] ] }
# - Effect: "Allow"
# Action:
# - "s3:PutObject"
# Resource:
# Fn::Join:
# - ""
# - - "arn:aws:s3:::"
# - "Ref" : "ServerlessDeploymentBucket"
# - "/*"
# you can define service wide environment variables here
# environment:
# variable1: value1
# you can add packaging information here
#package:
# include:
# - include-me.js
# - include-me-dir/**
# exclude:
# - exclude-me.js
# - exclude-me-dir/**
functions:
hello:
handler: handler.hello
# The following are a few example events you can configure
# NOTE: Please make sure to change your handler code to work with those events
# Check the event documentation for details
# events:
# - http:
# path: users/create
# method: get
# - s3: ${env:BUCKET}
# - schedule: rate(10 minutes)
# - sns: greeter-topic
# - stream: arn:aws:dynamodb:region:XXXXXX:table/foo/stream/1970-01-01T00:00:00.000
# - alexaSkill: amzn1.ask.skill.xx-xx-xx-xx
# - alexaSmartHome: amzn1.ask.skill.xx-xx-xx-xx
# - iot:
# sql: "SELECT * FROM 'some_topic'"
# - cloudwatchEvent:
# event:
# Example:
# - "aws.ec2"
# detail-type:
# - "EC2 Instance State-change Notification"
# detail:
# state:
# - pending
# - cloudwatchLog: '/aws/lambda/hello'
# - cognitoUserPool:
# pool: MyUserPool
# trigger: PreSignUp
# Define function environment variables here
# environment:
# variable2: value2
# you can add CloudFormation resource templates here
#resources:
# resources:
# NewResource:
# Type: AWS::S3::Bucket
# Properties:
# BucketName: my-new-bucket
# Outputs:
# NewOutput:
# Description: "Description for the output"
# Value: "Some output value"
ตอนนี้เราจำเป็นต้องเพิ่มการเปลี่ยนแปลงในไฟล์ serverless.yml ตามความต้องการของเรา คุณสามารถใช้คำสั่งตามที่ระบุด้านล่าง -
คุณสามารถใช้คำสั่งต่อไปนี้สำหรับ Service -
service: aws-nodejs # NOTE: update this with your service name
ตอนนี้เปลี่ยนบริการที่นี่และเพิ่มชื่อให้กับโฟลเดอร์ของเราตามที่แสดง -
service: aws-serverless # NOTE: update this with your service name
รายละเอียดผู้ให้บริการมีดังรูป -
provider:
name: aws
runtime: nodejs6.10
ผู้ให้บริการคือ aws และรันไทม์คือ nodejs6.10. เราจำเป็นต้องเพิ่มไฟล์region ที่เราจะดำเนินการและ stage, นั่นคือ dev or prodสภาพแวดล้อมสำหรับโครงการ ดังนั้นนี่คือรายละเอียดล่าสุดของผู้ให้บริการ: ผู้ให้บริการ -
name: aws
runtime: nodejs6.10
# you can overwrite defaults here
stage: prod
region: us-east-1
บทบาท IAM
iam roleนั่นคือรหัสสำหรับสิทธิ์ในการทำงานกับ Lambda จะแสดงที่นี่ในไฟล์ .yml ไฟล์ -
# iamRoleStatements:
# - Effect: "Allow"
# Action:
# - "s3:ListBucket"
# Resource: { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" : "ServerlessDeploymentBucket" } ] ] }
# - Effect: "Allow"
# Action:
# - "s3:PutObject"
# Resource:
# Fn::Join:
# - ""
# - - "arn:aws:s3:::"
# - "Ref" : "ServerlessDeploymentBucket"
# - "/*"
โปรดทราบว่าเราจำเป็นต้องให้รายละเอียดของบทบาทนั่นคือสิทธิ์ที่จำเป็นกับบริการอื่น ๆ ของ AWS ในส่วนด้านบน
รายละเอียด AWS Lambda Handler
ชื่อของฟังก์ชันการส่งออกใน handler.jsสวัสดี ดังนั้นตัวจัดการคือชื่อของไฟล์ตามด้วยชื่อการส่งออก
functions:
hello:
handler: handler.hello
รายละเอียดทรัพยากรเกี่ยวกับบริการ s3 ที่เพิ่มตามที่แสดงด้านล่างที่นี่ -
# you can add CloudFormation resource templates here
#resources:
# resources:
# NewResource:
# Type: AWS::S3::Bucket
# Properties:
# BucketName: my-new-bucket
# Outputs:
# NewOutput:
# Description: "Description for the output"
# Value: "Some output value"
ปรับใช้ AWS Lambda โดยใช้ Serverless Framework
ให้เราปรับใช้ฟังก์ชันแลมด้าข้างต้นกับคอนโซล AWS คุณสามารถใช้ขั้นตอนต่อไปนี้เพื่อจุดประสงค์นี้ -
ขั้นตอนที่ 1
ขั้นแรกคุณจะต้องใช้คำสั่งต่อไปนี้ -
sls deploy
ขั้นตอนที่ 2
ตอนนี้คุณควรเห็นฟังก์ชันในคอนโซล AWS แล้วดังที่แสดง รายละเอียดของ AWS แบบไร้เซิร์ฟเวอร์จะถูกบันทึกไว้ในการสร้างระบบคลาวด์ของ AWS เพื่อจุดประสงค์นี้ไปที่บริการ AWS แล้วเลือกCloudFormation. รายละเอียดของ AWS Lambda แสดงดังต่อไปนี้ -
สังเกตว่าชื่อที่กำหนดคือชื่อโครงการตามด้วยขั้นตอนที่ใช้
ขั้นตอนที่ 3
สร้างบทบาท IAM สำหรับ AWS Lambda และกลุ่มบันทึกสำหรับ AWS cloudwatch ถัง S3 ถูกสร้างขึ้นซึ่งมีการจัดเก็บรายละเอียดรหัสและรายละเอียดการกำหนดค่า
สิ่งนี้สร้างขึ้นโดยคำสั่ง sls deploy. คุณไม่จำเป็นต้องระบุบทบาท iam แต่จะถูกสร้างขึ้นตามค่าเริ่มต้นในช่วงdeploy เวที.
ขั้นตอนที่ 4
ลำดับเหตุการณ์โดยละเอียดจะแสดงอยู่ด้านล่างในบริการการก่อตัวของคลาวด์
รหัส AWS Lambda
รหัส AWS Lambda และการตั้งค่าการดำเนินการแสดงอยู่ในภาพหน้าจอด้านล่าง -
เมื่อคุณทดสอบฟังก์ชัน Lambda คุณจะพบผลลัพธ์ต่อไปนี้ -
เอาต์พุตบันทึกสำหรับฟังก์ชันข้างต้นแสดงที่นี่ -
เรายังสามารถทดสอบฟังก์ชัน AWS Lambda โดยใช้คำสั่งแบบไร้เซิร์ฟเวอร์ดังที่แสดงด้านล่าง -
sls invoke --function hello
ไวยากรณ์ของคำสั่งเรียกใช้แสดงที่นี่ -
sls invoke --function hello
คำสั่งเรียกใช้นี้เรียกใช้ฟังก์ชัน AWS Lambda และแสดงผลลัพธ์ในพรอมต์คำสั่งดังที่แสดงด้านล่าง -
คุณยังสามารถทดสอบฟังก์ชัน Lambda ก่อนที่จะปรับใช้และคำสั่งเดียวกันโดยใช้คำสั่งต่อไปนี้ -
sls invoke local --function hello
โปรดทราบว่าไม่สามารถทดสอบภายในเครื่องได้เสมอไปเนื่องจากไม่สามารถจำลองทรัพยากรเช่น S3 และ DynanoDB บนสภาพแวดล้อมภายในเครื่องได้ เฉพาะการเรียกใช้ฟังก์ชันพื้นฐานเท่านั้นที่สามารถทดสอบได้ในเครื่อง
การใช้ API Gateway และ AWS Lambda กับ Serverless Framework
ให้เราดูวิธีสร้างโปรเจ็กต์ใหม่เพื่อทำงานกับ Lambda และ api gateway คุณสามารถใช้คำสั่งต่อไปนี้เพื่อจุดประสงค์นี้ -
sls create --template aws-nodejs
ตอนนี้เปิด aws-apiโครงการในรหัสภาพ คุณจะเห็นว่าไฟล์handler.js และ serverless.ymlไฟล์ที่สร้างขึ้น ให้เราทำการเปลี่ยนแปลงเพื่อเพิ่ม api gateway
คุณจะต้องทำการเปลี่ยนแปลงต่อไปนี้ใน serverless.yml -
ตอนนี้รายละเอียดกิจกรรมที่เพิ่มสำหรับการเปิดใช้งาน API เกตเวย์ด้วย AWS Lambda -
มีสิ่งใหม่เพิ่มเข้ามาที่นี่เรียกว่า events. เราได้ระบุเหตุการณ์เป็นhttpพร้อมกับเส้นทางและวิธีการ
เส้นทางคือจุดสิ้นสุดที่เราจะใช้เมื่อสร้างเส้นทางเกตเวย์ api และวิธีที่ใช้คือ GET
สังเกตว่าตัวจัดการคือ handler.helloและสวัสดีเป็นชื่อการส่งออกจาก handler.js
โปรดทราบว่าคุณไม่จำเป็นต้องปรับใช้เกตเวย์ api ที่นี่เนื่องจากเฟรมเวิร์กไร้เซิร์ฟเวอร์จะดำเนินการ
ตอนนี้เราจะเรียกใช้ไฟล์ sls deploy คำสั่งเพื่อสร้างฟังก์ชัน AWS Lambda พร้อมทริกเกอร์เป็น api gateway.
sls deploy
สังเกตว่ารายละเอียดการปรับใช้อยู่ในรายการด้านบน มันให้Geturl ที่มีจุดสิ้นสุดเป็นรายละเอียดเส้นทาง เวทีคือprodใช้ใน url เช่นเดียวกัน ชื่อของฟังก์ชันคือaws-api-prod-hello.
ให้เรากด url และดูผลลัพธ์ คุณสามารถดูคำตอบต่อไปนี้ที่เราได้รับจาก api-gateway get url -
{"message":"Go Serverless v1.0! Your function executed
successfully!","input":{"resource":"/first-api","path":"/first-api","httpMethod":
"GET","headers":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,
image/webp,image/apng,*/*;q=0.8","Accept-Encoding":"gzip, deflate, br","Accept-Language":"en-US,en;q=0.9","CloudFront-Forwarded-Proto":
"https","CloudFront-Is-Desktop-Viewer":"true","CloudFront-Is-Mobile-Viewer":
"false","CloudFront-Is-SmartTV-Viewer":"false","CloudFront-Is-Tablet-Viewer":
"false","CloudFront-Viewer-Country":"IN","Host":"nvbhfdojfg.execute-api.us-east-1.
amazonaws.com","upgrade-insecure-requests":"1","User-Agent":"Mozilla/5.0
(Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/66.0.3359.181 Safari/537.36","Via":"2.0 707912794802dbb4825c79b7d8626a5d.cloudfront.net (CloudFront)","X-Amz-Cf-Id":"j70MMqkWFp6kmvuauzp_nvTbI-WwKIQmm2Jl5hzSoN6gkdvX11hh-g==",
"X-Amzn-Trace-Id":"Root=1-5b13f9ef-5b012e36b7f40b5013a326fc","X-Forwarded-For":"157.33.133.217, 54.182.242.73","X-Forwarded-Port":"443","X-Forwarded-Proto":"https"},
"queryStringParameters":null,"pathParameters":null,"stageVariables":null,
"requestContext":{"resourceId":"pes5sy","resourcePath":"/first-api","httpMethod":
"GET","extendedRequestId":"H6P9fE-MoAMFdIg=","requestTime":"03/Jun/2018:14:23:
43 +0000","path":"/prod/first-api","accountId":"625297745038","protocol":"HTTP/1.1",
"stage":"prod","requestTimeEpoch":1528035823928,"requestId":"b865dbd6-6739-11e8-b135
-a30269a8ec58","identity":{"cognitoIdentityPoolId":null,"accountId":null,
"cognitoIdentityId":null,"caller":null,"SourceIp":"157.33.133.217","accessKey":null,
"cognitoAuthenticationType":null,"cognitoAuthenticationProvider":null,"userArn":null,
"userAgent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/66.0.3359.181 Safari/537.36","user":null},"apiId":"nvbhfdojfg"},"body":null,
"isBase64Encoded":false}}
รายละเอียดเหตุการณ์ยังมีอยู่ในผลลัพธ์เมื่อคุณกด url httpMethod คือ GET และ queryStringParameters เป็นโมฆะเนื่องจากไม่มีสิ่งใดส่งผ่านในสตริงแบบสอบถาม รายละเอียดกิจกรรมมอบให้input ซึ่งเราได้ระบุไว้ในตัวจัดการ AWS Lambda -
ผลลัพธ์ที่เราได้รับจากเกตเวย์ api เป็นเพียงไฟล์ body รายละเอียดเช่น message และ input. การตอบสนองถูกควบคุมทั้งหมดโดยเกตเวย์ api และวิธีแสดงเป็นเอาต์พุต
ตอนนี้ให้เราส่งอินพุตไปยัง GET url ในสตริงการสืบค้นและดูการแสดงผล -
จากนั้นคุณจะเห็นผลลัพธ์ของ querystring ดังที่แสดงด้านล่าง -
{"message":"Go Serverless v1.0! Your function executed
successfully!","input":{"resource":"/first-api","path":"/first-api","httpMethod":
"GET","headers":{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,
image/webp,image/apng,*/*;q=0.8","Accept-Encoding":"gzip, deflate,
br","Accept-Language":"en-US,en;q=0.9","CloudFront-Forwarded-Proto":"https",
"CloudFront-Is-Desktop-Viewer":"true","CloudFront-Is-Mobile-Viewer":"false",
"CloudFront-Is-SmartTV-Viewer":"false","CloudFront-Is-Tablet-Viewer":"false",
"CloudFront-Viewer-Country":"IN","Host":"nvbhfdojfg.execute-api.us-east-1.amazonaws.com",
"upgrade-insecure-requests":"1","User-Agent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36","Via":"2.0
8b1d3263c2fbd0a2c270b174d7aa3d61.cloudfront.net (CloudFront)","X-Amz-Cf-Id":"JIBZw3I-blKbnpHP8LYXPVolCgdW5KmEukZS4at9mi4vrWBMI-UKNw==",
"X-Amzn-Trace-Id":"Root=1-5b13ff90-7d6e38d4c0e4a5d4e6184f30","X-Forwarded-For":
"157.33.133.217, 54.182.242.127","X-Forwarded-Port":"443","X-Forwarded-Proto":"https"},"queryString
Parameters":{"displaymessage":"Hello"},"pathParameters":null,"stageVariables":null,
"requestContext":{"resourceId":"pes5sy","resourcePath":"/first-api","httpMethod":
"GET","extendedRequestId":"H6TeiG34oAMFguA=","requestTime":"03/Jun/2018:14:47:44 +0000","path":"/prod/first-api","accountId":"625297745038","protocol":"HTTP/1.1",
"stage":"prod","requestTimeEpoch":1528037264252,"requestId":"12e5dca3-
673d-11e8-8966-69fcf43bd4db","identity":{"cognitoIdentityPoolId":null,"accountId":null,
"cognitoIdentityId":null,"caller":null,"exmpleIp":"157.33.133.217","accessKey":null,
"cognitoAuthenticationType":null,"cognitoAuthenticationProvider":null,"userArn":null,
"userAgent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/66.0.3359.181 Safari/537.36","user":null},"apiId":"nvbhfdojfg"},"body":
null,"isBase64Encoded":false}}
ให้เราเปลี่ยนฟังก์ชัน AWS Lambda เพื่อแสดงรายละเอียดสตริงการสืบค้นตามที่แสดงด้านล่าง -
'use strict';
module.exports.hello = (event, context, callback) => {
const response = {
statusCode: 200,
body: JSON.stringify({
message:(event.queryStringParameters && event.queryStringParameters.displaymessage!="") ? event.queryStringParameters.displaymessage : 'Go Serverless v1.0! Your function executed successfully!'
}),
};
callback(null, response);
// Use this code if you don't use the http event with the LAMBDA-PROXY integration
// callback(null, { message: 'Go Serverless v1.0! Your function executed successfully!', event });
};
สังเกตว่าเราได้เปลี่ยนข้อความตามสตริงการสืบค้น display message. สิ่งนี้จะปรับใช้ฟังก์ชันนี้อีกครั้งและตรวจสอบผลลัพธ์ จะแสดงรายละเอียดที่มีอยู่ในข้อความแสดงตัวแปรสตริงการสืบค้นดังที่แสดงด้านล่าง
ให้เราเพิ่ม post วิธีการกับเหตุการณ์ที่สร้างขึ้นดังแสดงด้านล่าง -
ตอนนี้ปรับใช้การเปลี่ยนแปลงที่เกิดขึ้นและคุณสามารถดูผลลัพธ์ต่อไปนี้จากคำสั่งปรับใช้ -
โปรดทราบว่าการทดสอบโพสต์ url ในเบราว์เซอร์โดยตรงจะไม่ให้รายละเอียด คุณควรทดสอบ URL ของโพสต์ในpostman.
หากต้องการรับบุรุษไปรษณีย์ไปที่ https://www.getpostman.com/apps. ดาวน์โหลดแอปตามระบบปฏิบัติการของคุณ เมื่อติดตั้งแล้วคุณจะสามารถทดสอบโพสต์ url ของคุณได้ตามที่แสดงด้านล่าง -
นี่แสดงข้อความที่เราได้เพิ่มในฟังก์ชัน Lambda
บทนี้จะอธิบายรายละเอียดเกี่ยวกับกระบวนการเรียกใช้และเรียกใช้ฟังก์ชันแลมด้าและขั้นตอนที่เกี่ยวข้อง
AWS Lambda Execution Model
การดำเนินการของ AWS ขึ้นอยู่กับรายละเอียดการกำหนดค่าที่เพิ่มสำหรับฟังก์ชัน AWS Lambda เมื่อฟังก์ชันถูกสร้างขึ้นจะมีไฟล์memory และ time allottedซึ่งใช้สำหรับการทำงานของฟังก์ชัน AWS Lambda
ด้วยความช่วยเหลือของรายละเอียดการกำหนดค่า AWS Lambda จะสร้างบริบทการดำเนินการ บริบทการดำเนินการคือสภาพแวดล้อมรันไทม์ชั่วคราวซึ่งจัดทำขึ้นพร้อมกับการอ้างอิงภายนอกใด ๆ เช่นการเชื่อมต่อฐานข้อมูลปลายทาง http ไลบรารีของบุคคลที่สามเป็นต้นหากมี
เมื่อมีการเรียกใช้ฟังก์ชัน AWS Lambda เป็นครั้งแรกหรือหากมีการอัปเดตฟังก์ชันแลมบ์ดาจะมีการเพิ่มเวลาแฝงเล็กน้อยเนื่องจากการตั้งค่าบริบทการดำเนินการ อย่างไรก็ตามการโทรที่ตามมาจะเร็วกว่าเมื่อเทียบกับการโทรครั้งแรก AWS Lambda พยายามใช้บริบทการดำเนินการซ้ำอีกครั้งหากเรียกใช้ฟังก์ชัน Lambda โดยใช้เวลาน้อยกว่า
การนำบริบทการดำเนินการกลับมาใช้ใหม่มีผลกระทบดังต่อไปนี้ -
หากมีการเชื่อมต่อฐานข้อมูลใด ๆ สำหรับการเรียกใช้ Lambda การเชื่อมต่อนั้นจะยังคงอยู่เพื่อใช้ซ้ำ ดังนั้นรหัสแลมบ์ดาจึงต้องมีการตรวจสอบการเชื่อมต่อก่อน - หากมีอยู่และนำมาใช้ใหม่ มิฉะนั้นเราจะต้องทำการเชื่อมต่อใหม่สด
บริบทการดำเนินการรักษาพื้นที่ดิสก์ 500MB ใน /tmpไดเรกทอรี ข้อมูลที่ต้องการถูกแคชไว้ในไดเร็กทอรีนี้ คุณสามารถตรวจสอบรหัสเพิ่มเติมเพื่อดูว่ามีข้อมูลอยู่หรือไม่
ถ้าการเรียกกลับหรือกระบวนการพื้นหลังบางอย่างหากยังไม่เสร็จสมบูรณ์เมื่อเรียกใช้ฟังก์ชันแลมบ์ดาการเรียกใช้จะเริ่มต้นเมื่อเรียกใช้ฟังก์ชันแลมบ์ดาอีกครั้ง ในกรณีที่คุณไม่ต้องการให้สิ่งนั้นเกิดขึ้นตรวจสอบให้แน่ใจว่ากระบวนการทั้งหมดของคุณสิ้นสุดลงอย่างถูกต้องเมื่อการเรียกใช้ฟังก์ชันเสร็จสมบูรณ์
คุณควรใช้บริบทการดำเนินการและข้อมูลที่จัดเก็บในไดเรกทอรี tmp คุณจะต้องเพิ่มการตรวจสอบที่จำเป็นในโค้ดเพื่อดูว่ามีข้อมูลที่ต้องการหรือไม่ก่อนที่จะสร้างใหม่ใหม่ วิธีนี้จะช่วยประหยัดเวลาในระหว่างการดำเนินการและทำให้เร็วขึ้น
เรียกใช้ฟังก์ชัน AWS Lambda
เราสามารถเรียกใช้ AWS ด้วยตนเองโดยใช้ aws cli. เราได้เห็นวิธีการสร้างและปรับใช้ AWS Lambda โดยใช้แล้วcli. ที่นี่เราจะสร้างฟังก์ชันโดยใช้aws cli และเรียกสิ่งเดียวกัน
การสร้างฟังก์ชัน AWS Lambda โดยใช้ AWS CLI
คุณสามารถใช้คำสั่งต่อไปนี้เพื่อสร้างฟังก์ชัน AWS Lambda โดยใช้ aws cli -
Commands
create-function
--function-name <value>
--runtime <value>
--role <value>
--handler <value>
[--code <value>]
[--description <value>]
[--timeout <value>]
[--memory-size <value>]
[--environment <value>]
[--kms-key-arn <value>]
[--tags <value>]
[--zip-file <value>]
[--cli-input-json <value>]
Command with values
aws lambda create-function
--function-name "lambdainvoke"
--runtime "nodejs8.10"
--role "arn:aws:iam::625297745038:role/lambdaapipolicy"
--handler "index.handler"
--timeout 5
--memory-size 256
--zip-file "fileb://C:\nodeproject\index.zip"
ผลลัพธ์ดังแสดงด้านล่าง -
ฟังก์ชั่นที่สร้างในคอนโซล AWS มีดังที่แสดงด้านล่าง -
ตอนนี้คุณสามารถเรียกใช้ฟังก์ชันโดยใช้คำสั่ง:invoke
--function-name <value>
[--invocation-type <value>]
[--log-type <value>]
[--client-context <value>]
[--payload <value>]
[--qualifier <value>]
outfile <value>
Options
--function-name − ระบุชื่อของฟังก์ชันที่คุณต้องการเรียกใช้
--invocation-type(string) − โดยค่าเริ่มต้นประเภทการเรียกใช้คือ requestresponse. ค่าที่สามารถใช้ได้กับประเภทการเรียกใช้คือRequestResponse, Event และ DryRun.
ประเภทการเรียกใช้เหตุการณ์จะถูกใช้สำหรับการตอบสนองแบบไม่ซิงค์
DryRun ใช้เมื่อคุณต้องการตรวจสอบฟังก์ชันแลมด้าโดยไม่จำเป็นต้องดำเนินการ
--log-type − มันจะเป็น Tailหากประเภทการเรียกใช้คือ RequestResponse มันให้ข้อมูลบันทึกที่เข้ารหัส 4KB base64 ล่าสุด ค่าที่เป็นไปได้คือTail และ None.
--client-context −คุณสามารถส่งรายละเอียดเฉพาะไคลเอ็นต์ไปยังฟังก์ชัน Lambda บริบทไคลเอ็นต์ต้องอยู่ในรูปแบบ json และเข้ารหัส base64 ขนาดไฟล์สูงสุดคือ 3583 ไบต์
--payload − อินพุตรูปแบบ json ให้คุณฟังก์ชั่น lambda
--qualifier −คุณสามารถระบุเวอร์ชันฟังก์ชัน Lambda หรือชื่อนามแฝง หากคุณส่งผ่านเวอร์ชันของฟังก์ชันเกินกว่า API จะใช้ฟังก์ชัน arn ที่มีคุณสมบัติเหมาะสมเพื่อเรียกใช้ฟังก์ชัน Lambda หากคุณระบุชื่อนามแฝง api จะใช้นามแฝง ARN เพื่อเรียกใช้ฟังก์ชัน Lambda
outfile − นี่คือชื่อไฟล์ที่จะบันทึกเนื้อหา
Command with values
aws lambda invoke --function-name "lambdainvoke" --log-type
Tail C:\nodeproject\outputfile.txt
คุณสามารถใช้ตัวเลือก payload เพื่อส่งเหตุการณ์จำลองไปยังฟังก์ชัน lambda ในรูปแบบ json ดังที่แสดงด้านล่าง
รหัส AWS Lambda ที่เกี่ยวข้องมีดังนี้ -
exports.handler = async (event, callback) => {
console.log("Hello => "+ event.name);
console.log("Address =>"+ event.addr);
callback(null, 'Hello '+event.name +" and address is "+ event.addr);
};
สังเกตว่าในโค้ดเรามีคอนโซล event.name และ event.addr. ตอนนี้ให้เราใช้ตัวเลือก payload ใน aws cli เพื่อส่งเหตุการณ์พร้อมชื่อและที่อยู่ดังนี้ -
aws lambda invoke --function-name "lambdainvoke" --log-type
Tail --payload file://C:\clioutput\input.txt C:\clioutput\outputfile.txt
จากนั้น Payload รับอินพุตเป็น filepath ซึ่งมีอินพุต json ดังที่แสดง -
{"name":"Roy Singh", "addr":"Mumbai"}
ผลลัพธ์ที่สอดคล้องกันดังแสดงด้านล่าง -
ผลลัพธ์จะถูกเก็บไว้ในไฟล์ C:\clioutput\outputfile.txt ดังต่อไปนี้ -
"Hello Roy Singh and address is Mumbai"
ตัวอย่างเหตุการณ์
คุณสามารถทดสอบฟังก์ชัน AWS Lambda ได้โดยส่งผ่านเหตุการณ์ตัวอย่าง ส่วนนี้จะแสดงตัวอย่างเหตุการณ์สำหรับ AWS Services คุณสามารถใช้ไฟล์invokeคำสั่งเพื่อทดสอบเอาต์พุตเมื่อทริกเกอร์ด้วยบริการใด ๆ สังเกตรหัสที่กำหนดสำหรับเหตุการณ์ตัวอย่างที่เกี่ยวข้องด้านล่าง -
Amazon S3 ใส่เหตุการณ์ตัวอย่าง
{
"Records": [{
"eventVersion": "2.0",
"eventTime": "1970-01-01T00:00:00.000Z",
"requestParameters": {
"SourceIPAddress": "127.0.0.1"
},
"s3": {
"configurationId": "testConfigRule",
"object": {
"eTag": "0123456789abcdef0123456789abcdef",
"sequencer": "0A1B2C3D4E5F678901",
"key": "HappyFace.jpg",
"size": 1024
},
"bucket": {
"arn": bucketarn,
"name": "Sourcebucket",
"ownerIdentity": {
"principalId": "EXAMPLE"
}
},
"s3SchemaVersion": "1.0"
},
"responseElements": {
"x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
"x-amz-request-id": "EXAMPLE123456789"
},
"awsRegion": "us-east-1",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "EXAMPLE"
},
"eventSource": "aws:s3"
}]
}
เพื่อรับไฟล์ details of the file from the s3 put eventคุณสามารถใช้คำสั่งต่อไปนี้ -
event.Records[0].s3.object.key //will display the name of the file
ถึง get the bucket nameคุณสามารถใช้คำสั่งต่อไปนี้ -
event.Records[0].s3.bucket.name //will give the name of the bucket.
ถึง see the EventNameคุณสามารถใช้คำสั่งต่อไปนี้ -
event.Records[0].eventName // will display the eventname
Amazon S3 ลบเหตุการณ์ตัวอย่าง
{
"Records": [{
"eventVersion": "2.0",
"eventTime": "1970-01-01T00:00:00.000Z",
"requestParameters": {
"SourceIPAddress": "127.0.0.1"
},
"s3": {
"configurationId": "testConfigRule",
"object": {
"sequencer": "0A1B2C3D4E5F678901",
"key": "HappyFace.jpg"
},
"bucket": {
"arn": bucketarn,
"name": "Sourcebucket",
"ownerIdentity": {
"principalId": "EXAMPLE"
}
},
"s3SchemaVersion": "1.0"
},
"responseElements": {
"x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
"x-amz-request-id": "EXAMPLE123456789"
},
"awsRegion": "us-east-1",
"eventName": "ObjectRemoved:Delete",
"userIdentity": {
"principalId": "EXAMPLE"
},
"eventSource": "aws:s3"
}]
}
Amazon DynamoDB
Amazon DynamoDB อาจเป็นเหตุการณ์บน AWS Lambda เมื่อมีการเปลี่ยนแปลงบนตาราง DynamoDB เราสามารถดำเนินการเช่นเพิ่มรายการอัปเดตและลบระเบียนจากตาราง DynamodDB
ตัวอย่างเหตุการณ์สำหรับเหตุการณ์การเพิ่มแทรกและลบ DynamoDB จะแสดงที่นี่ -
{
"Records": [{
"eventID": "1",
"eventVersion": "1.0",
"dynamodb": {
"Keys": {
"Id": {
"N": "101"
}
},
"NewImage": {
"Message": {
"S": "New item!"
},
"Id": {
"N": "101"
}
},
"StreamViewType": "NEW_AND_OLD_IMAGES",
"SequenceNumber": "111",
"SizeBytes": 26
},
"awsRegion": "us-west-2",
"eventName": "INSERT",
"eventSourceARN": eventSourcearn,
"eventSource": "aws:dynamodb"
},
{
"eventID": "2",
"eventVersion": "1.0",
"dynamodb": {
"OldImage": {
"Message": {
"S": "New item!"
},
"Id": {
"N": "101"
}
},
"SequenceNumber": "222",
"Keys": {
"Id": {
"N": "101"
}
},
"SizeBytes": 59,
"NewImage": {
"Message": {
"S": "This item has changed"
},
"Id": {
"N": "101"
}
},
"StreamViewType": "NEW_AND_OLD_IMAGES"
},
"awsRegion": "us-west-2",
"eventName": "MODIFY",
"eventSourceARN": Sourcearn,
"eventSource": "aws:dynamodb"
},
{
"eventID": "3",
"eventVersion": "1.0",
"dynamodb": {
"Keys": {
"Id": {
"N": "101"
}
},
"SizeBytes": 38,
"SequenceNumber": "333",
"OldImage": {
"Message": {
"S": "This item has changed"
},
"Id": {
"N": "101"
}
},
"StreamViewType": "NEW_AND_OLD_IMAGES"
}, "awsRegion": "us-west-2",
"eventName": "REMOVE",
"eventSourceARN": Sourcearn,
"eventSource": "aws:dynamodb"
}]
}
บริการแจ้งเตือนแบบง่ายของ Amazon
AWS Lambda มีประโยชน์ในการประมวลผลการแจ้งเตือนที่สร้างขึ้นใน Simple Notification Service (SNS). เมื่อใดก็ตามที่มีการเผยแพร่ข้อความใน SNS ฟังก์ชัน Lambda สามารถถูกเรียกใช้ด้วยเหตุการณ์ SNS ซึ่งมีรายละเอียดของข้อความ ข้อความนี้สามารถประมวลผลได้ภายในฟังก์ชัน Lambda และสามารถส่งต่อไปยังบริการอื่น ๆ ได้ตามความต้องการ
เมื่อป้อนข้อความ SNS จะเรียกใช้ฟังก์ชันแลมด้า หากข้อผิดพลาดใด ๆ พยายามเรียกใช้ฟังก์ชัน Lambda SNS จะลองเรียกฟังก์ชันแลมบ์ดาอีกครั้งไม่เกินสามครั้ง
เหตุการณ์ตัวอย่างของ Amazon SNS
ตัวอย่างเหตุการณ์ที่มีรายละเอียดทั้งหมดที่มีอยู่ในฟังก์ชัน AWS Lambda เพื่อดำเนินการตามขั้นตอนเพิ่มเติมแสดงไว้ด้านล่าง -
{
"Records": [{
"EventVersion": "1.0",
"EventSubscriptionArn": eventsubscriptionarn,
"EventSource": "aws:sns",
"Sns": {
"SignatureVersion": "1",
"Timestamp": "1970-01-01T00:00:00.000Z",
"Signature": "EXAMPLE",
"SigningCertUrl": "EXAMPLE",
"MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e",
"Message": "Hello from SNS!",
"MessageAttributes": {
"Test": {
"Type": "String",
"Value": "TestString"
},
"TestBinary": {
"Type": "Binary",
"Value": "TestBinary"
}
},
"Type": "Notification",
"UnsubscribeUrl": "EXAMPLE",
"TopicArn": topicarn,
"Subject": "TestInvoke"
}
}]
}
Amazon Simple Mail Service
สามารถใช้ Amazon Simple Mail Service เพื่อส่งข้อความและรับข้อความ สามารถเรียกใช้ฟังก์ชัน AWS Lambda บน Simple Mail Service เมื่อได้รับข้อความ
ตัวอย่างเหตุการณ์การรับอีเมลของ Amazon SES
รายละเอียดของเหตุการณ์ SES เมื่อใช้ภายใน AWS Lambda แสดงไว้ด้านล่าง -
{
"Records": [{
"eventVersion": "1.0",
"ses": {
"mail": {
"commonHeaders": {
"from": [
"Jane Doe <[email protected]>"
],
"to": [
"[email protected]"
],
"returnPath": "[email protected]",
"messageId": "<0123456789Source.com>",
"date": "Wed, 7 Oct 2015 12:34:56 -0700",
"subject": "Test Subject"
},
"example": "[email protected]",
"timestamp": "1970-01-01T00:00:00.000Z",
"destination": [
"[email protected]"
],
"headers": [{
"name": "Return-Path",
"value": "<[email protected]>"
},
{
"name": "Received",
"value": "from mailer.example.com (mailer.example.com [203.0.113.1]) by inbound-smtp.us-west-2.amazonaws.com with SMTP id o3vrnil0e2ic for [email protected]; Wed, 07 Oct 2015 12:34:56 +0000 (UTC)"
},
{
"name": "DKIM-Signature",
"value": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; s=example; h=mime-version:from:date:message-id:subject:to:content-type; bh=jX3F0bCAI7sIbkHyy3mLYO28ieDQz2R0P8HwQkklFj4=; b=sQwJ+LMe9RjkesGu+vqU56asvMhrLRRYrWCbV"
},
{
"name": "MIME-Version",
"value": "1.0"
},
{
"name": "From",
"value": "Jane Doe <[email protected]>"
},
{
"name": "Date",
"value": "Wed, 7 Oct 2015 12:34:56 -0700"
},
{
"name": "Message-ID",
"value": "<0123456789example.com>"
},
{
"name": "Subject",
"value": "Test Subject"
},
{
"name": "To",
"value": "[email protected]"
},
{
"name": "Content-Type",
"value": "text/plain; charset=UTF-8"
}],
"headersTruncated": false,
"messageId": "o3vrnil0e2ic28tr"
},
"receipt": {
"recipients": [
"[email protected]"
],
"timestamp": "1970-01-01T00:00:00.000Z",
"spamVerdict": {
"status": "PASS"
},
"dkimVerdict": {
"status": "PASS"
},
"processingTimeMillis": 574,
"action": {
"type": "Lambda",
"invocationType": "Event",
"functionArn": "arn:aws:lambda:us-west-2:012345678912:function:example"
},
"spfVerdict": {
"status": "PASS"
},
"virusVerdict": {
"status": "PASS"
}
}
},
"eventexample": "aws:ses"
}]
}
บันทึก Amazon Cloudwatch
AWS Lambda สามารถเรียกใช้จาก Amazon CloudWatch Logs โดยใช้ไฟล์ CloudWatch Logs Subscriptions. การสมัครใช้งาน CloudWatch Logs มีข้อมูลแบบเรียลไทม์เกี่ยวกับบันทึกซึ่งสามารถประมวลผลและวิเคราะห์ภายใน AWS Lambda หรือสามารถใช้เพื่อโหลดไปยังระบบอื่น ๆ
เหตุการณ์ตัวอย่างบันทึกของ Amazon CloudWatch
{
"awslogs": {
"data": "H4sIAAAAAAAAAHWPwQqCQBCGX0Xm7EFtK+smZBEUgXoLCdMhFtKV3akI8d0bLYmibvPPN3wz00CJxmQnTO41whwW
QRIctmEcB6sQbFC3CjW3XW8kxpOpP+OC22d1Wml1qZkQGtoMsScxaczKN3plG8zlaHIta5KqWsozoTYw3/djzwhpL
wivWFGHGpAFe7DL68JlBUk+l7KSN7tCOEJ4M3/qOI49vMHj+zCKdlFqLaU2ZHV2a4Ct/an0/ivdX8oYc1UVX860fQ
DQiMdxRQEAAA=="
}
}
Amazon API Gateway
สามารถเรียกใช้ฟังก์ชัน AWS Lambda ได้ httpsurl. สามารถทำได้บนGET, POST, PUT. เมื่อเรียกใช้ https url ฟังก์ชัน AWS Lambda จะถูกทริกเกอร์เช่นกันและข้อมูลที่ส่งไปยัง https โดยใช้ get / post สามารถทำให้พร้อมใช้งานภายใน AWS Lambda เพื่อใช้ในการแทรกใน DynamoDB หรือเพื่อส่งอีเมลเป็นต้น
เหตุการณ์คำขอพร็อกซี API เกตเวย์
{
"path": "/test/hello",
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, lzma, sdch, br",
"Accept-Language": "en-US,en;q=0.8",
"CloudFront-Forwarded-Proto": "https",
"CloudFront-Is-Desktop-Viewer": "true",
"CloudFront-Is-Mobile-Viewer": "false",
"CloudFront-Is-SmartTV-Viewer": "false",
"CloudFront-Is-Tablet-Viewer": "false",
"CloudFront-Viewer-Country": "US",
"Host": "wt6mne2s9k.execute-api.us-west-2.amazonaws.com",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48",
"Via": "1.1 fb7cca60f0ecd82ce07790c9c5eef16c.cloudfront.net (CloudFront)",
"X-Amz-Cf-Id": "nBsWBOrSHMgnaROZJK1wGCZ9PcRcSpq_oSXZNQwQ10OTZL4cimZo3g==",
"X-Forwarded-For": "192.168.100.1, 192.168.1.1",
"X-Forwarded-Port": "443",
"X-Forwarded-Proto": "https"
},
"pathParameters": {
"proxy": "hello"
},
"requestContext": {
"accountId": "123456789012",
"reexampleId": "us4z18",
"stage": "test",
"requestId": "41b45ea3-70b5-11e6-b7bd-69b5aaebc7d9",
"identity": {
"cognitoIdentityPoolId": "",
"accountId": "",
"cognitoIdentityId": "",
"caller": "",
"apiKey": "",
"exampleIp": "192.168.100.1",
"cognitoAuthenticationType": "",
"cognitoAuthenticationProvider": "",
"userArn": "",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48",
"user": ""
},
"reexamplePath": "/{proxy+}",
"httpMethod": "GET",
"apiId": "wt6mne2s9k"
},
"reexample": "/{proxy+}",
"httpMethod": "GET",
"queryStringParameters": {
"name": "me"
},
"stageVariables": {
"stageVarName": "stageVarValue"
}
}
เหตุการณ์ตอบสนองพร็อกซีของ API เกตเวย์
{
"statusCode": 200,
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, lzma, sdch, br",
"Accept-Language": "en-US,en;q=0.8",
"CloudFront-Forwarded-Proto": "https",
"CloudFront-Is-Desktop-Viewer": "true",
"CloudFront-Is-Mobile-Viewer": "false",
"CloudFront-Is-SmartTV-Viewer": "false",
"CloudFront-Is-Tablet-Viewer": "false",
"CloudFront-Viewer-Country": "US",
"Host": "wt6mne2s9k.execute-api.us-west-2.amazonaws.com",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48",
"Via": "1.1 fb7cca60f0ecd82ce07790c9c5eef16c.cloudfront.net (CloudFront)",
"X-Amz-Cf-Id": "nBsWBOrSHMgnaROZJK1wGCZ9PcRcSpq_oSXZNQwQ10OTZL4cimZo3g==",
"X-Forwarded-For": "192.168.100.1, 192.168.1.1",
"X-Forwarded-Port": "443",
"X-Forwarded-Proto": "https"
},
"body": "Hello World"
}
การลบฟังก์ชัน AWS Lambda จะลบ AWS Lambda ออกจากคอนโซล AWS มี 2 วิธีในการลบฟังก์ชัน AWS Lambda
- ใช้ AWS Console
- ใช้คำสั่ง AWS CLI
บทนี้จะกล่าวถึงสองวิธีนี้โดยละเอียด
การใช้ AWS Console
สำหรับการลบฟังก์ชัน Lambda โดยใช้คอนโซล AWS ให้ทำตามขั้นตอนด้านล่าง -
ขั้นตอนที่ 1
เข้าสู่ระบบคอนโซล AWS และไปที่บริการ AWS Lambda คุณจะพบว่าฟังก์ชัน AWS lambda ที่สร้างขึ้นจนถึงตอนนี้มีอยู่ใน AWS Console ดังที่แสดงด้านล่าง
รายการแสดงให้เห็นว่ามีฟังก์ชัน AWS Lambda 23 ฟังก์ชันที่สร้างขึ้นจนถึงตอนนี้ คุณสามารถดูได้โดยใช้เลขหน้าที่ให้ไว้ด้านบนหรือค้นหา AWS Lambda โดยใช้ช่องค้นหา
ขั้นตอนที่ 2
สังเกตว่ามีปุ่มตัวเลือกบนแต่ละฟังก์ชัน AWS Lambda เลือกฟังก์ชั่นที่คุณต้องการลบ สังเกตภาพหน้าจอด้านล่าง -
ขั้นตอนที่ 3
เมื่อคุณเลือกฟังก์ชัน AWS Lambda แล้วไฟล์ Actionรายการแบบเลื่อนลงซึ่งเป็นสีเทาก่อนหน้านี้จะถูกไฮไลต์ในขณะนี้ ตอนนี้เปิดกล่องคำสั่งผสมและจะแสดงตัวเลือกดังที่แสดง -
ขั้นตอนที่ 4
เลือกไฟล์ Deleteปุ่มเพื่อลบฟังก์ชัน AWS Lambda เมื่อคุณคลิกDeleteจะแสดงข้อความดังนี้ -
ขั้นตอนที่ 5
อ่านข้อความอย่างละเอียดแล้วคลิกในภายหลัง Delete ปุ่มเพื่อลบฟังก์ชัน AWS lambda อย่างถาวร
Note- การลบ aws lambda จะไม่ลบบทบาทที่เชื่อมโยง หากต้องการลบบทบาทคุณต้องไปที่ IAM และนำบทบาทออก
ขั้นตอนที่ 6
รายการบทบาทที่สร้างขึ้นจนถึงตอนนี้แสดงอยู่ด้านล่าง สังเกตว่ามีCreate role ปุ่มและ Delete role ปุ่ม.
คลิกช่องทำเครื่องหมายในบทบาทที่คุณต้องการลบ คุณยังสามารถเลือกหลายบทบาทเพื่อลบได้ในแต่ละครั้ง
ขั้นตอนที่ 7
คุณจะเห็นข้อความยืนยันดังที่แสดงด้านล่างเมื่อคุณคลิกปุ่มลบ -
ตอนนี้อ่านรายละเอียดที่กล่าวถึงอย่างละเอียดแล้วคลิกในภายหลัง Yes, delete ปุ่ม.
ใช้คำสั่ง AWS CLI
ก่อนอื่นให้เราสร้างฟังก์ชัน Lambda โดยใช้ aws cli และลบสิ่งเดียวกันโดยใช้คำสั่งเดียวกัน ทำตามขั้นตอนด้านล่างเพื่อจุดประสงค์นี้ -
ขั้นตอนที่ 1
คำสั่งที่มีค่าสำหรับ create-function มีดังนี้ -aws lambda create-function
--function-name "lambdatestcli"
--runtime "nodejs8.10"
--role "arn:aws:iam::625297745038:role/lambdaapipolicy"
--handler "index.handler"
--timeout 5
--memory-size 256
--zip-file "fileb://C:\demotest\index.zip"
ผลลัพธ์ที่เกี่ยวข้องจะแสดงที่นี่ -
ขั้นตอนที่ 2
ฟังก์ชัน AWS Lambda ที่สร้างขึ้นคือ lambdatestcli. เราได้ใช้ role arn ที่มีอยู่เพื่อสร้างฟังก์ชัน lambda
จากนั้นคุณจะพบฟังก์ชันนี้ที่แสดงในคอนโซล AWS ดังที่แสดงด้านล่าง -
ขั้นตอนที่ 3
ตอนนี้ให้เราเรียกใช้ฟังก์ชันเพื่อทดสอบผลลัพธ์โดยใช้คำสั่งที่แสดง -aws lambda invoke --function-name "lambdatestcli" --log-type Tail
C:\demotest\outputfile.txt
คำสั่งนี้จะให้ผลลัพธ์ดังรูป -
ขั้นตอนที่ 4
คุณสามารถสังเกตบันทึกจาก cloudwatch สำหรับฟังก์ชัน lambda lambdatestcliขั้นตอนที่ 5
ตอนนี้ให้เรามาถึงส่วนที่แท้จริงของการลบฟังก์ชัน AWS Delete aws cli apiจะลบฟังก์ชันที่กำหนด รายละเอียดคำสั่งที่ใช้เพื่อจุดประสงค์นี้แสดงไว้ด้านล่าง -Command
delete-function
--function-name <value>
[--qualifier <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
Options
--function-name(string) - นี่จะใช้ชื่อฟังก์ชัน Lambda หรือ arn ของฟังก์ชัน AWS Lambda
--qualifier (string)- เป็นทางเลือก คุณสามารถระบุเวอร์ชันของ AWS Lambda ที่ต้องลบได้ที่นี่
-- cli-input-json(string)- ดำเนินการบริการตามสตริง JSON ที่ให้มา สตริง JSON เป็นไปตามรูปแบบที่ระบุby --generate-cli-skeleton. หากมีการจัดเตรียมอาร์กิวเมนต์อื่นไว้ในบรรทัดรับคำสั่งค่า CLI จะแทนที่ค่าที่ระบุโดย JSON
--generate-cli-skeleton(string) - พิมพ์ json skeleton ไปยังเอาต์พุตมาตรฐานโดยไม่ต้องส่งคำขอ API
Command with values
aws lambda delete-function --function-name "lambdatestcli"
ผลลัพธ์ที่เกี่ยวข้องแสดงไว้ด้านล่าง -
ขั้นตอนที่ 6
หากคุณตรวจสอบตอนนี้คุณจะสังเกตได้ว่าฟังก์ชันจะไม่ปรากฏในรายการฟังก์ชัน AWS Lambda ดังที่แสดงในภาพหน้าจอด้านล่าง -ทำงานกับ Amazon API Gateway
สามารถเรียกใช้ฟังก์ชัน AWS Lambda ได้ HTTPSurl. สามารถทำได้บน GET, POST, PUT เมื่อเรียกใช้ HTTPS url ฟังก์ชัน AWS Lambda ยังสามารถทริกเกอร์ได้และข้อมูลจะส่งผ่านไปยัง HTTPS โดยใช้get/post สามารถใช้งานได้ภายใน AWS Lambda เพื่อใช้ในการแทรกใน DynamoDB หรือส่งอีเมลเป็นต้น
บทนี้จะกล่าวถึงรายละเอียดเกี่ยวกับกระบวนการต่างๆที่เกี่ยวข้องกับการทำงานใน AWS lambda และ API Gateway
กระบวนการที่เกี่ยวข้อง
ต่อไปนี้เป็นกระบวนการที่เกี่ยวข้องกับการทำงานกับ AWS lambda และ API Gateway -
- สร้างบทบาท IAM เพื่อขออนุญาต
- สร้างฟังก์ชัน AWS lambda
- สร้าง API เกตเวย์
- เชื่อมโยงฟังก์ชัน lambda กับเกตเวย์ api
- ส่งผ่านข้อมูลไปยังเกตเวย์ api
แผนภาพพื้นฐานที่อธิบายการทำงานของเกตเวย์ API และ AWS Lambda มีให้ที่นี่ -
กระบวนการเหล่านี้มีการอธิบายรายละเอียดเพิ่มเติมในบทนี้พร้อมภาพหน้าจอที่เกี่ยวข้อง
สร้างบทบาท IAM เพื่อขออนุญาต
จากบริการของ Amazon ดังที่แสดงด้านล่างให้เลือก IAM สำหรับการสร้างบทบาทที่จะใช้โดยฟังก์ชัน Lambda
ไปที่ IAM แล้วเลือก Roles จากส่วนด้านซ้ายตามที่แสดงด้านล่าง -
คลิก Create role สำหรับฟังก์ชัน Lambda
เลือก Lambda แล้วคลิก Permissionsที่ส่วนลึกสุด. เลือกสิทธิ์ที่จำเป็นสำหรับ API Gateway และ Lambda
ค้นหาเกตเวย์ API ในการค้นหาและจะแสดงรายการสิทธิ์ที่เกี่ยวข้องทั้งหมด ที่นี่เราได้เลือกการเข้าถึงเกตเวย์ API เต็มรูปแบบดังที่แสดงด้านล่าง -
ตอนนี้ค้นหาเกตเวย์ API และจะแสดงรายการสิทธิ์ที่เกี่ยวข้องทั้งหมด ที่นี่เราได้เลือกการเข้าถึงเกตเวย์ API เต็มรูปแบบดังที่แสดงด้านล่าง -
คุณต้องทำซ้ำขั้นตอนเดียวกันสำหรับนโยบายด้วย
เมื่อคุณเลือกนโยบายที่จำเป็นเสร็จแล้วให้คลิก Reviewสำหรับขั้นตอนต่อไป ป้อนชื่อของบทบาทตามที่คุณเลือกตามที่แสดงด้านล่าง -
จะแสดงนโยบายที่แนบมากับบทบาท คลิกCreate role และเราได้สร้างบทบาทเสร็จแล้วและสามารถดำเนินการกับฟังก์ชันแลมด้าได้
สร้างฟังก์ชัน AWS Lambda
ไปที่บริการ AWS และคลิกที่บริการแลมบ์ดาเพื่อสร้างฟังก์ชันสำหรับเชื่อมต่อกับ API เกตเวย์
หน้าจอ UI สำหรับฟังก์ชัน Lambda แสดงอยู่ด้านล่าง คลิกCreate function เพื่อดำเนินการสร้างฟังก์ชัน Lambda ต่อไป
ป้อนชื่อของฟังก์ชันและเลือกบทบาทที่มีอยู่ซึ่งเราได้สร้างไว้ข้างต้น
มันกะพริบข้อความว่าฟังก์ชันที่มีชื่อ lambdawithapigateway สร้างสำเร็จแล้ว
โปรดทราบว่าที่นี่เราจะใช้ nodejsรันไทม์เพื่อเขียนโค้ด รหัส AWS ด้วยhelloworld ข้อความดังแสดงด้านล่าง -
รหัส AWS Lambda มีอยู่ใน index.jsไฟล์. ฟังก์ชันที่เรียกว่าตัวจัดการมีพารามิเตอร์คือevents, context และ callback.
ฟังก์ชันโทรกลับโดยทั่วไปมีข้อผิดพลาดและข้อความแสดงความสำเร็จ โปรดทราบว่าที่นี่เราไม่มีรหัสที่เกี่ยวข้องกับข้อผิดพลาดดังนั้นจึงมีการส่ง null และข้อความแสดงความสำเร็จคือHelloWorld from lambda.
สุดท้ายให้บันทึกการเปลี่ยนแปลงที่เพิ่มและให้เราดำเนินการเพิ่มฟังก์ชัน Lambda ไปยังเกตเวย์ API
สร้าง API เกตเวย์
เข้าสู่ระบบบัญชี AWS ของคุณและเปิด API Gateway ดังที่แสดงด้านล่าง -
คลิก API Gateway และจะนำคุณไปสู่หน้าจอที่สามารถสร้างเกตเวย์ API ใหม่ได้
คลิก Create API และเพิ่มรายละเอียดตามที่แสดงด้านล่าง -
คลิก Create APIปุ่มทางด้านขวาของหน้าจอ ซึ่งจะแสดง API ที่สร้างขึ้นใหม่ทางด้านซ้ายของหน้าจอ
คลิก Actions ดรอปดาวน์เพื่อสร้างทรัพยากรใหม่สำหรับ API
ตอนนี้สร้างทรัพยากรใหม่ตามที่แสดงด้านล่าง -
ป้อนไฟล์ Resource Nameดังแสดงด้านล่าง คุณจะเห็นชื่อของทรัพยากรที่ป้อนใน url ที่สร้างขึ้นในตอนท้าย คลิกCreate Resource และคุณจะเห็นมันบนหน้าจอดังนี้ -
เพิ่ม GET/POSTวิธีการไปยังทรัพยากรที่สร้างขึ้นดังที่แสดงด้านล่าง เลือกวิธีการจากActions หล่นลง.
คลิก GET วิธีการเพิ่มวิธีการใน API
ขั้นตอนต่อไปคือการรวมซึ่งจะรวมเข้ากับฟังก์ชัน Lambda ตอนนี้เพิ่มฟังก์ชัน Lambda เข้าไปดังที่แสดงด้านล่าง -
เชื่อมโยงฟังก์ชัน Lambda กับ API Gateway
เลือกฟังก์ชันแลมบ์ดาที่สร้างขึ้นก่อนหน้านี้
บันทึกการเปลี่ยนแปลงและคุณจะเห็นกล่องโต้ตอบขออนุญาตดังที่แสดงด้านล่าง -
คลิก OKสำหรับการอนุญาต นี่คือรายละเอียดการดำเนินการระหว่างคำขอ HTTP เกตเวย์ API และฟังก์ชัน Lambda -
ตอนนี้ให้เราปรับใช้การเปลี่ยนแปลงเกตเวย์ API เพื่อจุดประสงค์นี้เราต้องเลือกไฟล์Deploy API จาก Actions ดรอปดาวน์ดังแสดงด้านล่าง -
เลือก Deploy API. มันจะถามสถานะการปรับใช้ เลือกNew Stage จากดรอปดาวน์ขั้นตอนการทำให้ใช้งานได้และเพิ่มชื่อสเตจเป็น Production.
คลิก Deploy และจะนำคุณไปยัง url ดังที่แสดงด้านล่าง -
เลือกไฟล์ GETวิธีการจากด้านซ้ายเพื่อรับ url เปิด url ในแท็บใหม่เพื่อดูข้อความจากฟังก์ชัน Lambda
นี่คือตัวอย่างพื้นฐานของการทำงานกับ AWS Lambda และ AWS API Gateway ในตัวอย่างข้างต้นเราได้เข้ารหัสข้อความในฟังก์ชัน Lambda
ตอนนี้ให้เรานำรายละเอียดข้อความจาก API Gateway ในกรณีที่ต้องเรียกใช้การเรียก HTTPS จากโดเมนอื่นตัวอย่างเช่นการเรียก AJAX ไปยัง API เราจำเป็นต้องเปิดใช้งาน CORS สำหรับเกตเวย์ API ที่สร้างขึ้น
เลือก reSource ที่สร้างขึ้นสำหรับ API แล้วคลิก Actions ดรอปดาวน์ -
ตอนนี้ Enable CORS จะเปิดหน้าจอต่อไปนี้ -
คุณสามารถใช้วิธีการบางอย่างเพื่อเปิดใช้งาน CORS Access-Control-Allow-Origin ถูกทำเครื่องหมายเป็น * ซึ่งหมายความว่าจะอนุญาตให้รับเนื้อหาจากเกตเวย์ API จากโดเมนใดก็ได้
คุณยังสามารถระบุชื่อโดเมนที่คุณต้องการใช้งานกับ API คลิกEnable CORS and replace existing CORS headers และจะแสดงข้อความยืนยันดังภาพด้านล่าง -
คลิก Yes, replace existing valuesเพื่อเปิดใช้งาน Enable CORS หน้าตาหน้าจอดังรูปด้านล่าง -
การส่งผ่านข้อมูลไปยัง API Gateway
เปิด API ที่สร้างใน API Gateway displayhelloworld ดังแสดงด้านล่าง -
คลิก Integration Request เพื่อส่งข้อมูลตามที่แสดงด้านล่าง -
เลือก Body Mapping Templates และเพิ่มไฟล์ Content-Type สำหรับตัวอย่างนี้เป็น application/json. คลิกที่ประเภทเนื้อหาที่เพิ่มเพิ่มรายละเอียดดังนี้ -
ตอนนี้เพิ่มเทมเพลตในรูปแบบ JSON ดังที่แสดงด้านล่าง -
สังเกตว่าเราใช้ข้อความเป็นพารามิเตอร์ในการรับข้อมูลจาก API Gateway และแชร์กับ AWS Lambda ไวยากรณ์ที่จะได้รับรายละเอียดเป็นดังที่แสดงด้านบน
ตอนนี้ปรับใช้ API เพื่อทำการเปลี่ยนแปลงที่พร้อมใช้งานบน API เกตเวย์ URL สำหรับสิ่งนี้เราจำเป็นต้องเปลี่ยนฟังก์ชัน Lambda เพื่อแสดงข้อมูลตาม API เกตเวย์ URL โค้ดสำหรับฟังก์ชัน Lambda มีให้ด้านล่าง โปรดทราบว่าเรากำลังรับข้อความจากเหตุการณ์และส่งต่อไปยังการโทรกลับ
exports.handler = (event, context, callback) => {
let message = event.message;
callback(null, message);
};
ตอนนี้บันทึกการเปลี่ยนแปลงใน Lambda และกด URL เพื่อดูการเปลี่ยนแปลง สังเกตภาพหน้าจอด้านล่าง -
คลิก URL ที่แสดงด้านล่าง -
https://rw2ek1xung.execute-api.us-east-
1.amazonaws.com/prod/hello?message=hello%20from%20api%20gateway
สังเกตว่าที่นี่เรากำลังส่งข้อความเป็นสตริงการสืบค้นไปยัง GET url จากนั้นคุณสามารถสังเกตผลลัพธ์ที่แสดงด้านล่าง -
อ่านรายละเอียดที่ส่งไปยังข้อความจาก URL และแสดงข้อมูลเดียวกันในเบราว์เซอร์
การใช้ฟังก์ชัน Lambda กับ Amazon S3
บริการ Amazon S3 ใช้สำหรับจัดเก็บไฟล์ซึ่งคุณสามารถอัปโหลดหรือลบไฟล์ได้ เราสามารถเรียกใช้ AWS Lambda บน S3 เมื่อมีการอัปโหลดไฟล์ใด ๆ ในบัคเก็ต S3 AWS Lambda มีฟังก์ชันตัวจัดการซึ่งทำหน้าที่เป็นจุดเริ่มต้นสำหรับฟังก์ชัน AWS Lambda ตัวจัดการมีรายละเอียดของเหตุการณ์ ในบทนี้ให้เราดูวิธีใช้ AWS S3 เพื่อเรียกใช้ฟังก์ชัน AWS Lambda เมื่อเราอัปโหลดไฟล์ในที่เก็บข้อมูล S3
ขั้นตอนในการใช้ฟังก์ชัน AWS Lambda กับ Amazon S3
ในการเริ่มใช้ AWS Lambda กับ Amazon S3 เราจำเป็นต้องมีสิ่งต่อไปนี้ -
- สร้างถัง S3
- สร้างบทบาทที่ได้รับอนุญาตให้ทำงานกับ s3 และ lambda
- สร้างฟังก์ชันแลมด้าและเพิ่ม s3 เป็นทริกเกอร์
ตัวอย่าง
ให้เราดูขั้นตอนเหล่านี้ด้วยความช่วยเหลือของตัวอย่างซึ่งแสดงการโต้ตอบพื้นฐานระหว่าง Amazon S3 และ AWS Lambda
ผู้ใช้จะอัปโหลดไฟล์ในที่เก็บข้อมูล Amazon S3
เมื่ออัปโหลดไฟล์แล้วไฟล์จะเรียกใช้ฟังก์ชัน AWS Lambda ในพื้นหลังซึ่งจะแสดงผลลัพธ์ในรูปแบบของข้อความคอนโซลที่อัปโหลดไฟล์
ผู้ใช้จะสามารถเห็นข้อความในบันทึกของ Cloudwatch เมื่ออัปโหลดไฟล์แล้ว
แผนภาพบล็อกที่อธิบายการไหลของตัวอย่างแสดงไว้ที่นี่ -
การสร้าง S3 Bucket
ให้เราเริ่มต้นด้วยการสร้างที่เก็บข้อมูล s3 ในคอนโซล AWS โดยใช้ขั้นตอนที่ระบุด้านล่าง -
ขั้นตอนที่ 1
ไปที่บริการของ Amazon แล้วคลิก S3 ในส่วนการจัดเก็บตามที่ไฮไลต์ในภาพด้านล่าง -
ขั้นตอนที่ 2
คลิก S3 storage และ Create bucket ซึ่งจะจัดเก็บไฟล์ที่อัปโหลด
ขั้นตอนที่ 3
เมื่อคุณคลิก Create bucket คุณจะเห็นหน้าจอดังนี้ -
ขั้นตอนที่ 4
ป้อนรายละเอียด Bucket name, Select the Region แล้วคลิก Createที่ด้านล่างซ้าย ดังนั้นเราจึงสร้างถังที่มีชื่อ:workingwithlambdaands3.
ขั้นตอนที่ 5
ตอนนี้คลิกชื่อที่เก็บข้อมูลและจะขอให้คุณอัปโหลดไฟล์ดังที่แสดงด้านล่าง -
ดังนั้นเราจึงเสร็จสิ้นด้วยการสร้างที่เก็บข้อมูลใน S3
สร้างบทบาทที่ทำงานร่วมกับ S3 และ Lambda
ในการสร้างบทบาทที่ใช้ได้กับ S3 และ Lambda โปรดทำตามขั้นตอนที่ระบุด้านล่าง -
ขั้นตอนที่ 1
ไปที่บริการของ AWS และเลือก IAM ตามที่แสดงด้านล่าง -
ขั้นตอนที่ 2
ตอนนี้คลิก IAM -> Roles ดังแสดงด้านล่าง -
ขั้นตอนที่ 3
ตอนนี้คลิก Create roleและเลือกบริการที่จะใช้บทบาทนี้ เลือก Lambda แล้วคลิกPermission ปุ่ม.
ขั้นตอนที่ 4
เพิ่มสิทธิ์จากด้านล่างและคลิก Review.
ขั้นตอนที่ 5
สังเกตว่าเราได้เลือกสิทธิ์ต่อไปนี้ -
สังเกตว่านโยบายที่เราเลือกคือ AmazonS3FullAccess, AWSLambdaFullAccess และ CloudWatchFullAccess.
ขั้นตอนที่ 6
ตอนนี้ป้อนชื่อบทบาทคำอธิบายบทบาทแล้วคลิก Create Role ปุ่มที่ด้านล่าง
ดังนั้นบทบาทของเราจึงมีชื่อว่า lambdawiths3service ถูกสร้างขึ้น
สร้างฟังก์ชัน Lambda และเพิ่ม S3 Trigger
ในส่วนนี้ให้เราดูวิธีสร้างฟังก์ชัน Lambda และเพิ่มทริกเกอร์ S3 ลงไป เพื่อจุดประสงค์นี้คุณจะต้องทำตามขั้นตอนที่ระบุด้านล่าง -
ขั้นตอนที่ 1
ไปที่ AWS Services แล้วเลือก Lambda ตามที่แสดงด้านล่าง -
ขั้นตอนที่ 2
คลิก Lambda และทำตามขั้นตอนการเพิ่ม Name. เลือกRuntime, Roleฯลฯ และสร้างฟังก์ชัน ฟังก์ชัน Lambda ที่เราสร้างขึ้นแสดงอยู่ในภาพหน้าจอด้านล่าง -
ขั้นตอนที่ 3
ตอนนี้ให้เราเพิ่มทริกเกอร์ S3
ขั้นตอนที่ 4
เลือกทริกเกอร์จากด้านบนและเพิ่มรายละเอียดตามที่แสดงด้านล่าง -
ขั้นตอนที่ 5
เลือกที่เก็บข้อมูลที่สร้างจากเมนูแบบเลื่อนลงที่เก็บข้อมูล ประเภทกิจกรรมมีรายละเอียดดังต่อไปนี้ -
เลือก Object Created (All)เนื่องจากเราต้องการทริกเกอร์ AWS Lambda เมื่อไฟล์ถูกอัปโหลดลบ ฯลฯ
ขั้นตอนที่ 6
คุณสามารถเพิ่มคำนำหน้าและรูปแบบไฟล์ที่ใช้ในการกรองไฟล์ที่เพิ่ม ตัวอย่างเช่นเพื่อทริกเกอร์แลมบ์ดาสำหรับภาพ. jpg เท่านั้น ให้เราเว้นว่างไว้ก่อนเพราะเราต้องทริกเกอร์ Lambda สำหรับไฟล์ทั้งหมดที่อัปโหลด คลิกAdd ปุ่มเพื่อเพิ่มทริกเกอร์
ขั้นตอนที่ 7
คุณสามารถค้นหาการแสดงทริกเกอร์สำหรับฟังก์ชัน Lambda ดังที่แสดงด้านล่าง -
มาเพิ่มรายละเอียดสำหรับฟังก์ชัน aws lambda ที่นี่เราจะใช้โปรแกรมแก้ไขออนไลน์เพื่อเพิ่มโค้ดของเราและใช้ nodejs เป็นสภาพแวดล้อมรันไทม์
ขั้นตอนที่ 8
ในการทริกเกอร์ S3 ด้วย AWS Lambda เราจะต้องใช้เหตุการณ์ S3 ในโค้ดดังที่แสดงด้านล่าง -
exports.handler = function(event, context, callback) {
console.log("Incoming Event: ", event);
const bucket = event.Records[0].s3.bucket.name;
const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
const message = `File is uploaded in - ${bucket} -> ${filename}`;
console.log(message);
callback(null, message);
};
โปรดสังเกตว่าพารามิเตอร์เหตุการณ์มีรายละเอียดของ S3event เราได้ยืนยันชื่อที่เก็บข้อมูลและชื่อไฟล์ซึ่งจะถูกบันทึกเมื่อคุณอัปโหลดภาพใน S3bucket
ขั้นตอนที่ 9
ตอนนี้ให้เราบันทึกการเปลี่ยนแปลงและทดสอบฟังก์ชันแลมบ์ดาด้วย S3upload ต่อไปนี้เป็นรายละเอียดโค้ดที่เพิ่มใน AWS Lambda -
ขั้นตอนที่ 10
ตอนนี้ให้เราเพิ่มบทบาทหน่วยความจำและระยะหมดเวลา
ขั้นตอนที่ 11
ตอนนี้บันทึกฟังก์ชัน Lambda เปิด S3 จากบริการของ Amazon และเปิดที่เก็บข้อมูลที่เราสร้างไว้ก่อนหน้านี้คือworkingwithlambdaands3.
อัพโหลดภาพตามที่แสดงด้านล่าง -
ขั้นตอนที่ 12
คลิก Upload ปุ่มเพิ่มไฟล์ดังภาพ -
ขั้นตอนที่ 13
คลิก Add filesเพื่อเพิ่มไฟล์ คุณยังสามารถลากและวางไฟล์ ตอนนี้คลิกUpload ปุ่ม.
ดังนั้นเราจึงอัปโหลดภาพหนึ่งภาพในที่เก็บข้อมูล S3 ของเรา
ขั้นตอนที่ 14
หากต้องการดูรายละเอียดทริกเกอร์ให้ไปที่บริการ AWS แล้วเลือก CloudWatch. เปิดบันทึกสำหรับฟังก์ชัน Lambda และใช้รหัสต่อไปนี้ -
exports.handler = function(event, context, callback) {
console.log("Incoming Event: ", event);
const bucket = event.Records[0].s3.bucket.name;
const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
const message = `File is uploaded in - ${bucket} -> ${filename}`;
console.log(message);
callback(null, message);
};
ผลลัพธ์ที่คุณสามารถสังเกตได้ใน Cloudwatch เป็นดังที่แสดง -
ฟังก์ชัน AWS Lambda จะถูกทริกเกอร์เมื่อไฟล์ถูกอัปโหลดในถัง S3 และรายละเอียดจะถูกบันทึกใน Cloudwatch ดังที่แสดงด้านล่าง -
การใช้ฟังก์ชัน Lambda กับ Amazon DynamoDB
DynamoDB สามารถทริกเกอร์ AWS Lambda เมื่อมีการเพิ่มข้อมูลลงในตารางอัปเดตหรือลบ ในบทนี้เราจะพูดถึงตัวอย่างง่ายๆที่จะเพิ่มรายการลงในตาราง DynamoDB และ AWS Lambda ซึ่งจะอ่านข้อมูลและส่งเมลพร้อมกับข้อมูลที่เพิ่มเข้าไป
ข้อกำหนด
ในการใช้ Amazon DB และ AWS Lambda เราจำเป็นต้องทำตามขั้นตอนดังที่แสดงด้านล่าง -
สร้างตารางใน DynamoDB ด้วยคีย์หลัก
สร้างบทบาทที่จะได้รับอนุญาตให้ทำงานกับ DynamoDB และ AWS Lambda
สร้างฟังก์ชันใน AWS Lambda
AWS Lambda Trigger เพื่อส่งอีเมล
เพิ่มข้อมูลใน DynamoDB
ให้เราพิจารณารายละเอียดแต่ละขั้นตอนนี้
ตัวอย่าง
เราจะหาตัวอย่างต่อไปนี้ซึ่งแสดงการโต้ตอบพื้นฐานระหว่าง DynamoDB และ AWS Lambda ตัวอย่างนี้จะช่วยให้คุณเข้าใจการดำเนินการต่อไปนี้ -
การสร้างตารางที่เรียกว่าลูกค้าในตาราง Dynamodb และวิธีการป้อนข้อมูลในตารางนั้น
ทริกเกอร์ฟังก์ชัน AWS Lambda เมื่อป้อนข้อมูลและส่งอีเมลโดยใช้บริการ Amazon SES
แผนภาพบล็อกพื้นฐานที่อธิบายการไหลของตัวอย่างดังแสดงด้านล่าง -
สร้างตารางใน DynamoDB ด้วยคีย์หลัก
ลงชื่อเข้าใช้คอนโซล AWS ไปที่ AWS Services แล้วเลือก DynamoDB ดังที่แสดงด้านล่าง เลือก DynamoDB
DynamoDB แสดงตัวเลือกดังที่แสดงด้านล่าง -
ตอนนี้คลิก Create tableเพื่อสร้างตารางดังที่แสดง เราได้ตั้งชื่อตารางเป็นcustomer ด้วยคีย์หลักสำหรับตารางนั้นเป็น cust_id. คลิกที่Create ปุ่มเพื่อเพิ่มตารางไปยัง dynamodb
ตารางที่สร้างขึ้นดังแสดงด้านล่าง -
เราสามารถเพิ่มรายการในตารางที่สร้างขึ้นได้ดังนี้ -
คลิก Items แล้วคลิก Create item ปุ่มดังรูป -
การสร้างบทบาทพร้อมสิทธิ์ในการทำงานกับ DynamoDB และ AWS Lambda
ในการสร้างบทบาทไปที่บริการของ AWS แล้วคลิก IAM
ให้เราสร้างนโยบายที่จะใช้สำหรับตาราง DynamoDB ที่สร้างไว้ก่อนหน้านี้ -
ตอนนี้เลือกไฟล์ Service. สังเกตว่าบริการที่เราเลือกคือDynamoDB. สำหรับActions เราได้ดำเนินการทั้งหมด Dynamodbการกระทำเช่นการเข้าถึงรายการอ่านและเขียน สำหรับresourcesเราจะเลือกการดำเนินการประเภททรัพยากรตาราง เมื่อคุณคลิกคุณจะเห็นหน้าจอดังนี้ -
ตอนนี้เลือก table และ Add ARNไปตามที่แสดง เราจะได้รับARN รายละเอียดจาก customer table สร้างขึ้นตามที่แสดงด้านล่าง -
ป้อน arn รายละเอียดที่นี่ -
คลิก Addเพื่อบันทึกการเปลี่ยนแปลง เมื่อทำเสร็จแล้วClick on Review policy. ป้อนชื่อนโยบายคำอธิบาย ฯลฯ ตามที่แสดงด้านล่าง -
คลิกที่ create policyเพื่อบันทึก เพิ่มนโยบายในบทบาทที่จะสร้าง เลือกRole จากด้านซ้ายและป้อนรายละเอียด
สังเกตว่านโยบายที่เพิ่มเข้ามาคือ newpolicyfordynamdb, awslambdafullaccess, cloudwatchfullaccess และ amazonsesfullaccess. เพิ่มบทบาทและจะใช้ขณะสร้างฟังก์ชัน AWS Lambda
สร้างฟังก์ชันใน AWS Lambda
ดังนั้นเราจึงสร้างฟังก์ชันแลมด้าที่เรียกว่า newlambdafordynamodb ตามที่ปรากฏ.
ตอนนี้ให้เราเพิ่ม DynamodDB trigger ไปที่ AWS Lambda ที่สร้างขึ้น รันไทม์ที่เราจะใช้คือ Node.js
คุณสามารถดูรายละเอียดต่อไปนี้ใน Dynamodb trigger ที่จะกำหนดค่าสำหรับ AWS Lambda -
ตอนนี้เพียงแค่คลิก Add เพื่อเพิ่มทริกเกอร์ใน AWS Lambda
AWS Lambda Trigger เพื่อส่งเมล
AWS Lambda จะถูกทริกเกอร์เมื่อข้อมูลถูกแทรกลงใน AWS Lambda พารามิเตอร์เหตุการณ์จะมีการแทรกข้อมูล dynamodb สิ่งนี้จะอ่านข้อมูลจากเหตุการณ์และส่งอีเมล
การส่งอีเมล
ในการส่งอีเมลคุณต้องทำตามขั้นตอนด้านล่าง -
ขั้นตอนที่ 1
ไปที่บริการ AWS แล้วเลือก SES (บริการอีเมลธรรมดา) ตรวจสอบอีเมลที่เราต้องการส่งอีเมลดังที่แสดง -
ขั้นตอนที่ 2
คลิกปุ่ม Verify a New Email Address เพื่อเพิ่มที่อยู่อีเมล
ขั้นตอนที่ 3
ป้อนที่อยู่อีเมลเพื่อยืนยัน ที่อยู่อีเมลจะรับและเปิดใช้งานเมลจาก Amazon ซึ่งต้องคลิก เมื่อการเปิดใช้งานเสร็จสิ้นรหัสอีเมลจะได้รับการยืนยันและสามารถใช้กับบริการของ AWS ได้
ขั้นตอนที่ 4
รหัส AWS Lambda ซึ่งอ่านข้อมูลจากเหตุการณ์และส่งอีเมลมีให้ด้านล่าง -
var aws = require('aws-sdk');
var ses = new aws.SES({
region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
console.log(event);
let tabledetails = JSON.parse(JSON.stringify(event.Records[0].dynamodb));
console.log(tabledetails.NewImage.address.S);
let customerid = tabledetails.NewImage.cust_id.S;
let name = tabledetails.NewImage.name.S;
let address = tabledetails.NewImage.address.S;
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data: "The data added is as follows:\n CustomerId:"+customerid+"\n Name:"+name+"\nAddress:"+address
}
},
Subject: {
Data: "Data Inserted in Dynamodb table customer"
}
},
Source: "[email protected]"
};
console.log('===SENDING EMAIL===');
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
}
ตอนนี้บันทึกฟังก์ชันแลมบ์ดาและข้อมูลในตาราง DynamoDB
เพิ่มข้อมูลใน DynamoDB
ใช้ลำดับต่อไปนี้เพื่อเพิ่มข้อมูลใน DynamoDB
ขั้นตอนที่ 1
ไปที่โต๊ะ customer สร้างใน Dynamodb
ขั้นตอนที่ 2
คลิก Create item.
ขั้นตอนที่ 3
คลิก Save และตรวจสอบรหัสอีเมลที่ให้ไว้ใน AWS Lambda เพื่อดูว่า AWS Lambda ส่งอีเมลหรือไม่
การใช้ฟังก์ชัน Lambda กับเหตุการณ์ตามกำหนดการ
เหตุการณ์ที่กำหนดไว้จะเกิดขึ้นในช่วงเวลาปกติตามชุดกฎ เหตุการณ์ตามกำหนดการใช้เพื่อเรียกใช้ฟังก์ชัน Lambda หลังจากช่วงเวลาที่กำหนดไว้ในบริการคลาวด์วอทช์ เหมาะที่สุดสำหรับการทำงานกับงาน cron ร่วมกับ AWS Lambda บทนี้จะอธิบายด้วยตัวอย่างง่ายๆในการส่งอีเมลทุก ๆ 5 นาทีโดยใช้เหตุการณ์ตามกำหนดการและ AWS Lambda
ข้อกำหนด
ข้อกำหนดสำหรับการใช้ฟังก์ชัน Lambda กับเหตุการณ์ตามกำหนดการมีดังนี้ -
- ยืนยันรหัสอีเมลโดยใช้ AWS SES
- สร้างบทบาทเพื่อใช้ AWS SES, Cloudwatch และ AWS Lambda
- สร้าง Lambda Function เพื่อส่งอีเมล
- เพิ่มกฎสำหรับเหตุการณ์ตามกำหนดการจาก AWS CloudWatch
ตัวอย่าง
ตัวอย่างที่เราจะพิจารณาจะเพิ่มเหตุการณ์ CloudWatch ในฟังก์ชัน AWS Lambda Cloudwatch จะเรียกใช้ AWS Lambda ตามรูปแบบเวลาที่แนบมา ตัวอย่างเช่นในตัวอย่างด้านล่างเราใช้เวลา 5 นาทีเป็นตัวกระตุ้น หมายความว่าทุกๆ 5 นาที AWS Lambda จะถูกทริกเกอร์และ AWS Lambda จะส่งอีเมลเมื่อใดก็ตามที่ถูกทริกเกอร์
แผนภาพบล็อกพื้นฐานสำหรับสิ่งเดียวกันดังแสดงด้านล่าง -
ยืนยันรหัสอีเมลโดยใช้ AWS SES
เข้าสู่ระบบ AWS และไปที่บริการ AWS SES ดังที่แสดงด้านล่าง -
ตอนนี้คลิก Simple Email บริการตามรูป -
คลิก Email Addresses ด้านซ้ายตามภาพ -
จะแสดงปุ่ม Verify a New Email Address. คลิกเลย
ป้อน Email Addressคุณต้องการยืนยัน คลิกVerify This Email Addressปุ่ม. คุณจะได้รับอีเมลจาก AWS ในรหัสอีเมลนั้นพร้อมหัวเรื่องอีเมล: Amazon Web Services - คำขอยืนยันที่อยู่อีเมลในภูมิภาคสหรัฐอเมริกาฝั่งตะวันออก (เวอร์จิเนียเหนือ)
คลิกลิงก์ที่ระบุในอีเมลเพื่อยืนยันที่อยู่อีเมล เมื่อตรวจสอบแล้วจะแสดงรหัสอีเมลดังนี้ -
สร้างบทบาทเพื่อใช้ AWS SES, Cloudwatch และ AWS Lambda
คุณยังสามารถสร้างบทบาทที่ให้สิทธิ์ในการใช้บริการ สำหรับสิ่งนี้ไปที่ IAM แล้วเลือกบทบาท เพิ่มนโยบายที่จำเป็นและสร้างบทบาท สังเกตว่าบทบาทที่สร้างขึ้นนี้คือevents with lambda.
สร้างฟังก์ชัน Lambda เพื่อส่งอีเมล
คุณจะต้องทำตามขั้นตอนเพื่อสร้างฟังก์ชัน Lambda โดยใช้รันไทม์เป็น nodejs
ตอนนี้เพิ่มทริกเกอร์ให้กับ Lambda ตามที่แสดง -
เพิ่มรายละเอียดไปที่ CloudWatch Events Trigger ดังแสดงด้านล่าง -
โปรดทราบว่าเหตุการณ์จะถูกทริกเกอร์หลังจากทุกๆ 5 นาทีตามทริกเกอร์กฎที่สร้างขึ้น
รหัสแลมด้าสำหรับส่งอีเมลมีให้ด้านล่าง -
var aws = require('aws-sdk');
var ses = new aws.SES({
region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data: "this mail comes from aws lambda event scheduling"
}
},
Subject: {
Data: "Event scheduling from aws lambda"
}
},
Source: "[email protected]"
};
console.log('===SENDING EMAIL===');
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
};
ตอนนี้เราต้องการบริการ AWS SES คุณสามารถเพิ่มสิ่งนี้โดยใช้รหัสที่แสดงดังนี้ -
var aws = require('aws-sdk');
var ses = new aws.SES({
region: 'us-east-1'
});
ในการส่งจดหมายจาก nodejsเราได้สร้าง eParams วัตถุที่มีรายละเอียดเช่นไฟล์ example mail, to mail id และ the body with message ดังต่อไปนี้ -
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data: "this mail comes from aws lambda event scheduling"
}
},
Subject: {
Data: "Event scheduling from aws lambda"
}
},
Source: "[email protected]"
};
รหัสแลมด้าสำหรับส่งอีเมลมีดังนี้ -
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
ตอนนี้ให้เราบันทึกฟังก์ชัน Lambda นี้และตรวจสอบรหัสอีเมลสำหรับอีเมล ภาพหน้าจอที่แสดงด้านล่างแสดงว่าอีเมลถูกส่งจาก AWS Lambda หลังจากทุกๆ 5 นาที
การใช้ฟังก์ชัน Lambda กับ Amazon SNS
Amazon SNS เป็นบริการที่ใช้สำหรับการแจ้งเตือนแบบพุช ในบทนี้เราจะอธิบายการทำงานของ AWS Lambda และ Amazon SNS ด้วยความช่วยเหลือของตัวอย่างที่จะดำเนินการต่อไปนี้ -
สร้างหัวข้อในบริการ SNS และใช้ AWS Lambda Add Topics ไปยัง CloudWatch
ส่งข้อความ SNS ตามหมายเลขโทรศัพท์ที่ระบุ
ข้อกำหนด
ในการสร้างหัวข้อในบริการ SNS และใช้ AWS Lambda Add Topics ไปยัง CloudWatch เราไม่จำเป็นต้องทำตามขั้นตอนด้านล่างนี้ -
- สร้างหัวข้อใน SNS
- สร้างบทบาทสำหรับสิทธิ์ใน IAM
- สร้างฟังก์ชัน AWS Lambda
- เผยแพร่ไปยังหัวข้อเพื่อเปิดใช้งานทริกเกอร์
- ตรวจสอบรายละเอียดข้อความในบริการ CloudWatch
ในการส่งข้อความ SNS ตามหมายเลขโทรศัพท์ที่ให้ไว้เราต้องดำเนินการดังต่อไปนี้ -
- เพิ่มรหัสใน AWS Lambda เพื่อส่งข้อความไปยังโทรศัพท์ของคุณ
ตัวอย่าง
ในตัวอย่างนี้เราจะสร้างหัวข้อใน SNS เมื่อป้อนรายละเอียดในหัวข้อเพื่อเผยแพร่ AWS Lambda จะถูกทริกเกอร์ รายละเอียดหัวข้อถูกบันทึกใน CloudWatch และ AWS Lambda จะส่งข้อความทางโทรศัพท์
นี่คือแผนภาพบล็อกพื้นฐานซึ่งอธิบายเหมือนกัน -
สร้างหัวข้อใน SNS
คุณจะต้องทำตามขั้นตอนด้านล่างเพื่อสร้างหัวข้อใน SNS -
ขั้นตอนที่ 1
เข้าสู่ระบบ AWS Console และไปที่บริการ SNS ใน Amazon ดังที่แสดงด้านล่าง -
ขั้นตอนที่ 2
คลิก Simple Notification บริการและ Create topic ในนั้น.
ขั้นตอนที่ 3
จากนั้นคุณต้องคลิก Create new topic ปุ่มดังรูป -
ขั้นตอนที่ 4
ป้อนไฟล์ Topic name และ Display name และคลิกที่ Create topic. คุณจะเห็นชื่อหัวข้อในจอแสดงผลดังนี้ -
สร้างบทบาทสำหรับสิทธิ์ใน IAM
ในการสร้างบทบาทเพื่อทำงานกับบริการ AWS Lambda และ SNS เราจำเป็นต้องลงชื่อเข้าใช้คอนโซล AWS จากนั้นเลือก IAM จากบริการของ Amazon และคลิกบทบาทจากด้านซ้ายดังที่แสดงด้านล่าง
สังเกตว่าเราได้เพิ่มนโยบายสำหรับ SNS, Lambda และ CloudWatch เพิ่มชื่อเล่นแล้วคลิกปุ่มสร้างบทบาทเพื่อทำขั้นตอนการสร้างบทบาทให้เสร็จสิ้น
สร้างฟังก์ชัน AWS Lambda
ในส่วนนี้ให้เราเข้าใจวิธีสร้างฟังก์ชัน AWS Lambda โดยใช้ nodejs เป็นรันไทม์
เพื่อจุดประสงค์นี้ให้เข้าสู่ระบบคอนโซล AWS และเลือก AWS Lambda จากบริการของ AWS เพิ่มชื่อฟังก์ชันรายละเอียดบทบาทและอื่น ๆ และสร้างฟังก์ชัน AWS Lambda ดังที่แสดง
เพิ่ม SNS Trigger
ในการเพิ่มทริกเกอร์ SNS ให้ป้อนรายละเอียดการกำหนดค่า SNS ดังที่แสดง -
จากนั้นเลือก SNS topic และ Add ทริกเกอร์ไปยังฟังก์ชัน AWS Lambda ดังที่แสดง -
จากนั้นเพิ่มโค้ด AWS lambda ที่ระบุด้านล่าง -
exports.handler = function(event, context, callback) {
console.log("AWS lambda and SNS trigger ");
console.log(event);
const sns = event.Records[0].Sns.Message;
console.log(sns)
callback(null, sns);
};
ในโค้ดด้านบน event.Records[0].Sns.Messageให้เพิ่มรายละเอียดข้อความ เราได้เพิ่มบันทึกคอนโซลเพื่อดูใน CloudWatch ตอนนี้บันทึกฟังก์ชัน Lambda ด้วยหน่วยความจำที่จำเป็นและการจัดสรรเวลา
เผยแพร่ไปยังหัวข้อเพื่อเปิดใช้งานทริกเกอร์
โปรดจำไว้ว่าเราได้สร้างหัวข้อใน SNS แล้วในขั้นตอนที่ 1 ตอนนี้เราจะเผยแพร่ในหัวข้อและดูรายละเอียดใน CloudWatch ซึ่ง AWS Lambda จะเรียกใช้ -
เผยแพร่ในหัวข้อ
ขั้นแรกเลือกชื่อหัวข้อที่คุณต้องการเผยแพร่ คลิกที่Publish to topic ปุ่ม -
ป้อนไฟล์ Subject และ Message รายละเอียดดังแสดงด้านล่าง -
คุณยังสามารถเลือก JSON รูปแบบข้อความที่จะส่ง JSONสไตล์. คลิกPublish the message ปุ่มท้ายหน้าจอ
ตรวจสอบรายละเอียดข้อความในบริการ CloudWatch
ลงชื่อเข้าใช้คอนโซล AWS และเปิดบริการ CloudWatch คลิกที่บันทึกทางด้านซ้ายและเลือกบันทึกสำหรับฟังก์ชัน AWS Lambda ที่สร้างขึ้น คุณสามารถค้นหาการแสดงผลต่อไปนี้สำหรับบันทึกพร้อมข้อความที่สร้างขึ้นดังที่แสดงด้านบน -
เพิ่มรหัสใน AWS Lambda เพื่อส่งข้อความไปยังโทรศัพท์ของคุณ
ที่นี่จะใช้การส่งข้อความ SNS เพื่อส่งข้อความทางโทรศัพท์โดยใช้ AWS Lambda คุณสามารถใช้รหัสต่อไปนี้เพื่ออัปเดตโค้ด AWS Lambda ได้ดังนี้ -
const aws = require("aws-sdk");
const sns = new aws.SNS({
region:'us-east-1'
});
exports.handler = function(event, context, callback) {
console.log("AWS lambda and SNS trigger ");
console.log(event);
const snsmessage = event.Records[0].Sns.Message;
console.log(snsmessage);
sns.publish({
Message: snsmessage,
PhoneNumber: '+911212121212'
}, function (err, data) {
if (err) {
console.log(err);
callback(err, null);
} else {
console.log(data);
callback(null, data);
}
});
};
เราได้เพิ่ม AWS SDK และบริการ SNS เพื่อใช้ในการส่งข้อความ ข้อความจากกิจกรรมที่มาจาก SNS จะถูกส่งเป็นข้อความตามหมายเลขโทรศัพท์ที่ให้ไว้
สังเกตรหัสต่อไปนี้เช่น -
sns.publish({
Message: snsmessage,
PhoneNumber: '+911212121212'
}, function (err, data) {
if (err) {
console.log(err);
callback(err, null);
} else {
console.log(data);
callback(null, data);
}
});
เข้าสู่หัวข้อทันทีเพื่อดูข้อความใน cloudwatch และหมายเลขโทรศัพท์ที่ระบุไว้ด้านบน
คลิก Publish messageเพื่อเผยแพร่ข้อความ คุณเห็นข้อความบนหมายเลขโทรศัพท์ที่ระบุดังนี้ -
การใช้ฟังก์ชัน Lambda กับ CloudTrail
AWS CloudTrailเป็นบริการที่มีให้ใน Amazon ซึ่งช่วยในการบันทึกกิจกรรมทั้งหมดที่ทำในคอนโซล AWS บันทึกการเรียก API ทั้งหมดและจัดเก็บประวัติซึ่งสามารถใช้ในภายหลังเพื่อวัตถุประสงค์ในการดีบัก โปรดทราบว่าเราไม่สามารถเรียกใช้ Lambda จาก CloudTrail ได้ CloudTrail จะจัดเก็บประวัติทั้งหมดในรูปแบบของบันทึกในถัง S3 แทนและเราสามารถเรียกใช้ AWS Lambda จาก S3 ได้ เมื่อต้องประมวลผลบันทึกใด ๆ AWS Lambda จะถูกทริกเกอร์ทุกครั้งที่มีการเพิ่มบันทึกลงในที่เก็บข้อมูล S3
ข้อกำหนด
ก่อนที่คุณจะเริ่มทำงานกับ AWS CloudTrail, S3 และ AWS Lambda คุณต้องดำเนินการดังต่อไปนี้ -
- สร้างที่เก็บข้อมูล S3 เพื่อจัดเก็บบันทึก CloudTrail
- สร้างบริการ SNS
- สร้างเส้นทางใน CloudTrail และกำหนด S3 ที่เก็บข้อมูลและบริการ SNS
- สร้างบทบาท IAM โดยได้รับอนุญาต
- สร้างฟังก์ชัน aws lambda
- การกำหนดค่า AWS Lambda
ตัวอย่าง
ลองพิจารณาตัวอย่างที่แสดงการทำงานของ AWS CloudTrail, S3 และ AWS Lambda ที่นี่เราจะสร้างที่เก็บข้อมูลใน S3 ซึ่งจะจัดเก็บบันทึกทั้งหมดสำหรับการโต้ตอบใด ๆ ที่ทำในคอนโซล AWS ให้เราสร้างหัวข้อ SNS และเผยแพร่ สำหรับการดำเนินการนี้บันทึกจะถูกป้อนเป็นไฟล์ใน S3 AWS lambda จะถูกทริกเกอร์ซึ่งจะส่งอีเมลโดยใช้บริการ Amazon SES
แผนภาพบล็อกสำหรับอธิบายกระบวนการนี้มีดังที่แสดงด้านล่าง -
สร้าง S3 Bucket เพื่อจัดเก็บบันทึก CloudTrail
ไปที่คอนโซล AWS แล้วคลิกบริการ S3 คลิกCreate bucket และป้อนชื่อที่เก็บข้อมูลที่คุณต้องการจัดเก็บบันทึก cloudtrail ดังที่แสดง -
สังเกตว่าที่นี่เราได้สร้างที่เก็บข้อมูล S3 cloudtraillogsaws สำหรับจัดเก็บบันทึก
สร้างบริการ SNS
ไปที่คอนโซล AWS แล้วคลิก Simple notification Service. เลือกหัวข้อจากด้านซ้ายแล้วคลิกปุ่มสร้างหัวข้อใหม่
เราได้สร้างหัวข้อที่เรียกว่า displaytrailเพื่อเผยแพร่หัวข้อ รายละเอียดจะถูกเก็บไว้ใน S3bucket ที่สร้างไว้ด้านบน
สร้าง Trail ใน Cloudtrail และกำหนดที่เก็บข้อมูล S3 และบริการ SNS
ไปที่คอนโซล AWS แล้วคลิก CloudTrail บริการจาก Management tools ดังภาพ -
คลิก Trails จากด้านซ้ายตามที่แสดงด้านล่าง -
คลิก Create Trailปุ่ม. ป้อนไฟล์Trail name, Apply trail to all regions และเลือก Yes. จากนั้นบันทึกจะถูกนำไปใช้กับทุกภูมิภาค
สำหรับ Read/Write eventsเลือก All. เพิ่มไฟล์S3 bucket และ SNS topicรายละเอียดตามที่แสดงด้านล่าง คุณสามารถสร้างใหม่ได้ที่นี่หรือเพิ่มที่มีอยู่
โปรดทราบว่ามีตัวเลือกให้ encrypt log files, enable log file validation, send sns notification for every log file deliveryฯลฯ ฉันใช้ค่าเริ่มต้นที่นี่ คุณสามารถอนุญาตการเข้ารหัสไฟล์และจะขอคีย์การเข้ารหัส คลิกที่ปุ่ม Create Trail เมื่อเพิ่มรายละเอียดแล้ว
สร้างบทบาท IAM ด้วยสิทธิ์
ไปที่คอนโซล AWS แล้วเลือก IAM สร้างบทบาทโดยได้รับอนุญาต S3, Lambda, CloudTrail และ SES สำหรับการส่งอีเมล บทบาทที่สร้างขึ้นมีดังที่แสดงด้านล่าง -
สร้างฟังก์ชัน AWS Lambda
ไปที่บริการ AWS แล้วคลิก Lambdaบริการ. เพิ่มชื่อฟังก์ชันเลือกรันไทม์เป็นnodejsและเลือกบทบาทที่สร้างขึ้นสำหรับฟังก์ชันแลมบ์ดา ต่อไปนี้คือฟังก์ชันแลมบ์ดาที่สร้างขึ้น
การกำหนดค่า AWS Lambda
ต่อไปเราต้องเพิ่ม S3 เป็นทริกเกอร์สำหรับ AWS lambda ที่สร้างขึ้น
เพิ่มรายละเอียดที่เก็บข้อมูล S3 เพื่อเพิ่มทริกเกอร์และเพิ่มรหัส AWS Lambda ต่อไปนี้ -
const aws = require("aws-sdk");
const sns = new aws.SNS({
region:'us-east-1'
});
var ses = new aws.SES({
region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
console.log("AWS lambda and SNS trigger ");
console.log(event);
const s3message = "Bucket Name:"+event.Records[0].s3.bucket.name+"\nLog details:"+event.Records[0].s3.object.key;
console.log(s3message);
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data:s3message
}
},
Subject: {
Data: "cloudtrail logs"
}
},
Source: "[email protected]"
};
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
};
โปรดทราบว่าเรากำลังรับข้อมูล S3 ที่เก็บข้อมูลและบันทึกรายละเอียดจากเหตุการณ์และส่งอีเมลโดยใช้บริการ SES ดังที่แสดงด้านบน
เมื่อใดก็ตามที่กิจกรรมใด ๆ เกิดขึ้นในคอนโซล AWS บันทึกจะถูกส่งไปยังที่เก็บข้อมูล S3 และในเวลาเดียวกัน AWS lambda จะถูกทริกเกอร์และอีเมลจะถูกส่งไปยังรหัสอีเมลที่กล่าวถึง
โปรดทราบว่าคุณสามารถประมวลผลบันทึกตามความต้องการของคุณใน AWS Lambda
การใช้ฟังก์ชัน Lambda กับ Amazon Kinesis
AWS Kinesisบริการนี้ใช้ในการบันทึก / จัดเก็บข้อมูลการติดตามแบบเรียลไทม์ที่มาจากการคลิกเว็บไซต์บันทึกฟีดโซเชียลมีเดีย เราสามารถทริกเกอร์ AWS Lambda เพื่อดำเนินการประมวลผลเพิ่มเติมในบันทึกนี้
ข้อกำหนด
ข้อกำหนดพื้นฐานในการเริ่มต้นใช้งาน Kinesis และ AWS Lambda มีดังที่แสดง -
- สร้างบทบาทด้วยสิทธิ์ที่จำเป็น
- สร้างกระแสข้อมูลใน Kinesis
- สร้างฟังก์ชัน AWS Lambda
- เพิ่มโค้ดใน AWS Lambda
- เพิ่มข้อมูลไปยังสตรีมข้อมูล Kinesis
ตัวอย่าง
ให้เราดูตัวอย่างที่เราจะเรียกใช้ AWS Lambda สำหรับการประมวลผลสตรีมข้อมูลจาก Kinesis และส่งอีเมลพร้อมข้อมูลที่ได้รับ
แผนภาพบล็อกอย่างง่ายสำหรับอธิบายกระบวนการแสดงอยู่ด้านล่าง -
สร้างบทบาทด้วยสิทธิ์ที่จำเป็น
ไปที่คอนโซล AWS และสร้างบทบาท
สร้างกระแสข้อมูลใน Kinesis
ไปที่คอนโซล AWS และสร้างสตรีมข้อมูลใน kinesis
มี 4 ตัวเลือกดังภาพ เราจะดำเนินการสร้างสตรีมข้อมูลในตัวอย่างนี้
คลิก Create data stream. ป้อนชื่อในชื่อสตรีม Kinesis ที่ระบุด้านล่าง
ป้อนจำนวนชาร์ดสำหรับสตรีมข้อมูล
รายละเอียดของ Shards มีดังที่แสดงด้านล่าง -
ป้อนชื่อและคลิกไฟล์ Create Kinesis stream ปุ่มที่ด้านล่าง
โปรดทราบว่าการสตรีมต้องใช้เวลาพอสมควร
สร้างฟังก์ชัน AWS Lambda
ไปที่คอนโซล AWS แล้วคลิก Lambda สร้างฟังก์ชัน AWS Lambda ดังที่แสดง -
คลิก Create functionปุ่มท้ายหน้าจอ เพิ่ม Kinesis เป็นทริกเกอร์ใน AWS Lambda
เพิ่มรายละเอียดการกำหนดค่าให้กับ Kinesis trigger -
เพิ่มทริกเกอร์และเพิ่มโค้ดใน AWS Lambda
การเพิ่มโค้ดใน AWS Lambda
เพื่อจุดประสงค์นี้เราจะใช้ nodejs เป็นรันไทม์ เราจะส่งอีเมลเมื่อ AWS Lambda ถูกทริกเกอร์ด้วย kinesis data stream
const aws = require("aws-sdk");
var ses = new aws.SES({
region: 'us-east-1'
});
exports.handler = function(event, context, callback) {
let payload = "";
event.Records.forEach(function(record) {
// Kinesis data is base64 encoded so decode here
payload = new Buffer(record.kinesis.data, 'base64').toString('ascii');
console.log('Decoded payload:', payload);
});
var eParams = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data:payload
}
},
Subject: {
Data: "Kinesis data stream"
}
},
Source: "[email protected]"
};
var email = ses.sendEmail(eParams, function(err, data) {
if (err) console.log(err);
else {
console.log("===EMAIL SENT===");
console.log("EMAIL CODE END");
console.log('EMAIL: ', email);
context.succeed(event);
callback(null, "email is send");
}
});
};
พารามิเตอร์เหตุการณ์มีข้อมูลที่ป้อนในสตรีมข้อมูล kinesis โค้ด lambda aws ข้างต้นจะเปิดใช้งานเมื่อป้อนข้อมูลใน kinesis data stream
เพิ่มข้อมูลไปยัง Kinesis Data Stream
ที่นี่เราจะใช้ AWS CLI เพื่อเพิ่ม data kinesis data stream ดังที่แสดงด้านล่าง เพื่อจุดประสงค์นี้เราสามารถใช้คำสั่งต่อไปนี้ -
aws kinesis put-record --stream-name kinesisdemo --data "hello world" --
partition-key "789675"
จากนั้น AWS Lambda จะเปิดใช้งานและส่งอีเมล
การใช้ฟังก์ชัน Lambda กับ Custom User Applications
เราสามารถใช้ฟังก์ชัน AWS lambda เพื่อประมวลผลโดยใช้เหตุการณ์ที่สร้างขึ้นโดยแอปพลิเคชันของผู้ใช้ในสองวิธีต่อไปนี้ -
- การใช้ AWS Console
- การใช้ AWS CLI
การใช้ AWS Console
จากคอนโซล AWS เราจะทำงานกับเหตุการณ์และ AWS Lambda เพื่อจุดประสงค์นี้ไปที่คอนโซล AWS และสร้างฟังก์ชันแลมบ์ดา
ต่อไปให้เราเพิ่มรหัสสำหรับ AWS Lambda -
exports.handler = (event, context, callback) => {
// TODO implement
console.log("Hello => "+ event.name);
console.log("Address =>"+ event.addr);
callback(null, 'Hello '+event.name +" and address is "+ event.addr);
};
โปรดทราบว่าในรหัสด้านบนเรากำลังพิมพ์ชื่อและที่อยู่โดยใช้เหตุการณ์
รายละเอียดของกิจกรรมจะได้รับโดยใช้เหตุการณ์ทดสอบที่สร้างขึ้นดังต่อไปนี้ -
ตอนนี้บันทึกเหตุการณ์และทดสอบ
เอาต์พุตบันทึกที่สอดคล้องกันดังแสดงที่นี่ -
การใช้ AWS CLI
เราสามารถเรียกใช้ฟังก์ชันข้างต้นโดยใช้ AWS CLI ได้ดังนี้ -
aws lambda invoke --function-name "lambdauserevent" --log-type Tail --
payload file://C:\clioutput\input.txt C:\clioutput\outputfile.txt
รายละเอียดเหตุการณ์จะถูกกำหนดให้กับ payload และเอาต์พุตจะถูกเก็บไว้ที่ C:\clioutput\outputfile.txt. ดังต่อไปนี้ -
input.txt
{"name":"Roy Singh", "addr":"Mumbai"}
ในการเรียกใช้ Lambda โดยใช้ AWS CLI คุณจะเห็นผลลัพธ์ดังนี้ -
ในทำนองเดียวกันในกรณีที่คุณต้องการทดสอบ AWS Lambda สำหรับบริการ AWS อื่น ๆ คุณสามารถทำได้โดยใช้เหตุการณ์ทดสอบในคอนโซล AWS และ AWS CLI ตัวอย่างเหตุการณ์สำหรับบริการ SNS แสดงอยู่ด้านล่าง -
{
"Records": [{
"EventVersion": "1.0",
"EventSubscriptionArn": "arnid",
"EventSource": "aws:sns",
"Sns": {
"SignatureVersion": "1",
"Timestamp": "1970-01-01T00:00:00.000Z",
"Signature": "EXAMPLE",
"SigningCertUrl": "EXAMPLE",
"MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e",
"Message": "Hello from SNS!",
"MessageAttributes": {
"Test": {
"Type": "String",
"Value": "TestString"
},
"TestBinary": {
"Type": "Binary",
"Value": "TestBinary"
}
},
"Type": "Notification",
"UnsubscribeUrl": "EXAMPLE",
"TopicArn": "topicarn",
"Subject": "TestInvoke"
}
}]
}
ให้เราเพิ่มเหตุการณ์ตัวอย่างที่แสดงด้านบนและทดสอบตามที่แสดง -
ใน AWS Lambda โค้ดจะพิมพ์ข้อความ SNS ดังที่แสดงในตัวอย่างด้านล่าง -
exports.handler = (event, context, callback) => {
// TODO implement
console.log(event.Records[0].Sns.Message);
callback(null, event.Records[0].Sns.Message);};
ให้เราเรียกสิ่งเดียวกันโดยใช้ AWS CLI ให้เราบันทึกเหตุการณ์ลงในไฟล์และใช้สำหรับเพย์โหลดโดยใช้คำสั่งที่แสดง -
aws lambda invoke --function-name "lambdauserevent" --log-type Tail --
payload file://C:\clioutput\sns.txt C:\clioutput\snsoutput.txt
การใช้ AWS Lambda @ Edge กับ CloudFront
Lambda @ Edge เป็นส่วนเสริมของบริการประมวลผล AWS Lambda ซึ่งใช้เพื่อปรับแต่งเนื้อหาที่ cloudfront มอบให้
แผนภาพบล็อกที่แสดงการทำงานของ AWS Lambda กับ cloudfront จาก AWS แสดงอยู่ด้านล่าง -
มีสี่วิธีในการใช้ AWS Lambda -
Viewer Request − ผู้ใช้ส่งคำขอที่เรียกว่า Viewer Request ไปยัง CloudFront
Origin Request − CloudFront ส่งต่อคำขอไปยังต้นทาง
Origin Response − CloudFront ได้รับการตอบสนองจากต้นทาง
Viewer Response − CloudFront ส่งการตอบสนองไปยังผู้ดู
เราสามารถใช้ Lambda @ Edge เพื่อวัตถุประสงค์ดังต่อไปนี้ -
เพื่อเปลี่ยนส่วนหัวตามคำขอและเวลาตอบสนอง
เพิ่มรายละเอียดคุกกี้ในส่วนหัว ทำการทดสอบ AB ตามคำขอและการตอบกลับ
เปลี่ยนเส้นทาง URL ไปยังไซต์อื่นโดยพิจารณาจากรายละเอียดส่วนหัว
เราสามารถดึง user-agent จากส่วนหัวและค้นหารายละเอียดของเบราว์เซอร์ OS และอื่น ๆ
ข้อกำหนด
ในการเริ่มต้นทำงานกับ CloudFront และ Lambda @ Edge เราจำเป็นต้องมีสิ่งต่อไปนี้ -
สร้างที่เก็บข้อมูล S3 พร้อมรายละเอียดไฟล์
สร้างบทบาทที่จะอนุญาตให้ทำงานกับ CloudFront และ Lambda @ Edge
สร้างการกระจาย CloudFront
สร้างฟังก์ชันแลมบ์ดา
เพิ่มรายละเอียดฟังก์ชันแลมบ์ดาไปยังคลาวด์ฟร้อนท์
ตรวจสอบ URL ของ cloudfront ในเบราว์เซอร์
เราจะดำเนินการกับตัวอย่างด้วย CloudFront และ Lambda @ Egde ซึ่งเราจะโฮสต์เพจและเปลี่ยนการตอบสนองเมื่อตรวจพบว่าเป็นเดสก์ท็อปและอุปกรณ์
สร้าง S3 Storage Bucket พร้อมรายละเอียดไฟล์
เข้าสู่ระบบคอนโซล AWS และสร้างที่เก็บข้อมูลใน S3 และเพิ่มไฟล์ . html ไฟล์ที่คุณต้องการแสดง
คลิกที่ S3 และ Create bucket ดังแสดงด้านล่าง -
ตอนนี้คลิก Create bucket และเพิ่มรายละเอียดของถังตามที่แสดงด้านล่าง -
คลิกที่ Create และอัปโหลด. html ในนั้น
สร้างบทบาท
ไปที่คอนโซล AWS แล้วคลิก IAM.
ตอนนี้คลิก Roles -> Create role ปุ่มดังรูป -
เลือกการอนุญาตสำหรับ S3, Lambda และ Cloudfront. เป็นแนวทางปฏิบัติที่ดีในการสร้างนโยบายที่ให้สิทธิ์เฉพาะฟังก์ชันที่จำเป็นพื้นที่เก็บข้อมูลโดยใช้รายละเอียด ARN
ในตัวอย่างที่กล่าวถึงด้านล่างเรากำลังแสดงไฟล์ Full Accessการอนุญาต นโยบายสำหรับชื่อบทบาทrole for cloudfrontถูกเพิ่มตามที่แสดงด้านบน คลิกที่สร้างบทบาท
นโยบายทั้งหมดที่จำเป็นสำหรับ lambda @ edge และ cloudfront มีดังที่แสดงไว้ด้านบน มีขั้นตอนเพิ่มเติมที่ต้องทำที่นี่เนื่องจากในกรณีของ cloudfront URL จะพร้อมใช้งานทั่วภูมิภาคและต้องการความสัมพันธ์ที่ไว้วางใจระหว่างบริการที่เราใช้
ตอนนี้สำหรับบทบาทที่สร้างขึ้นให้คลิกที่ Trust relationships tab ดังรูป -
คลิกที่ Edit Trust Relationship ดังแสดงด้านล่าง -
จะแสดงเอกสารนโยบาย เราจำเป็นต้องเพิ่มบริการอื่น ๆ ในไฟล์Principal -> Serviceที่เราวางแผนจะใช้ เอกสารนโยบายความสัมพันธ์ความไว้วางใจขั้นสุดท้ายมีดังที่แสดงด้านล่าง -
คลิก Update Trust Policy เพื่อบันทึกการเปลี่ยนแปลง
สร้างการกระจาย CloudFront
ไปที่บริการ CloudFront ดังที่แสดงด้านล่าง -
คลิกที่บริการ CloudFront และคลิกที่ Create Distribution -
การตั้งค่าแหล่งกำเนิดการตั้งค่าพฤติกรรมและการตั้งค่าการกระจาย
ให้เราตรวจสอบการตั้งค่าเหล่านี้ทีละรายการ -
Origin Settings
พารามิเตอร์ต่างๆของการตั้งค่า Origin มีคำอธิบายดังต่อไปนี้ -
Origin Domain Name −นี่คือชื่อของถัง S3 ที่เราเก็บไฟล์ html นอกจากนี้เรายังสามารถจัดเก็บรูปภาพในถัง S3 ได้ด้วยการสร้างโฟลเดอร์ที่เราเลือก
Origin Path −ที่นี่คุณต้องป้อนชื่อของโฟลเดอร์ที่จัดเก็บไฟล์ ในปัจจุบันเราไม่มีโฟลเดอร์นี้ดังนั้นเราจะเว้นว่างไว้ในตอนนี้
Origin ID −จะได้รับการเติมข้อมูลเมื่อเลือกชื่อโดเมนต้นทาง คุณสามารถเปลี่ยนรหัสได้ตามที่คุณเลือก
Restrict Bucket Access − ในนี้เราจะเลือกตัวเลือก yes. ที่นี่เราต้องการความปลอดภัยสำหรับบัคเก็ต S3 เพื่อไม่ให้ใครสามารถเข้าถึงที่เก็บข้อมูล S3 ได้ สำหรับตัวเลือกนี้มีตัวเลือกเพิ่มเติมบางตัวเลือกเช่นOrigin Access Identity, Comment and Grant Read Permission on Bucket.
Origin Access Identity −เราได้ใช้ตัวเลือกสร้างเอกลักษณ์ใหม่ คุณยังสามารถเลือกข้อมูลประจำตัวที่มีอยู่ สิ่งนี้สร้างเอกลักษณ์ใหม่ซึ่ง CloudFront ใช้เพื่ออ่านรายละเอียดจากที่เก็บข้อมูล S3
Grand Read Permission on Bucket − สำหรับสิ่งนี้ให้เลือกตัวเลือก Yes.
Origin Custom Headers − เราจะเว้นส่วนหัวไว้ที่นี่เนื่องจากเราไม่ต้องการรายละเอียดในตอนนี้
ต่อไปให้เราพูดคุยและเติมเต็ม Behaviour Settings สำหรับการกระจาย Cloudront -
ตอนนี้เลือกโปรโตคอล - https หรือ http และตัวเลือกการแคช โปรดทราบว่าการแคชเริ่มต้นคือ 86400 หรือ 24 ชม. คุณสามารถเปลี่ยนค่านี้ได้ตามข้อกำหนด
คลิก Object Caching(ปรับแต่งตัวเลือก) เพื่อเปลี่ยนการแคช คุณสามารถใช้ได้smooth streamingในกรณีที่มีวิดีโอบนเพจของคุณ ที่นี่เรากำลังรักษาตัวเลือกเริ่มต้นไว้ เมื่อสร้างฟังก์ชันแลมบ์ดาแล้วจะมีการเพิ่มรายละเอียด
รายละเอียดสำหรับการตั้งค่าการแจกจ่ายแสดงไว้ด้านล่าง -
พารามิเตอร์ต่างๆของการตั้งค่าการกระจายอธิบายไว้ด้านล่าง -
Price class −มีรายละเอียดเช่นที่มาของการเข้าชมของผู้ใช้ โปรดทราบว่าที่นี่เราได้เลือกค่าเริ่มต้น -Use All Edge Locations.
AWS WAF Web ACL −ใช้สำหรับการเลือกไฟร์วอลล์เว็บแอปพลิเคชัน ที่นี่มีตัวเลือกเป็นNone. ขั้นแรกเราต้องสร้างไฟร์วอลล์ใน AWS ให้ความปลอดภัยกับไซต์
Alternate Domain Names − คุณสามารถระบุชื่อโดเมนได้ที่นี่หากคุณมี
SSL Certificate −นี่มีรายละเอียดทั้งหมดที่ต้องเลือกสำหรับใบรับรอง SSL เราจะเก็บค่าเริ่มต้นไว้
Default Root Object −ที่นี่เราจะระบุชื่อไฟล์ที่เราอัปโหลดใน S3 สำหรับสิ่งนี้เราต้องการให้เนื้อหาจาก. html แสดงตามค่าเริ่มต้น
ส่วนที่เหลือเราจะคงค่าเริ่มต้นไว้
คลิก Create Distribution เพื่อเพิ่มการกระจาย
โปรดทราบว่าการแจกจ่ายจะใช้เวลาสักครู่เพื่อแสดงสถานะว่าทำให้ใช้งานได้
สร้างฟังก์ชัน AWS Lambda
ไปที่คอนโซล AWS และสร้างฟังก์ชัน Lambda
ในรหัส AWS Lambda เราจะใช้ส่วนหัวของคำขอและตรวจสอบตัวแทนผู้ใช้ หาก user-agent มาจากเดสก์ท็อปเราจะเปลี่ยนการตอบกลับเพื่อแสดงข้อความเป็น“DESKTOP : Welcome to AWS Lambda with Cloudfront!” และหากอุปกรณ์ข้อความจะเป็น“MOBILE DEVICES : Hello from Lambda@Edge!”
รหัส AWS Lambda ที่สอดคล้องกันดังแสดงด้านล่าง -
let content = `
<\!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Simple Lambda@Edge Static Content Response</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<h1>MOBILE DEVICES : Hello from Lambda@Edge!</h1>
</body>
</html>
`;
let content1 = `
<\!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Simple Lambda@Edge Static Content Response</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<h1>DESKTOP : Welcome to AWS Lambda with Cloudfront!</h1>
</body>
</html>
`;
exports.handler = (event, context, callback) => {
let request = event.Records[0].cf.request;
let finalrequest = JSON.stringify(request);
let headers = request.headers;
let useragent = JSON.stringify(headers["user-agent"][0].value);
let str = "";
if(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobile|mobile|CriOS/i.test(useragent)) {
str = content;
} else {
str = content1;
}
const response = {
status: '200',
statusDescription: 'OK',
body: str+useragent,
};
callback(null, response);
};
ตอนนี้บันทึกฟังก์ชัน Lambda โปรดทราบว่าเราจำเป็นต้องเผยแพร่ฟังก์ชัน Lambda เพื่อให้สามารถใช้งานได้กับทุกภูมิภาค ในการเผยแพร่เราต้องดำเนินการดังต่อไปนี้ -
จากรายการแบบเลื่อนลงการดำเนินการเลือก Publish new version ดังแสดงด้านล่าง -
หากคุณคลิก Publish new versionจะแสดงหน้าจอต่อไปนี้ -
ตอนนี้ป้อนคำอธิบายเวอร์ชันแล้วคลิก Publish. ARN จะแสดงเวอร์ชันของฟังก์ชัน AWS Lambda ที่สร้างขึ้นดังที่แสดงด้านล่าง -
เพิ่มทริกเกอร์ CloudFront ในเวอร์ชันใหม่ที่สร้างขึ้นดังที่แสดงด้านล่าง -
ตอนนี้เพิ่มรายละเอียดการกำหนดค่าสำหรับ CloudFront เหตุการณ์ CloudFront มีตัวเลือกสำหรับViewer request, Origin request, Origin responseและ Viewer response.
จากนั้นเลือกการกระจาย CloudFront ที่สร้างขึ้นก่อนหน้านี้ จากeventsเราจะเลือก Viewer request. ตามคำขอของผู้ดูเดสก์ท็อป / อุปกรณ์จากตัวแทนผู้ใช้จะได้รับการตัดสินใจและการตอบสนองจะเปลี่ยนไป จากนั้นเพิ่มรายละเอียดทริกเกอร์
เมื่อเพิ่มทริกเกอร์แล้วเราต้องรอให้การแจกจ่ายจาก CloudFront ใช้งานได้
เมื่อสถานะเปลี่ยนเป็น Deployedเราสามารถทดสอบ URL ของ CloudFront และตรวจสอบชื่อโดเมนในเบราว์เซอร์
การแสดงผลในเบราว์เซอร์เดสก์ท็อปเป็นดังที่แสดงด้านล่าง ที่นี่เราได้พิมพ์ user-agent จากเหตุการณ์ viewer-request
นี่คือการแสดงผลในอุปกรณ์พกพา
ดังนั้นในตัวอย่างข้างต้นเราจึงใช้ Lambda @ Edge เพื่อเปลี่ยนการตอบสนองบนเดสก์ท็อปและอุปกรณ์เคลื่อนที่
การตรวจสอบและการแก้ไขปัญหาโดยใช้ Cloudwatch
ฟังก์ชั่นที่สร้างใน AWS Lambda ได้รับการตรวจสอบโดย Amazon CloudWatch ช่วยในการบันทึกคำขอทั้งหมดที่ทำกับฟังก์ชัน Lambda เมื่อถูกทริกเกอร์
พิจารณาว่ามีการอัปโหลดโค้ดต่อไปนี้ใน AWS Lambda โดยมีชื่อฟังก์ชันเป็น lambda and cloudwatch.
exports.handler = (event, context, callback) => {
// TODO implement
console.log("Lambda monitoring using amazon cloudwatch");
callback(null, 'Hello from Lambda');
};
เมื่อฟังก์ชันได้รับการทดสอบหรือเรียกใช้คุณควรเห็นรายการใน Cloudwatch เพื่อจุดประสงค์นี้ไปที่บริการของ AWS แล้วคลิก CloudWatch
เลือกบันทึกจากด้านซ้าย
เมื่อคุณคลิก Logsมันมีไฟล์ Log Groupsของฟังก์ชัน AWS Lambda ที่สร้างขึ้นในบัญชีของคุณ เลือกฟังก์ชัน anyAWS Lambda และตรวจสอบรายละเอียด ในที่นี้เรากำลังอ้างถึงฟังก์ชัน Lambda พร้อมชื่อ:lambdaandcloudwatch. บันทึกที่เพิ่มในฟังก์ชัน Lambda จะแสดงที่นี่ดังแสดงด้านล่าง -
ตอนนี้ให้เราเพิ่มทริกเกอร์ S3 ในฟังก์ชัน Lambda และดูรายละเอียดบันทึกใน CloudWatch ดังที่แสดงด้านล่าง -
ให้เราอัปเดตโค้ด AWS Lambda เพื่อแสดงไฟล์ที่อัปโหลดและชื่อที่เก็บข้อมูลตามที่แสดงในโค้ดด้านล่าง -
exports.handler = (event, context, callback) => {
// TODO implement
console.log("Lambda monitoring using amazon cloudwatch");
const bucket = event.Records[0].s3.bucket.name;
const filename = event.Records[0].s3.object.key;
const message = `File is uploaded in - ${bucket} -> ${filename}`;
console.log(message);
callback(null, 'Hello from Lambda');
};
ตอนนี้เพิ่มไฟล์ใน s3storetestlambdaEventbucket ตามที่แสดง -
เมื่อไฟล์ถูกอัพโหลดฟังก์ชัน AWS Lambda จะถูกทริกเกอร์และข้อความบันทึกคอนโซลจากโค้ด Lambda จะแสดงใน CloudWatch ดังที่แสดงด้านล่าง -
หากมีข้อผิดพลาด CloudWatch จะให้รายละเอียดข้อผิดพลาดดังที่แสดงด้านล่าง -
โปรดทราบว่าเราอ้างถึงชื่อที่เก็บข้อมูลในรหัส AWS Lambda อย่างไม่ถูกต้องตามที่แสดง -
exports.handler = (event, context, callback) => {
// TODO implement
console.log("Lambda monitoring using amazon cloudwatch");
const bucket = event.Records[0].bucket.name;
const filename = event.Records[0].s3.object.key;
const message = `File is uploaded in - ${bucket} -> ${filename}`;
console.log(message);
callback(null, 'Hello from Lambda');
};
การอ้างอิงชื่อที่เก็บข้อมูลจากเหตุการณ์ไม่ถูกต้อง ดังนั้นเราจะเห็นข้อผิดพลาดปรากฏขึ้นใน CloudWatch ดังที่แสดงด้านล่าง -
CloudWatch Metrics
รายละเอียดของการเรียกใช้ฟังก์ชัน Lambda สามารถดูได้ในเมตริก คลิกMetrics แสดงที่ด้านซ้าย
รายละเอียดกราฟสำหรับฟังก์ชันแลมบ์ดา lambdaandcloudwatch มีดังรูปด้านล่าง -
จะให้รายละเอียดเช่นระยะเวลาที่เรียกใช้ฟังก์ชัน Lambda จำนวนครั้งที่เรียกใช้และข้อผิดพลาดจากฟังก์ชันแลมด้า
AWS Lambda - ตัวอย่างเพิ่มเติม
จนถึงตอนนี้เราได้เห็นการทำงานของ AWS Lambda กับบริการของ AWS จากความรู้ดังกล่าวให้เราสร้างแบบฟอร์มการลงทะเบียนผู้ใช้อย่างง่ายและโพสต์ข้อมูลโดยใช้เกตเวย์ API ไปยัง AWS Lambda AWS Lambda จะรับข้อมูลจากเหตุการณ์หรือทริกเกอร์เกตเวย์ API และจะเพิ่มรายละเอียดเหล่านั้นลงในตาราง DynamoDB
ตัวอย่าง
ให้เราพิจารณาตัวอย่างและใช้ฟังก์ชันต่อไปนี้ -
สร้างตาราง DynamoDB
สร้างแบบฟอร์มสำหรับการลงทะเบียนผู้ใช้
สร้าง AWS Lambda และเกตเวย์ API เพื่อส่งข้อความไปยังโทรศัพท์โดยใช้บริการ AWS SNS
สร้าง AWS Lambda และเกตเวย์ API ไปยังข้อมูลฟอร์ม POST และแทรกในตาราง DynamoDb
สร้าง AWS Lambda และเกตเวย์ API เพื่ออ่านข้อมูลจากตาราง Dynamodb
การทำงานขั้นสุดท้ายของแบบฟอร์มการลงทะเบียนผู้ใช้
สร้างตาราง DynamoDB
ข้อมูลที่ป้อนจะถูกเก็บไว้ในตาราง DynamodDB เราจะใช้เกตเวย์ API เพื่อแชร์ข้อมูลที่ป้อนกับ AWS Lambda และหลังจากนั้น AWS Lambda จะเพิ่มรายละเอียดใน DynamoDB
คุณสามารถใช้รายละเอียดต่อไปนี้เพื่อสร้างตาราง DynamodDB ในคอนโซล AWS ขั้นแรกไปที่ AWS Service แล้วคลิกDynamoDB. คลิกTable เพื่อสร้างตารางดังที่แสดงด้านล่าง -
คุณสามารถใช้ ARN เพื่อสร้างนโยบายสำหรับ DynamoDB ที่จะใช้กับ AWS Lambda
ไปที่ IAM แล้วเลือก Policies. คลิกCreate policyเลือกบริการเป็น DynamodDB ดังภาพด้านล่าง -
คลิก All DynamoDBการดำเนินการดังที่แสดงด้านบน เลือกทรัพยากรและป้อน ARN สำหรับตารางดังที่แสดงด้านล่าง -
ตอนนี้คลิก Add ดังแสดงด้านล่าง
หากคุณคลิก Review policy ที่ด้านท้ายของหน้าจอคุณจะเห็นหน้าต่างต่อไปนี้ -
ป้อนชื่อนโยบายแล้วคลิก Create policyปุ่มท้ายหน้า ตอนนี้เราต้องสร้างบทบาทที่จะใช้กับแลมด้า เราต้องการการอนุญาตสำหรับ DynamoDB, APIGateway และ Lambda
ไปที่บริการของ AWS แล้วเลือก IAM เลือกบทบาทจากด้านซ้ายและเพิ่มบทบาทที่ต้องการ
ป้อนชื่อบทบาทแล้วคลิก Create role. บทบาทที่สร้างขึ้นคือroleforlambdaexample.
สร้างแบบฟอร์มสำหรับการลงทะเบียนผู้ใช้
นี่คือการแสดงแบบฟอร์มการลงทะเบียนผู้ใช้เพื่อป้อนและอ่านข้อมูลจากตาราง dynamodb
สร้าง AWS Lambda และ API Gateway เพื่อส่งข้อความ OTP ไปยังโทรศัพท์โดยใช้บริการ SNS
หากคุณเห็นแบบฟอร์มการลงทะเบียนผู้ใช้จะมีปุ่ม validate phone. ผู้ใช้ควรป้อนหมายเลขโทรศัพท์และคลิกที่validate phone ปุ่มเพื่อตรวจสอบหมายเลขโทรศัพท์
เพื่อจุดประสงค์นี้ -
เมื่อผู้ใช้คลิกปุ่มนี้วิธีการโพสต์เกตเวย์ API ซึ่งมีรายละเอียดโทรศัพท์จะถูกเรียกและ AWS Lambda ภายในจะถูกเรียกใช้
จากนั้น AWS Lambda จะส่ง OTP ไปยังหมายเลขโทรศัพท์ที่ป้อนโดยใช้บริการ AWS SNS
ผู้ใช้ได้รับ OTP และต้องป้อนหมายเลข OTP นี้
ช่องข้อความสำหรับป้อน OTP จะปรากฏขึ้นเมื่อป้อนหมายเลขโทรศัพท์และ validate phone คลิกปุ่ม
OTP ที่ได้รับจาก AWS Lambda และ OTP ที่ผู้ใช้ป้อนจะต้องตรงกันเพื่อให้ผู้ใช้ส่งแบบฟอร์มการลงทะเบียนผู้ใช้
แผนภาพบล็อกอย่างง่ายที่อธิบายการทำงานของการตรวจสอบโทรศัพท์แสดงไว้ที่นี่ -
ฟังก์ชัน AWS Lambda ที่สร้างขึ้นมีดังที่แสดงไว้ที่นี่ -
รหัส AWS Lambda ที่สอดคล้องกันมีดังต่อไปนี้ -
const aws = require("aws-sdk");
const sns = new aws.SNS({
region:'us-east-1'
});
exports.handler = function(event, context, callback) {
let phoneno = event.mphone;
let otp = Math.floor(100000 + Math.random() * 900000);
let snsmessage = "Your otp is : "+otp;
sns.publish({
Message: snsmessage,
PhoneNumber: "+91"+phoneno
}, function (err, data) {
if (err) {
console.log(err);
callback(err, null);
} else {
console.log(data);
callback(null, otp);
}
});
};
โปรดทราบว่าเรากำลังใช้บริการ SNS เพื่อส่งรหัส OTP รหัสนี้ใช้เพื่อตรวจสอบหมายเลขโทรศัพท์มือถือที่ป้อนโดยผู้ใช้ในแบบฟอร์มการลงทะเบียนผู้ใช้ เกตเวย์ API ที่สร้างขึ้นสำหรับการตรวจสอบโทรศัพท์ข้างต้นมีดังนี้ -
ฟังก์ชัน Lambda ที่กำหนดคือ phonevalidationexample. เรากำลังนำรายละเอียดโทรศัพท์มือถือที่นี่ไปใช้ใน AWS Lambda จากนั้น AWS Lambda จะส่งรหัส OTP ไปยังหมายเลขโทรศัพท์มือถือที่ระบุ
สร้าง AWS Lambda และ API Gateway เพื่อ POST Form Data และแทรกในตาราง DynamoDB
สำหรับแบบฟอร์มการลงทะเบียนผู้ใช้ฟิลด์ทั้งหมดมีผลบังคับใช้ มีการเรียก AJAX ซึ่งข้อมูลที่ป้อนในแบบฟอร์มจะถูกโพสต์ไปยัง URL เกตเวย์ของ API
แผนภาพบล็อกอย่างง่ายซึ่งอธิบายการทำงานของปุ่มส่งแสดงไว้ที่นี่ -
เมื่อกรอกแบบฟอร์มแล้วปุ่มส่งจะเรียกเกตเวย์ API ซึ่งจะทริกเกอร์ AWS Lambda AWS Lambda จะได้รับรายละเอียดของแบบฟอร์มจากเหตุการณ์หรือเกตเวย์APIและข้อมูลจะถูกแทรกในตาราง DynamodDB
ให้เราเข้าใจการสร้าง API Gateway และ AWS Lambda
ขั้นแรกไปที่บริการของ AWS แล้วคลิก Lambda ฟังก์ชัน Lambda ที่สร้างขึ้นมีดังที่แสดงไว้ที่นี่ -
ตอนนี้ในการสร้างเกตเวย์ API ให้ไปที่บริการ AWS แล้วเลือก API Gateway. คลิกที่Create API ปุ่มที่แสดงด้านล่าง
ป้อนไฟล์ API name และคลิกที่ Create API ปุ่มเพื่อเพิ่ม API
ตอนนี้ API ถูกสร้างขึ้นเรียกว่าเป็น registeruser. เลือก API แล้วคลิกActions แบบเลื่อนลงเพื่อสร้าง Resource.
คลิก Create Resource. ตอนนี้ให้เราเพิ่มไฟล์POSTวิธี. สำหรับสิ่งนี้ให้คลิกที่ทรัพยากรที่สร้างขึ้นทางด้านซ้ายและจากActions เลือกแบบเลื่อนลง create method. ซึ่งจะแสดงรายการแบบเลื่อนลงดังที่แสดงด้านล่าง -
เลือกวิธีการ POST และเพิ่มฟังก์ชัน Lambda ที่เราสร้างไว้ด้านบน
คลิก Saveปุ่มเพื่อเพิ่มวิธีการ เพื่อส่งรายละเอียดแบบฟอร์มไปยังฟังก์ชัน Lambdalambdaexample เราจำเป็นต้องเพิ่มไฟล์ Integration Request ดังแสดงด้านล่าง -
หากต้องการโพสต์รายละเอียดแบบฟอร์มคุณจะต้องคลิก Integration Request. จะแสดงรายละเอียดด้านล่าง
คลิก Body Mapping Templates เพื่อเพิ่มฟิลด์ฟอร์มที่จะโพสต์
จากนั้นคลิก Add mapping templateและป้อนประเภทเนื้อหา ที่นี่เราได้เพิ่มapplication/jsonเป็นประเภทเนื้อหา คลิกและที่นี่คุณต้องป้อนฟิลด์ในรูปแบบ json ดังที่แสดงด้านล่าง -
ตอนนี้คลิกไฟล์ Save และปรับใช้ API ดังที่แสดงด้านล่าง -
นี่คือ API ที่สร้างขึ้นสำหรับ POST ซึ่งจะใช้ภายในไฟล์. html ของเรา โปรดทราบว่าเราจำเป็นต้องเปิดใช้งาน CORS สำหรับทรัพยากรที่สร้างขึ้น จะใช้ URL เกตเวย์ api เพื่อทำการเรียก ajax ดังนั้น CORS จึงต้องเปิดใช้งาน
เลือกวิธีการที่คุณต้องการเปิดใช้งาน CORS คลิกที่Enable CORS and replace existing CORS headers.
จะแสดงหน้าจอยืนยันดังนี้ -
คลิก Yes, replace existing values เพื่อเปิดใช้งาน CORS
รหัส AWS Lambda สำหรับ POST API Gateway ดังแสดงที่นี่ -
const aws = require("aws-sdk");
const docClient = new aws.DynamoDB.DocumentClient({
region:'us-east-1'
});
exports.handler = function(event, context, callback) {
console.log(event);
console.log("Entering Data");
var data = {
TableName : "registeruser",
Item : {
first_name:event.fname,
last_name:event.lname,
emailid:event.emailid,
mobile_no : event.mphone,
otp:event.otp,
username:event.uname,
password:event.passwd,
confirm_password:event.cpasswd
}
}
docClient.put(data, function(err, value) {
if (err) {
console.log("Error");
callback(err, null);
} else {
console.log("data added successfully");
callback(null, value);
}
});
}
พารามิเตอร์เหตุการณ์ในตัวจัดการ AWS Lambda จะมีรายละเอียดทั้งหมดที่เพิ่มไว้ก่อนหน้านี้ในคำขอรวม POST รายละเอียดจากเหตุการณ์จะถูกเพิ่มลงในตาราง DynamodDB ดังที่แสดงในโค้ด
ตอนนี้เราต้องขอรายละเอียดบริการจาก AWS-SDK ดังที่แสดงด้านล่าง -
const aws = require("aws-sdk");
const docClient = new aws.DynamoDB.DocumentClient({
region:'us-east-1'
});
var data = {
TableName : "registeruser",
Item : {
first_name:event.fname,
last_name:event.lname,
emailid:event.emailid,
mobile_no : event.mphone,
otp:event.otp,
username:event.uname,
password:event.passwd,
confirm_password:event.cpasswd
}
}
docClient.put(data, function(err, value) {
if (err) {
console.log("Error");
callback(err, null);
} else {
console.log("data added successfully");
callback(null, value);
}
});
สร้าง AWS Lambda และ API Gateway เพื่ออ่านข้อมูลจากตาราง DynamodDB
ตอนนี้เราจะสร้างฟังก์ชัน AWS Lambda เพื่ออ่านข้อมูลจากตาราง DynamoDB เราจะทริกเกอร์ APIGateway ไปยังฟังก์ชัน AWS Lambda ซึ่งจะส่งข้อมูลไปยังรูปแบบ html
ฟังก์ชัน AWS Lambda ที่สร้างขึ้นมีดังที่แสดงด้านล่าง -
รหัส AWS Lambda ที่เกี่ยวข้องมีดังนี้ -
const aws = require("aws-sdk");
const docClient = new aws.DynamoDB.DocumentClient({
region:'us-east-1'
});
exports.handler = function(event, context, callback) {
var readdata = {
TableName : "registeruser",
Limit : 10
}
docClient.scan(readdata, function(err, data) {
if (err) {
console.log("Error");
callback(err, null);
} else {
console.log("Data is " + data);
callback(null, data);
}
});
}
ที่นี่ข้อมูลถูกอ่านจากตาราง DynamoDB และมอบให้กับการโทรกลับ ตอนนี้เราจะสร้าง APIGateway และเพิ่มฟังก์ชัน AWS Lambda เป็นทริกเกอร์
เราจะเพิ่มเมธอด get ใน API ที่สร้างไว้ก่อนหน้านี้
ฟังก์ชัน Lambda ที่เพิ่มเข้ามาคือ lambdareaddataexample. คลิกSave เพื่อบันทึกเมธอดและปรับใช้ api
การทำงานขั้นสุดท้ายของแบบฟอร์มการลงทะเบียนผู้ใช้
การแสดงผลสุดท้ายของแบบฟอร์มดังแสดงด้านล่าง -
ตอนนี้ใส่รายละเอียดตามที่แสดงด้านบน โปรดทราบว่าปุ่มส่งถูกปิดใช้งาน จะเปิดใช้งานก็ต่อเมื่อกรอกรายละเอียดทั้งหมดดังภาพ -
ตอนนี้ป้อนหมายเลขโทรศัพท์มือถือและคลิก validate phoneปุ่ม. มันจะแสดงข้อความแจ้งเตือนว่า“OTP is send to the mobile, please enter the OTP to continue”. OTP ที่ส่งไปยังหมายเลขโทรศัพท์มือถือมีดังนี้ -
กรอก OTP และรายละเอียดที่เหลือและส่งแบบฟอร์ม
ข้อมูลใน DynamoDB registeruser ตารางหลังจากส่งจะแสดงที่นี่ -
รายละเอียดรหัสมีดังต่อไปนี้ -
Example1.html
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript" src="formdet.js"></script>
<style>
input[type=text], input[type=password],button {
width: 100%;
padding: 5px 5px;
margin: 5px 0;
box-sizing: border-box;
}
#maincontainer {
width: 80%;
margin: auto;
padding: 10px;
}
div#userregistration {
width: 60%;
float: left;
}
div#userdisplay {
margin-left: 60%;
}
</style>
</head>
<body>
<div id="maincontainer">
<div id="userregistration">
<h1>User Registration Form</h1>
<table border="0">
<tr>
<td><b>First Name<span style="color:red;">*</span> : </b></td>
<td><input type="text" value="" name="fname" id="fname" /></td>
<td id="tdfname" style="display:none;"><span style="color:red;">Enter First Name</span></td>
</tr>
<tr>
<td><b>Last Name<span style="color:red;">*</span> : </b></td>
<td><input type="text" value="" name="lname" id="lname" /></td>
<td id="tdlname" style="display:none;"><span style="color:red;">Enter Last Name</span></td>
</tr>
<tr>
<td><b>Email Id<span style="color:red;">*</span> : </b></td>
<td><input type="text" value="" name="emailid" id="emailid" /></td>
<td id="tdemailid" style="display:none;"><span style="color:red;">Enter Email</span></td>
</tr>
<tr>
<td><b>Mobile No<span style="color:red;">*</span> : </b></td>
<td><input type="text" name="mphone" id="mphone"/></td>
<td id="tdmphone" style="display:none;"><span style="color:red;">Enter Mobile Number</span></td>
</tr>
<tr>
<td></td>
<td><button id="validatephone">validate phone</button></td>
<td></td>
</tr>
<tr id="otpdiv" style="display:none;">
<td><b>Enter OTP<span style="color:red;">*</span>:</b></td>
<td><input type="text" value="" name="otp" id="otp" /></td>
<td id="tdotp" style="display:none;"><span style="color:red;">Enter OTP</span></td>
</tr>
<tr>
<td><b>Username<span style="color:red;">*</span>: </b></td>
<td><input type="text" value="" name="uname" id="uname"/></td>
<td id="tduname" style="display:none;"><span style="color:red;">Enter Username</span></td>
</tr>
<tr><td><b>Password<span style="color:red;">*</span> :</b></td>
<td><input type="password" value="" name="passwd" id="passwd"/></td>
<td id="tdpasswd" style="display:none;"><span style="color:red;">Enter Password</span></td>
</tr>
<tr><td><b>Confirm Password<span style="color:red;">*</span> :</b></td>
<td><input type="password" value="" name="cpasswd" id="cpasswd"/></td>
<td id="tdcpasswd" style="display:none;"><span style="color:red;">Enter Confirm Password</span></td>
</tr>
<tr>
<td></td>
<td><button name="submit" id="submit" style="display:;" disabled="true">Submit</button></td>
<td></td>
</tr>
</table>
</div>
<div id="userdisplay">
<h1>User Display</h1>
<table id="displaydetails" style="display:block;width:80%;padding:5px;margin:5px; border: 1px solid black;">
<tr>
<td></td>
<td>FirstName</td>
<td>LastName</td>
<td>Mobile No</td>
<td>EmailID</td>
</tr>
</table>
</div>
</div>
</body>
</html>
formdet.js
function validateform() {
var sError="";
if ($("#fname").val() === "") { $("#tdfname").css("display","");
sError++;
}
if ($("#lname").val() === "") { $("#tdlname").css("display","");
sError++;
}
if ($("#emailid").val() === "") { $("#tdemailid").css("display","");
sError++;
}
if ($("#mphone").val() === "") { $("#tdmphone").css("display","");
sError++;
}
if ($("#otp").val() === "") { $("#tdotp").css("display","");
sError++;
}
if ($("#uname").val() === "") { $("#tduname").css("display","");
sError++;
}
if ($("#passwd").val() === "") { $("#tdpasswd").css("display","");
sError++;
}
if ($("#cpasswd").val() === "") { $("#tdcpasswd").css("display","");
sError++;
}
if (sError === "") {
return true;
} else {
return false;
}
}
$("#fname").change(function() { if ($("#fname").val() !== "") {
$("#tdfname").css("display","none"); } else { $("#tdfname").css("display","");
}
});
$("#lname").change(function() { if ($("#lname").val() !== "") {
$("#tdlname").css("display","none"); } else { $("#tdlname").css("display","");
}
});
$("#emailid").change(function() { if ($("#emailid").val() !== "") {
$("#tdemailid").css("display","none"); } else { $("#tdemailid").css("display","");
}
});
$("#mphone").change(function() { if ($("#mphone").val() !== "") {
$("#tdmphone").css("display","none"); } else { $("#tdmphone").css("display","");
}
});
$("#otp").change(function() { if ($("#otp").val() !== "") {
$("#tdotp").css("display","none"); } else { $("#tdotp").css("display","");
}
});
$("#uname").change(function() { if ($("#uname").val() !== "") {
$("#tduname").css("display","none"); } else { $("#tduname").css("display","");
}
});
$("#passwd").change(function() { if ($("#passwd").val() !== "") {
$("#tdpasswd").css("display","none"); } else { $("#tdpasswd").css("display","");
}
});
$("#cpasswd").change(function() { if ($("#cpasswd").val() !== "") {
$("#tdcpasswd").css("display","none"); } else { $("#tdcpasswd").css("display","");
}
});
var posturl = "https://4rvwimysc1.execute-api.us-east-1.amazonaws.com/prod/adduser";
var phonevalidationurl = "https://wnvt01y6nc.execute-api.us-east-1.amazonaws.com/prod/validate";
var otpsend = "";
function getdata() {
var a = 0;
$.ajax({ type:'GET', url:posturl, success: function(data) { $("#displaydetails").html('');
$("#displaydetails").css("display", ""); console.log(data); $("#displaydetails").append('<tr style="padding:5px;margin:5px;background-color:gray;"><td>Name</td><td>Mobile No</td><td>EmailID</td></tr>');
data.Items.forEach(function(registeruser) {
var clr = (a%2 === 0) ? "#eee": "white";
a++;
$("#displaydetails").append('<tr style="padding:5px;margin:5px;background-color:'+clr+'"><td>'+registeruser.first_name+'-'+registeruser.last_name+'</td><td>'+registeruser.mobile_no+'</td><td>'+registeruser.emailid+'</td></tr>'); }); }, error: function(err) { console.log(err); } }); } $(document).ready(function() {
$("#otp").on("change", function() { var otpentered = $("#otp").val();
if (otpsend == otpentered) {
document.getElementById("submit").disabled = false;
} else {
alert("OTP is not valid.Please enter the valid one or validate phone again to continue!");
document.getElementById("submit").disabled = true;
}
});
$("#validatephone").on("click", function() { $.ajax({
type:'POST',
url:phonevalidationurl,
data:JSON.stringify({
"mphone":$("#mphone").val() }), success: function(data) { $("#otpdiv").css("display", "");
alert("OTP is send to the mobile, please enter to continue");
console.log(data);
otpsend = data;
},
error : function(err) {
$("#otpdiv").css("display", "none"); alert("Invalid mobile no."); } }); }); $("#submit").on("click", function() {
if (validateform()) {
$.ajax({ type:'POST', url:posturl, data:JSON.stringify({ "fname": $("#fname").val(),
"lname": $("#lname").val(), "emailid":$("#emailid").val(),
"mphone":$("#mphone").val(), "otp":$("#otp").val(),
"uname":$("#uname").val(), "passwd":$("#passwd").val(),
"cpasswd":$("#cpasswd").val()
}),
success: function(data) {
alert("Data added successfully");
console.log(data);
getdata();
}
});
}
});
getdata();
});
จนถึงตอนนี้เราได้ทำการเรียก AJAX ไปยัง API ที่สร้างและโพสต์ข้อมูลดังที่แสดงด้านบน
การเรียก AJAX เพื่อเพิ่มข้อมูลลงในตารางมีดังนี้ -
var posturl = "https://4rvwimysc1.execute-api.us-east-1.amazonaws.com/prod/adduser";
$(document).ready(function() {
$("#submit").on("click", function() { if (validateform()) { $.ajax({
type:'POST',
url:posturl,
data:JSON.stringify({
"fname": $("#fname").val(), "lname": $("#lname").val(),
"emailid":$("#emailid").val(), "mphone":$("#mphone").val(),
"otp":$("#otp").val(), "uname":$("#uname").val(),
"passwd":$("#passwd").val(), "cpasswd":$("#cpasswd").val()
}),
success: function(data) {
alert("Data added successfully");
console.log(data);
getdata();
}
});
}
});
});
โปรดทราบว่าในการอ่านข้อมูลจะมีการเรียกใช้ฟังก์ชันซึ่งมีรหัสด้านล่าง -
function getdata() {
var a = 0;
$.ajax({ type:'GET', url:posturl, success: function(data) { $("#displaydetails").html('');
$("#displaydetails").css("display", ""); console.log(data); $("#displaydetails").append('<tr style="padding:5px;margin:5px;background-color:gray;"><td>Name</td><td>Mobile No</td><td>EmailID</td></tr>');
data.Items.forEach(function(registeruser) {
var clr = (a%2 === 0) ? "#eee": "white";
a++;
$("#displaydetails").append('<tr style="padding:5px;margin:5px;background-color:'+clr+'"><td>'+registeruser.first_name+'-'+registeruser.last_name+'</td><td>'+registeruser.mobile_no+'</td><td>'+registeruser.emailid+'</td></tr>');
});
},
error: function(err) {
console.log(err);
}
});
}
เมื่อคุณคลิกปุ่มตรวจสอบหมายเลขโทรศัพท์มือถือรหัสต่อไปนี้จะถูกเรียกและส่งหมายเลขโทรศัพท์มือถือ -
var phonevalidationurl = "https://wnvt01y6nc.execute-api.us-east-1.amazonaws.com/prod/validate";
var otpsend = "";
$("#validatephone").on("click", function() {
$.ajax({ type:'POST', url:phonevalidationurl, data:JSON.stringify({ "mphone":$("#mphone").val()
}),
success: function(data) {
$("#otpdiv").css("display", ""); alert("OTP is send to the mobile, please enter the OTP to continue"); console.log(data); otpsend = data; }, error : function(err) { $("#otpdiv").css("display", "none");
alert("Invalid mobile no.");
}
});
});
// Validate otp
$("#otp").on("change", function() { var otpentered = $("#otp").val();
if (otpsend == otpentered) {
document.getElementById("submit").disabled = false;
} else {
alert("OTP is not valid.Please enter the valid one or validate phone again to continue!");
document.getElementById("submit").disabled = true;
}
}