Bài viết này được viết bởi Brigit Brown (Kiến trúc sư giải pháp) và Helen Ashton (Kiến trúc sư giải pháp chuyên về quan sát).
Khi sử dụng AWS Lambda, các thay đổi được thực hiện trên mã có thể ảnh hưởng đến hiệu suất, chức năng và chi phí. Việc nhận thức được tác động của những thay đổi này đến hiệu suất có thể rất thách thức.
Bài viết này trình bày cách bắt, ghi lại và trực quan hóa dữ liệu triển khai mã Lambda kèm với các dữ liệu khác trên bảng điều khiển Amazon CloudWatch. Giải pháp này cho phép nhà phát triển serverless nhận thức được tác động của việc thay đổi mã đến các chức năng của các hàm Lambda và đưa ra quyết định dựa trên dữ liệu.
Giải pháp này bao gồm ba bước:
- Bắt: Các cập nhật mã của hàm Lambda bằng Amazon EventBridge.
- Ghi: Các cập nhật mã của hàm Lambda bằng cách tạo một chỉ số Amazon CloudWatch.
- Trực quan hóa: Mối quan hệ giữa các cập nhật mã của hàm Lambda và các chỉ số hiệu suất ứng dụng bằng cách tạo một bảng điều khiển CloudWatch.
Tổng quan
EventBridge và CloudWatch được sử dụng để giám sát và trực quan hóa tác động của các thay đổi mã đến các hàm Lambda đối với các số liệu chính của ứng dụng.

Bước 1: Thu thập
AWS CloudTrail ghi lại tất cả các sự kiện quản lý cho các dịch vụ AWS. Đây là các hoạt động được thực hiện trên các tài nguyên trong tài khoản AWS của bạn và bao gồm các cập nhật mã hàm Lambda.
EventBridge rule có thể lắng nghe cập nhật mã hàm Lambda và gửi các sự kiện này đến các dịch vụ AWS khác, trong trường hợp này là đến CloudWatch.
Bạn có thể tạo các EventBridge rule bằng cú pháp sự kiện ví dụ làm tham chiếu. Để lấy ví dụ về sự kiện, hãy cập nhật mã của một hàm Lambda và tìm kiếm trong CloudTrail tất cả các sự kiện với Nguồn sự kiện là lambda.amazonaws.com và Tên sự kiện bắt đầu bằng UpdateFunctionCode. UpdateFunctionCode là một trong nhiều sự kiện được ghi lại cho các hàm Lambda. Ví dụ:
JSON
{
“eventVersion”: “1.08”,
“userIdentity”: {
“type”: “AssumedRole”,
“principalId”: “x”,
“arn”: “arn:aws:sts::xxxxxxxxxxxx:assumed-role/Admin/x”,
“accountId”: “xxxxxxxxxxxx”,
“accessKeyId”: “xxxxxxxxxxxxxxxxx”,
“sessionContext”: {
“sessionIssuer”: {
“type”: “Role”,
“principalId”: “x”,
“arn”: “arn:aws:iam::xxxxxxxxxxxx:role/Admin”,
“accountId”: “xxxxxxxxxxxx”,
“userName”: “Admin”
},
“webIdFederationData”: {},
“attributes”: {
“creationDate”: “2022-09-22T16:37:04Z”,
“mfaAuthenticated”: “false”
}
}
},
“eventTime”: “2022-09-22T16:42:07Z”,
“eventSource”: “lambda.amazonaws.com”,
“eventName”: “UpdateFunctionCode20150331v2”,
“awsRegion”: “us-east-1”,
“sourceIPAddress”: “AWS Internal”,
“userAgent”: “AWS Internal”,
“requestParameters”: {
“fullyQualifiedArn”: {
“arnPrefix”: {
“partition”: “aws”,
“region”: “us-east-1”,
“account”: “xxxxxxxxxxxx”
},
“relativeId”: {
“functionName”: “example-function”
},
“functionQualifier”: {}
},
“functionName”: “arn:aws:lambda:us-east-1:xxxxxxxxxxxx:function:example-function”,
“publish”: false,
“dryRun”: false
},
“responseElements”: {
“functionName”: “example-function”,
“functionArn”: “arn:aws:lambda:us-east-1:xxxxxxxxxxxx:function:example-function”,
“runtime”: “python3.8”,
“role”: “arn:aws:iam::xxxxxxxxxxxx:role/role-name”,
“handler”: “lambda_function.lambda_handler”,
“codeSize”: 1011,
“description”: “”,
“timeout”: 123,
“memorySize”: 128,
“lastModified”: “2022-09-22T16:42:07.000+0000”,
“codeSha256”: “x”,
“version”: “$LATEST”,
“environment”: {},
“tracingConfig”: {
“mode”: “PassThrough”
},
“revisionId”: “x”,
“state”: “Active”,
“lastUpdateStatus”: “InProgress”,
“lastUpdateStatusReason”: “The function is being created.”,
“lastUpdateStatusReasonCode”: “Creating”,
“packageType”: “Zip”,
“architectures”: [“x86_64”],
“ephemeralStorage”: {
“size”: 512
}
},
“requestID”: “f566f75f-a7a8-4e87-a177-2db001d40382”,
“eventID”: “4f90175d-3063-49b4-a467-04150b418457”,
“readOnly”: false,
“eventType”: “AwsApiCall”,
“managementEvent”: true,
“recipientAccountId”: “113420664689”,
“eventCategory”: “Management”,
“sessionCredentialFromConsole”: “true”
}
Các trường chính là eventSource, eventName, functionName và eventType. Đây là cú pháp sự kiện chỉ chứa các trường chính.
JSON
{
“eventSource”: “lambda.amazonaws.com”,
“eventName”: “UpdateFunctionCode20150331v2”,
“responseElements”: {
“functionName”: “example-function”
}
“eventType”: “AwsApiCall”,
}
Sử dụng sự kiện ví dụ này như một tài liệu tham khảo để viết mẫu EventBridge rule.
JSON
{
“source”: [“aws.lambda”],
“detail-type”: [“AWS API Call via CloudTrail”],
“detail”: {
“eventSource”: [“lambda.amazonaws.com”],
“eventName”: [{
“prefix”: “UpdateFunctionCode”
}],
“eventType”: [“AwsApiCall”]
}
}
Trong EventBridge rule này, phần chi tiết chứa các thuộc tính để khớp với mẫu sự kiện UpdateFunctionCode ban đầu. Giá trị để khớp được đặt trong ngoặc vuông sử dụng cú pháp của EventBridge.
EventName thay đổi với mỗi sự kiện UpdateFunctionCode, bao gồm thông tin ngày và phiên bản trong giá trị (ví dụ: UpdateFunctionCode20150331v2) và vì vậy một bộ lọc phù hợp với tiền tố được sử dụng để khớp với đầu của eventName.
Nguồn và loại chi tiết của sự kiện là hai trường bổ sung được EventBridge bao gồm. Với tất cả các cuộc gọi Lambda CloudTrail, loại chi tiết là [“AWS API Call via CloudTrail”] và nguồn là “aws.lambda”.
Tiếp theo, gửi một sự kiện đến CloudWatch. Mỗi EventBridge rule có thể gửi sự kiện đến nhiều mục tiêu, bao gồm Amazon SNS và các nhóm nhật ký CloudWatch. Chọn một mục tiêu của nhóm nhật ký CloudWatch, với nhóm nhật ký được chỉ định là /aws/events/lambda/updates. EventBridge tạo nhóm nhật ký này trong CloudWatch.

Cuối cùng, kiểm thử EventBridge rule.
- Để kích hoạt một sự kiện, bạn cần thay đổi mã cho bất kỳ hàm Lambda nào và triển khai lại.
- Để xem sự kiện, điều hướng đến bảng điều khiển CloudWatch > Nhật ký > Nhóm nhật ký.
- Chọn nhóm nhật ký (/aws/events/lambda/updates).
- Chọn luồng nhật ký mới nhất.
- Nếu EventBridge rule được thực thi thành công, sự kiện cập nhật mã Lambda sẽ hiển thị. Để xem JSON từ sự kiện, mở rộng sự kiện bằng các mũi tên bên trái và xem trường chi tiết.
Bước 2: Ghi lại
Để hiển thị dữ liệu cập nhật hàm Lambda cùng với các chỉ số CloudWatch khác, chuyển đổi sự kiện log thành metric bằng cách sử dụng metric filters. Metric filter được tạo trên một nhóm log. Nếu một sự kiện log khớp với một metric filter, một điểm dữ liệu metric sẽ được tạo ra.
Một metric filter sử dụng filter pattern để khớp trên các trường cụ thể trong sự kiện JSON. Trong trường hợp này, filter pattern khớp trên eventName bắt đầu bằng UpdateFunctionCode (lưu ý dấu sao như một ký tự đại diện).
{ $.detail.eventName=UpdateFunctionCode* }
Tạo một metric filter với các thông số sau:
- Metric namespace: LambdaEvents
- Metric name: UpdateFunction
- Metric value: 1
- Dimensions: DimensionName: FunctionName; Dimension Value: $.detail.responseElements.functionName
Kích thước cho phép thêm siêu dữ liệu vào các chỉ số. Đặt kích thước với đường dẫn JSON đến $.detail.responseElements.functionName cho phép giá trị FunctionName đến từ dữ liệu trong sự kiện nhật ký. Điều này làm cho bộ lọc chỉ số thông số chung cho bất kỳ hàm Lambda nào.
Mẫu sự kiện của bộ lọc chỉ số có thể được kiểm tra trên dữ liệu thực tế trong phần Test pattern. Chọn luồng nhật ký để kiểm tra bộ lọc bằng cách sử dụng danh sách thả xuống chọn log data và chọn Test pattern. Điều này hiển thị một bảng với các sự kiện phù hợp và giá trị trường.
Bảng điều khiển CloudWatch cung cấp một chế độ xem các chỉ số cho các hàm Lambda. Để xem dữ liệu chỉ số, cập nhật mã cho một hàm Lambda và điều hướng đến bảng điều khiển CloudWatch. Chọn Chỉ số > Tất cả các chỉ số từ menu bên trái, Namespace tùy chỉnh của LambdaEvents và kích thước của FunctionName (như đã thiết lập trong bộ lọc chỉ số trước đó). Để xem dữ liệu trên biểu đồ, chọn hộp bên cạnh chỉ số quan tâm. Chỉ số có thể được thêm vào bảng điều khiển CloudWatch dưới menu Hành động.
Bộ lọc chỉ số chỉ tạo chỉ số khi một sự kiện nhật ký mới được tiêu thụ. Bạn phải đợi một sự kiện nhật ký mới để xem các chỉ số.
Bước 3: Trực quan hóa
Bảng điều khiển CloudWatch cho phép trực quan hóa dữ liệu số đo và tạo các chế độ xem được tùy chỉnh. Bảng điều khiển có thể chứa nhiều tiện ích với dữ liệu từ các số đo, nhật ký và cảnh báo.
Bảng điều khiển sau đây hiển thị một ví dụ về việc trực quan hóa cập nhật mã Lambda cùng với dữ liệu hiệu suất khác. Không có một cách trực quan hóa nào phù hợp cho tất cả mọi người. Dữ liệu được thêm vào bảng điều khiển phụ thuộc vào các câu hỏi và hành động mà doanh nghiệp muốn thực hiện. Dữ liệu này có thể đa dạng và bao gồm dữ liệu hiệu suất, KPI và trải nghiệm người dùng.
Bảng điều khiển hiển thị dữ liệu về cập nhật mã Lambda và hiệu suất Lambda (thời gian thực thi). Một tiện ích dòng số đo hiển thị biểu đồ thời gian của thời gian thực thi hàm Lambda với dữ liệu số đo cập nhật mã Lambda. Thời gian thực thi là một số đo hiệu suất được cung cấp cho tất cả các hàm Lambda. Đọc thêm trong tài liệu làm việc với các số đo hàm Lambda.

Bức ảnh chụp màn hình này cho thấy thời gian thực thi (duration) của hàm Lambda cho hai hàm khác nhau: PlaceOrder và AddToBasket. Thời gian thực thi cho mỗi hàm được biểu thị theo hai cách:
- Một con số duy nhất hiển thị thời gian thực thi trung bình trong giờ qua.
- Một biểu đồ thể hiện thời gian thực thi theo thời gian.
Sự kiện cập nhật chức năng Lambda được hiển thị trên biểu đồ thời gian thực thi dưới dạng một chấm cam. Các quan điểm khác nhau về thời gian thực thi cho thấy giá trị cấp cao và hành vi chi tiết theo thời gian. Hành vi chi tiết là quan trọng để hiểu kết quả. Chỉ với giá trị cấp cao, khó để nhận thấy liệu một sự tăng trưởng trong thời gian thực thi hàng giờ là do tăng trưởng ngắn hạn về thời gian thực thi, một xu hướng tăng hay là một thay đổi bước trong hành vi.
Nhìn vào bảng điều khiển này, rõ ràng ngay sau khi cập nhật mã Lambda, thời gian thực thi của chức năng PlaceOrder tăng đáng kể từ trung bình ~100ms lên ~300ms. Đây là một sự thay đổi bước trong hành vi. Việc triển khai tương tự không có tác động tương tự đến thời gian thực thi của chức năng AddToBasket. Trong khi thời gian thực thi đang tăng gần cuối thời kỳ, không rõ ràng rằng điều này là do việc triển khai. Bảng điều khiển này cung cấp nhận thức về tác động của thay đổi ở mức chức năng để doanh nghiệp có thể quyết định liệu tác động này có chấp nhận được không.
Tài nguyên để tạo bảng điều khiển của riêng bạn
- Khám phá các chỉ số mặc định của Lambda có thể hữu ích.
- Tìm hiểu thêm về Tạo và làm việc với tiện ích trên các bảng điều khiển CloudWatch, bao gồm các tiện ích số liệu thống kê, tiện ích đường dẫn số liệu thời gian và các tiện ích văn bản.
- Khám phá phần bảng điều khiển của chương trình One Observability để thực hành thực tế.
Kết luận
Blog này demo cách tạo một luật EventBridge và bảng điều khiển CloudWatch để trực quan hóa tác động của thay đổi mã hàm Lambda đến dữ liệu hiệu suất. Đầu tiên, tạo một luật EventBridge để chụp các sự kiện cập nhật mã hàm Lambda được ghi lại trong CloudTrail. EventBridge gửi sự kiện đến CloudWatch, nơi các sự kiện UpdateFunctionCode được lưu trữ dưới dạng số liệu thống kê. Dữ liệu sự kiện UpdateFunctionCode được trực quan hóa trên bảng điều khiển CloudWatch kèm với dữ liệu hiệu suất Lambda. Tầm nhìn này cho phép nhóm hiểu rõ hơn về tác động của các thay đổi mã và đưa ra các giải pháp dựa trên dữ liệu.
Bạn có thể sửa đổi các khái niệm trong blog này và áp dụng chúng cho nhiều trường hợp sử dụng khác nhau. EventBridge có thể chụp các triển khai AWS CodeCommit và AWS CloudFormation, và gửi các sự kiện đó đến bảng điều khiển CloudWatch để trực quan hóa kèm với các số liệu thống kê khác.
Để biết thêm tài nguyên học tập về serverless, hãy truy cập Serverless Land.