AWS Lambda - ฟังก์ชันใน Python

ในบทนี้เราจะสร้างฟังก์ชัน 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 console

ขั้นตอนที่ 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 identity provider เมื่อใช้กับ aws mobile sdk รายละเอียดมีดังนี้ -

  • identity.cognito_identity_id
  • identity.cognito_identity_pool_id
9

client_context

นี่จะแสดงรายละเอียดของแอปพลิเคชันไคลเอนต์เมื่อใช้กับ sdk มือถือ aws รายละเอียดที่ได้รับมีดังนี้ -

  • client_context.client.installation_id
  • client_context.client.app_title
  • client_context.client.app_version_name
  • client_context.client.app_version_code
  • client_context.client.app_package_name
  • client_context.custom - มีการกำหนดค่าที่กำหนดเองจากแอปไคลเอ็นต์มือถือ
  • client_context.env - มีการกำหนดรายละเอียดสภาพแวดล้อมจาก AWS Mobile SDK

ให้เราดูตัวอย่างการทำงานใน 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!')

การแสดงบันทึกดังแสดงในภาพที่นี่ -