Sửa lỗi AWS Lambda 'Code uncompressed size is greater than max allowed size' khi triển khai

intermediate☁️ AWS2026-05-30| AWS CLI, Serverless Framework, AWS SAM, Terraform, Node.js/Python/Java runtime

Error Message

An error occurred (InvalidParameterValueException) when calling the UpdateFunctionCode operation: Code uncompressed size is greater than 262144000 bytes
#aws-lambda#deployment#serverless

Bức tường 250MB: Tại sao quá trình triển khai của bạn thất bạiAWS Lambda có một giới hạn cứng nghiêm ngặt đối với các gói triển khai: 50 MB cho các tệp tải lên đã nén (zip) và 250 MB cho nội dung đã giải nén. Khi bạn cố gắng triển khai một function vượt quá giới hạn này, AWS API sẽ trả về lỗi sau:

An error occurred (InvalidParameterValueException) when calling the UpdateFunctionCode operation: Code uncompressed size is greater than 262144000 bytes

Điều này thường xảy ra khi dự án của bạn bao gồm các phụ thuộc nặng (như NumPy, Pandas hoặc các module Node nặng), các tệp nhị phân lớn hoặc các thư mục tài liệu cục bộ không nên có trong gói production.

Phân tích nguyên nhân gốc rễCon số 262.144.000 bytes được đề cập trong lỗi chính xác là 250 MB. AWS tính toán điều này bằng cách cộng dồn mọi tệp trong gói của bạn sau khi nó được giải nén trong môi trường thực thi Lambda. Nếu bạn sử dụng AWS CLI hoặc các công cụ như Serverless Framework, gói sẽ được nén cục bộ, nhưng AWS vẫn kiểm tra dung lượng cuối cùng.

Các nguyên nhân phổ biến bao gồm:

  • node_modules: Bao gồm nhầm devDependencies.- Python site-packages: Các thư viện khoa học dữ liệu lớn.- Các tệp tạm thời: Thư mục .git, tệp cache hoặc dữ liệu kiểm thử.- Các tệp nhị phân: Bao gồm ffmpeg hoặc các trình duyệt headless trực tiếp trong tệp zip.### Cách khắc phục nhanh: Tối ưu hóa gói của bạnTrước khi thay đổi kiến trúc, hãy thử làm gọn gói triển khai hiện tại của bạn.

1. Loại bỏ các phụ thuộc không cần thiếtĐảm bảo bạn chỉ đóng gói các phụ thuộc cho production. Đối với Node.js, hãy chạy:

npm prune --production

Đối với Python, hãy sử dụng môi trường ảo (virtual environment) và chỉ cài đặt những gì có trong requirements.txt, tránh các gói hệ thống toàn cục.

2. Sử dụng tệp bỏ qua cho LambdaNếu bạn sử dụng Serverless Framework hoặc AWS SAM, hãy sử dụng mẫu loại trừ (exclude pattern) trong cấu hình của bạn. Tạo hoặc cập nhật tệp serverless.yml:

package:
  patterns:
    - '!node_modules/aws-sdk/**' # Đã được cung cấp sẵn bởi môi trường thực thi Lambda
    - '!.git/**'
    - '!tests/**'
    - '!docs/**'

Cách khắc phục lâu dài 1: Di chuyển các phụ thuộc sang Lambda LayersNếu mã nguồn của bạn nhỏ nhưng các phụ thuộc lại lớn, hãy di chuyển các thư viện sang một Lambda Layer. Điều này tách biệt mã function của bạn khỏi các thư viện nặng.

  • Tạo một layer chỉ chứa thư mục node_modules hoặc python.- Gắn layer đó vào function của bạn.- Giới hạn 250MB vẫn áp dụng cho tổng dung lượng của function và tất cả các layer, nhưng layer giúp quản lý và chia sẻ mã dễ dàng hơn.### Cách khắc phục lâu dài 2: Chuyển sang Container Images (Khuyên dùng)Nếu bạn không thể đưa gói của mình xuống dưới 250 MB (thường gặp trong Machine Learning hoặc các ứng dụng Java nặng), giải pháp tốt nhất là đóng gói Lambda của bạn dưới dạng một Docker Container Image. Lambda container images có giới hạn cao hơn nhiều: 10 GB. Các bước di chuyển:
  • Tạo một Dockerfile sử dụng base image của AWS Lambda.- Sao chép mã của bạn và cài đặt các phụ thuộc bên trong image.- Đẩy image lên Amazon ECR (Elastic Container Registry).- Cập nhật Lambda function của bạn để sử dụng container image thay vì tệp .zip.Ví dụ Dockerfile cho một function Python:
FROM public.ecr.aws/lambda/python:3.9

# Cài đặt các phụ thuộc
COPY requirements.txt .
RUN pip install -r requirements.txt

# Sao chép mã function
COPY app.py .

# Thiết lập lệnh CMD cho handler của bạn
CMD [ "app.lambda_handler" ]

Xác minh: Cách xác nhận lỗi đã được khắc phụcSau khi áp dụng một trong các cách khắc phục trên, hãy kích hoạt triển khai mới. Bạn có thể xác minh kích thước hiện tại bằng AWS CLI:

aws lambda get-function --function-name your-function-name --query 'Configuration.CodeSize'

Nếu bạn đã chuyển sang container image, thuộc tính CodeSize sẽ phản ánh siêu dữ liệu (metadata), nhưng bạn sẽ không còn gặp lỗi giới hạn giải nén 250MB nữa.

Related Error Notes