Hướng dẫn aws lambda python print error - lỗi in aws lambda python

Khi mã của bạn gây ra lỗi, Lambda sẽ tạo ra biểu diễn JSON của lỗi. Tài liệu lỗi này xuất hiện trong nhật ký gọi và, cho các yêu cầu đồng bộ, trong đầu ra.

Trang này mô tả cách xem các lỗi gọi chức năng Lambda cho thời gian chạy Python bằng bảng điều khiển Lambda và AWS CLI.

Phần

  • Làm thế nào nó hoạt động
  • Sử dụng bảng điều khiển Lambda
  • Sử dụng giao diện dòng lệnh AWS (AWS CLI)
  • Xử lý lỗi trong các dịch vụ AWS khác
  • Ví dụ lỗi
  • Ứng dụng mẫu
  • Cái gì tiếp theo?

Làm thế nào nó hoạt động

Sử dụng bảng điều khiển Lambda

Sử dụng giao diện dòng lệnh AWS (AWS CLI)

Xử lý lỗi trong các dịch vụ AWS khác

Ví dụ lỗi

2xx

Ứng dụng mẫu

{
    "StatusCode": 200,
    "FunctionError": "Unhandled",
    "ExecutedVersion": "$LATEST"
}
3

Cái gì tiếp theo?

{
    "StatusCode": 200,
    "FunctionError": "Unhandled",
    "ExecutedVersion": "$LATEST"
}
7

Khi bạn gọi chức năng Lambda, Lambda nhận được yêu cầu gọi và xác thực các quyền trong vai trò thực hiện của bạn, xác minh rằng tài liệu sự kiện là tài liệu JSON hợp lệ và kiểm tra các giá trị tham số.

Nếu yêu cầu chuyển xác thực, Lambda sẽ gửi yêu cầu đến một thể hiện chức năng. Môi trường thời gian chạy Lambda chuyển đổi tài liệu sự kiện thành một đối tượng và chuyển nó cho trình xử lý chức năng của bạn.

Sử dụng bảng điều khiển Lambda

Sử dụng giao diện dòng lệnh AWS (AWS CLI)

Xử lý lỗi trong các dịch vụ AWS khác

  1. Ví dụ lỗiFunctions page of the Lambda console.

  2. Ứng dụng mẫuTest.

  3. Cái gì tiếp theo?Test event, select New event.

  4. Khi bạn gọi chức năng Lambda, Lambda nhận được yêu cầu gọi và xác thực các quyền trong vai trò thực hiện của bạn, xác minh rằng tài liệu sự kiện là tài liệu JSON hợp lệ và kiểm tra các giá trị tham số.Template.

  5. Nếu yêu cầu chuyển xác thực, Lambda sẽ gửi yêu cầu đến một thể hiện chức năng. Môi trường thời gian chạy Lambda chuyển đổi tài liệu sự kiện thành một đối tượng và chuyển nó cho trình xử lý chức năng của bạn.Name, enter a name for the test. In the text entry box, enter the JSON test event.

  6. Nếu Lambda gặp lỗi, nó sẽ trả về một loại ngoại lệ, thông báo và mã trạng thái HTTP cho biết nguyên nhân của lỗi. Máy khách hoặc dịch vụ gọi chức năng Lambda có thể xử lý lỗi theo chương trình hoặc chuyển nó cho người dùng cuối. Hành vi xử lý lỗi chính xác phụ thuộc vào loại ứng dụng, đối tượng và nguồn gốc của lỗi.Save changes.

  7. Danh sách sau đây mô tả phạm vi mã trạng thái bạn có thể nhận được từ Lambda.Test.

Lỗi sê -ri 2xx với tiêu đề

{
    "StatusCode": 200,
    "FunctionError": "Unhandled",
    "ExecutedVersion": "$LATEST"
}
0 trong phản hồi cho biết thời gian chạy Lambda hoặc lỗi chức năng. Mã trạng thái sê -ri 2xx chỉ ra rằng Lambda đã chấp nhận yêu cầu, nhưng thay vì mã lỗi, Lambda cho biết lỗi bằng cách bao gồm tiêu đề ____1010 trong phản hồi.Details section.

Sử dụng giao diện dòng lệnh AWS (AWS CLI)

Xử lý lỗi trong các dịch vụ AWS khác

  • Ví dụ lỗi

  • Ứng dụng mẫu

Cái gì tiếp theo?

Khi bạn gọi chức năng Lambda, Lambda nhận được yêu cầu gọi và xác thực các quyền trong vai trò thực hiện của bạn, xác minh rằng tài liệu sự kiện là tài liệu JSON hợp lệ và kiểm tra các giá trị tham số.

aws lambda invoke   \
  --function-name my-function   \
      --cli-binary-format raw-in-base64-out  \
          --payload '{"key1": "value1", "key2": "value2", "key3": "value3"}' output.txt

Nếu yêu cầu chuyển xác thực, Lambda sẽ gửi yêu cầu đến một thể hiện chức năng. Môi trường thời gian chạy Lambda chuyển đổi tài liệu sự kiện thành một đối tượng và chuyển nó cho trình xử lý chức năng của bạn.cli-binary-format option is required if you're using AWS CLI version 2. To make this the default setting, run

cat output.txt
5. For more information, see AWS CLI supported global command line options.

Nếu Lambda gặp lỗi, nó sẽ trả về một loại ngoại lệ, thông báo và mã trạng thái HTTP cho biết nguyên nhân của lỗi. Máy khách hoặc dịch vụ gọi chức năng Lambda có thể xử lý lỗi theo chương trình hoặc chuyển nó cho người dùng cuối. Hành vi xử lý lỗi chính xác phụ thuộc vào loại ứng dụng, đối tượng và nguồn gốc của lỗi.

{
    "StatusCode": 200,
    "FunctionError": "Unhandled",
    "ExecutedVersion": "$LATEST"
}

Danh sách sau đây mô tả phạm vi mã trạng thái bạn có thể nhận được từ Lambda.

cat output.txt

Lỗi sê -ri 2xx với tiêu đề

{
    "StatusCode": 200,
    "FunctionError": "Unhandled",
    "ExecutedVersion": "$LATEST"
}
0 trong phản hồi cho biết thời gian chạy Lambda hoặc lỗi chức năng. Mã trạng thái sê -ri 2xx chỉ ra rằng Lambda đã chấp nhận yêu cầu, nhưng thay vì mã lỗi, Lambda cho biết lỗi bằng cách bao gồm tiêu đề ____1010 trong phản hồi.

{"errorMessage": "'action'", "errorType": "KeyError", "stackTrace": ["  File \"/var/task/lambda_function.py\", line 36, in lambda_handler\n    result = ACTIONS[event['action']](event['number'])\n"]}

Lỗi sê -ri

{
    "StatusCode": 200,
    "FunctionError": "Unhandled",
    "ExecutedVersion": "$LATEST"
}
3 cho biết lỗi mà máy khách hoặc dịch vụ gọi có thể khắc phục bằng cách sửa đổi yêu cầu, yêu cầu quyền hoặc bằng cách thử lại yêu cầu.
{
    "StatusCode": 200,
    "FunctionError": "Unhandled",
    "ExecutedVersion": "$LATEST"
}
3 Lỗi loạt khác với
{
    "StatusCode": 200,
    "FunctionError": "Unhandled",
    "ExecutedVersion": "$LATEST"
}
6 thường chỉ ra lỗi với yêu cầu.

Xử lý lỗi trong các dịch vụ AWS khác

Khi một dịch vụ AWS khác gọi chức năng của bạn, dịch vụ chọn loại gọi và hành vi thử lại. Các dịch vụ AWS có thể gọi chức năng của bạn theo lịch trình, để đáp ứng với sự kiện vòng đời trên tài nguyên hoặc để phục vụ yêu cầu từ người dùng. Một số dịch vụ gọi các chức năng không đồng bộ và để Lambda xử lý các lỗi, trong khi các dịch vụ khác thử lại hoặc chuyển lỗi cho người dùng.

Ví dụ, API Gateway coi tất cả các lỗi gọi và chức năng là lỗi nội bộ. Nếu API Lambda từ chối yêu cầu gọi, API Gateway trả về mã lỗi

cat output.txt
7. Nếu hàm chạy nhưng trả về lỗi hoặc trả về phản hồi ở định dạng sai, API Gateway trả về mã lỗi 502. Để tùy chỉnh phản hồi lỗi, bạn phải bắt lỗi trong mã và định dạng phản hồi ở định dạng cần thiết.

Chúng tôi khuyên bạn nên sử dụng AWS X-Ray để xác định nguồn lỗi và nguyên nhân của nó. X-quang cho phép bạn tìm ra thành phần nào gặp phải lỗi và xem chi tiết về các lỗi. Ví dụ sau đây cho thấy một lỗi chức năng dẫn đến phản hồi

cat output.txt
8 từ cổng API.

Hướng dẫn aws lambda python print error - lỗi in aws lambda python

Để biết thêm thông tin, hãy xem mã Python trong AWS Lambda.

Ví dụ lỗi

Phần sau đây cho thấy các lỗi phổ biến mà bạn có thể nhận được khi tạo, cập nhật hoặc gọi chức năng của bạn bằng cách sử dụng Python Lambda Runtimes.

Ví dụ về thời gian chạy ngoại lệ - Bộ nhập khẩu

{
  "errorMessage": "Unable to import module 'lambda_function': Cannot import name '_imaging' from 'PIL' (/var/task/PIL/__init__.py)",
  "errorType": "Runtime.ImportModuleError"
}

Lỗi này là kết quả của việc sử dụng giao diện dòng lệnh AWS (AWS CLI) để tải lên gói triển khai có chứa thư viện C hoặc C ++. Ví dụ, Gối (PIL), Numpy hoặc Thư viện Gandas.Pillow (PIL), numpy, or pandas library.

Chúng tôi khuyên bạn nên sử dụng lệnh xây dựng AWS Sam Cli Sam với tùy chọn

cat output.txt
9 để tạo gói triển khai của bạn. Sử dụng AWS Sam CLI với tùy chọn này tạo ra một thùng chứa Docker với môi trường giống như Lambda tương thích với Lambda.

Ví dụ Lỗi tuần tự hóa JSON - RunTime.MarshalError

{
  "errorMessage": "Unable to marshal response: Object of type AttributeError is not JSON serializable",
  "errorType": "Runtime.MarshalError"
}

Lỗi này có thể là kết quả của cơ chế mã hóa Base64 mà bạn đang sử dụng trong mã chức năng của mình. Ví dụ:

import base64
encrypted_data = base64.b64encode(payload_enc).decode("utf-8")

Lỗi này cũng có thể là kết quả của việc không chỉ định tệp .zip của bạn dưới dạng tệp nhị phân khi bạn tạo hoặc cập nhật chức năng của mình. Chúng tôi khuyên bạn nên sử dụng tùy chọn lệnh FileB: // để tải lên gói triển khai của bạn (tệp .zip).

aws lambda create-function --function-name my-function --zip-file fileb://my-deployment-package.zip --handler lambda_function.lambda_handler --runtime python3.8 --role arn:aws:iam::your-account-id:role/lambda-ex

Ứng dụng mẫu

Kho lưu trữ GitHub cho hướng dẫn này bao gồm các ứng dụng mẫu thể hiện việc sử dụng các lỗi. Mỗi ứng dụng mẫu bao gồm các tập lệnh để dễ dàng triển khai và dọn dẹp, mẫu mô hình ứng dụng không cần máy chủ AWS và tài nguyên hỗ trợ.

Mẫu các ứng dụng Lambda trong Python

  • trống-python-một hàm Python cho thấy việc sử dụng ghi nhật ký, biến môi trường, truy tìm tia X AWS, các lớp, kiểm tra đơn vị và SDK AWS. – A Python function that shows the use of logging, environment variables, AWS X-Ray tracing, layers, unit tests and the AWS SDK.

Cái gì tiếp theo?

  • Tìm hiểu cách hiển thị các sự kiện ghi nhật ký cho chức năng Lambda của bạn trên chức năng AWS Lambda đăng nhập vào trang Python.

Làm thế nào tôi có thể truy cập đầu ra của các câu lệnh in từ các hàm AWS Lambda?

Để xuất nhật ký từ mã chức năng của bạn, bạn có thể sử dụng phương thức in hoặc bất kỳ thư viện ghi nhật ký nào ghi vào stdout hoặc stderr. Ví dụ sau đây ghi lại các giá trị của các biến môi trường và đối tượng sự kiện. Thời gian chạy Python ghi lại các dòng bắt đầu, kết thúc và báo cáo cho mỗi lần gọi.use the print method , or any logging library that writes to stdout or stderr . The following example logs the values of environment variables and the event object. The Python runtime logs the START , END , and REPORT lines for each invocation.

Điều gì xảy ra khi AWS Lambda ném ngoại lệ?

Nếu Lambda gặp lỗi, nó sẽ trả về một loại ngoại lệ, thông báo và mã trạng thái HTTP cho biết nguyên nhân của lỗi.Máy khách hoặc dịch vụ gọi chức năng Lambda có thể xử lý lỗi theo chương trình hoặc chuyển nó cho người dùng cuối.it returns an exception type, message, and HTTP status code that indicates the cause of the error. The client or service that invoked the Lambda function can handle the error programmatically, or pass it along to an end user.

Lỗi gọi Lambda là gì?

Lỗi gọi có thể được gây ra bởi các vấn đề với các tham số yêu cầu, cấu trúc sự kiện, cài đặt chức năng, quyền của người dùng, quyền tài nguyên hoặc giới hạn.Nếu bạn gọi chức năng của mình trực tiếp, bạn sẽ thấy bất kỳ lỗi gọi nào trong phản hồi từ Lambda.can be caused by issues with request parameters, event structure, function settings, user permissions, resource permissions, or limits. If you invoke your function directly, you see any invocation errors in the response from Lambda.

Lambda có thử lại lỗi không?

Nếu chức năng của bạn có lỗi, dịch vụ Lambda sẽ tự xem lại chức năng của bạn.Vì cùng một sự kiện có thể được nhận nhiều lần, các chức năng nên được thiết kế để không ổn định.Điều này có nghĩa là việc nhận cùng một sự kiện nhiều lần không thay đổi kết quả ngoài lần đầu tiên nhận được sự kiện.. Since the same event may be received more than once, functions should be designed to be idempotent . This means that receiving the same event multiple times does not change the result beyond the first time the event was received.