ข้อที่ 6 การสร้าง Lambda Function เพื่อตรวจจับการเพิ่มวัตถุใหม่ใน S3 Bucket และแสดงชื่อไฟล์บน Console โดยใช้ IAM Role ที่กำหนด
🧠 เป้าหมาย
- สร้าง Lambda function ชื่อ
lambdaxxxxyyyy(แทนxxxxกับyyyy) - ใช้ IAM Role ชื่อ
LabRole - ตั้ง Trigger จาก S3 bucket → เมื่อมีการเพิ่มไฟล์ (ObjectCreated)
- Lambda ต้อง พิมพ์ชื่อไฟล์ (object key) ที่ถูกอัปโหลดออกไปที่ Console (CloudWatch Logs)
-
ส่ง ภาพเดียว ที่เห็น:
- ชื่อฟังก์ชัน
- โค้ดใน Lambda
- ผลลัพธ์การรัน (แสดงชื่อไฟล์ที่ถูกอัปโหลด)
🧰 บริการที่เกี่ยวข้อง
- AWS Lambda: รันโค้ดแบบอัตโนมัติ
- Amazon S3: เป็น source trigger
- CloudWatch Logs: ใช้ดูผลลัพธ์ของฟังก์ชัน
- IAM Role (
LabRole): ให้ Lambda เข้าถึง S3 ได้
🛠️ ขั้นตอนการทำ (แบบละเอียด)
1. สร้าง S3 Bucket (ถ้ายังไม่มี)
- สร้าง bucket เช่น
triggerxxxxyyyy - อย่าลืมเลือก region ให้ตรงกับ Lambda
2. สร้าง Lambda Function
- ไปที่ AWS Console → Lambda
-
Click Create function
- Function name:
lambdaxxxxyyyy - Runtime: Python 3.12 (หรือ Node.js ได้)
- Permissions: เลือก
Use an existing role→ เลือกLabRole
- Function name:
- Click Create function
3. เขียนโค้ดใน Lambda
✅ ตัวอย่างโค้ด (Python):
def lambda_handler(event, context):
for record in event['Records']:
bucket = record['s3']['bucket']['name']
key = record['s3']['object']['key']
print(f"New file uploaded: {key} in bucket: {bucket}")
และกด Deploy
4. เพิ่ม Trigger จาก S3
- ในหน้าของ Lambda function → เลือกแท็บ Configuration > Triggers
-
คลิก Add trigger
- Select source: S3
- Bucket: เลือก bucket ที่เตรียมไว้
- Event type:
PUT(All object create events) - Prefix/Suffix: ปล่อยว่างก็ได้
- ติ๊ก I acknowledge that using the same S3 bucket for both ...
- กด “Add”
📌 ถ้าเจอ error ว่า S3 ไม่มี permission → ให้แน่ใจว่า
LabRoleมี policy เช่นนี้:
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-bucket-name/*"
}
5. ทดสอบโดยการอัปโหลดไฟล์ใหม่
- ไปที่ S3 bucket → กด Upload → เลือกไฟล์
.txtหรือ.jpg - รอสักครู่
6. ตรวจผลลัพธ์ใน CloudWatch Logs
- กลับไปที่ Lambda → เลือกแท็บ Monitor > View CloudWatch logs
- เปิด log ล่าสุด → คุณจะเห็นข้อความ:
New file uploaded: mypic.jpg in bucket: trigger1234abcd
📸 สิ่งที่ต้องแคปส่ง
จับภาพหน้าจอเดียว ให้เห็น:
- ชื่อ Lambda function:
lambdaxxxxyyyy - โค้ดใน Lambda ที่พิมพ์ชื่อไฟล์
- ผลลัพธ์จาก CloudWatch Logs ที่แสดงว่าไฟล์ถูกอัปโหลด และชื่อไฟล์ถูกพิมพ์ออกมา หน้า Log events